Initial upload of Nokia's AT based test LTSY which uses the dispatcher AT_Test_LTSY
authorTom Pritchard <tomp@symbian.org>
Tue, 09 Feb 2010 12:31:43 +0000
branchAT_Test_LTSY
changeset 1 4047d69ee0e4
parent 0 3553901f7fa8
child 2 477feb25356d
Initial upload of Nokia's AT based test LTSY which uses the dispatcher
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/allcallreleasecompleteobserver.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atanswer.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atchld.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atclcc.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atdialvoice.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atdtmfvts.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/athangup.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/athangupcommandrecords.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atring.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atwaitforcallhandler.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/callinformationquerycompletenotify.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/unsolicitedcommandcallcontrolhandler.h
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atanswer.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atchld.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atclcc.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atdialvoice.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atdtmfvts.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/athangup.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/athangupcommandrecords.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atring.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atwaitforcallhandler.cpp
telephonyserverplugins/attestltsy/atcommand/callcontrol/src/unsolicitedcommandcallcontrolhandler.cpp
telephonyserverplugins/attestltsy/atcommand/generic/inc/activecommandstore.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/asynchelperrequest.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandbase.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandcontrolbase.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandexecuteobserver.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandtype.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/athelpercommand.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atipcrequestcompleteobserver.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atmanager.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atswitchonlinemode.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atunsolicited.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/atunsolicitedobserver.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/globalphonemanager.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycallinformation.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycallinformationmanager.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycommondefine.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/mslogger.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/panic.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/requestbase.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/respondbufparser.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/tsyconfg.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/unsolicitedeventmonitor.h
telephonyserverplugins/attestltsy/atcommand/generic/inc/unsolicitedparams.h
telephonyserverplugins/attestltsy/atcommand/generic/src/activecommandstore.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/asynchelperrequest.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/atcommandbase.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/atcommandcontrolbase.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/athelpercommand.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/atmanager.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/atswitchonlinemode.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/atunsolicited.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/globalphonemanager.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/ltsycallinformation.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/ltsycallinformationmanager.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/mslogger.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/panic.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/requestbase.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/respondbufparser.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/tsyconfg.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/unsolicitedeventmonitor.cpp
telephonyserverplugins/attestltsy/atcommand/generic/src/unsolicitedparams.cpp
telephonyserverplugins/attestltsy/atcommand/phone/inc/atdetectnetwork.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetbatteryinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetcellinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetfdnstatus.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetfdnsupport.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetimei.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmanufacturer.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmodel.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmodemstatus.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetnetworkinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetnetworkregistrationstatus.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetphonecellinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetrevision.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetsignalstrength.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetsimstatusready.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atnetworkregstatuschange.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atnotifycellinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atselectnetwork.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atselectnetworkmode.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/atsetnotifycell.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/getcurrentnetworkinfo.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/getfdnstatus.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/getoperatorname.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/getphoneid.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/initializephone.h
telephonyserverplugins/attestltsy/atcommand/phone/inc/notifybatteryandsignal.h
telephonyserverplugins/attestltsy/atcommand/phone/src/atdetectnetwork.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetbatteryinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetcellinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetfdnstatus.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetfdnsupport.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetimei.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmanufacturer.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmodel.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmodemstatus.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkregistrationstatus.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetphonecellinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetrevision.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetsignalstrength.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atgetsimstatusready.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atnetworkregstatuschange.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atnotifycellinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atselectnetwork.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atselectnetworkmode.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/atsetnotifycell.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/getcurrentnetworkinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/getfdnstatus.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/getoperatorname.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/getphoneid.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/initializephone.cpp
telephonyserverplugins/attestltsy/atcommand/phone/src/notifybatteryandsignal.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkgetphonestoreinfo.h
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstorecache.h
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoredelete.h
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoreinitialise.h
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoreread.h
telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstorewrite.h
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkgetphonestoreinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstorecache.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoredelete.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoreinitialise.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoreread.cpp
telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstorewrite.cpp
telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkengetinfo.h
telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkenread.h
telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkenreadall.h
telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkengetinfo.cpp
telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkenread.cpp
telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkenreadall.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/activatecontextandgetaddr.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsattach.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsconfig.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextactivate.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextconnect.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextdeactivate.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextdelete.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsdetach.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsgetcontextaddr.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsntwkregstatus.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsntwkregstatuschange.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsqosprofile.h
telephonyserverplugins/attestltsy/atcommand/pktservice/inc/initialisepdpcontext.h
telephonyserverplugins/attestltsy/atcommand/pktservice/src/activatecontextandgetaddr.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsattach.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsconfig.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextactivate.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextconnect.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextdeactivate.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextdelete.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsdetach.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsgetcontextaddr.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsntwkregstatus.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsntwkregstatuschange.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprssetqosprofile.cpp
telephonyserverplugins/attestltsy/atcommand/pktservice/src/initialisepdpcontext.cpp
telephonyserverplugins/attestltsy/atcommand/sms/inc/atmessagestoreinfo.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsack.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsreceive.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmssend.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoredelete.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoreinfo.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoreread.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstorereadall.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstorewrite.h
telephonyserverplugins/attestltsy/atcommand/sms/inc/smsatutil.h
telephonyserverplugins/attestltsy/atcommand/sms/src/atmessagestoreinfo.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsack.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsreceive.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmssend.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoredelete.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoreinfo.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoreread.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorereadall.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorewrite.cpp
telephonyserverplugins/attestltsy/atcommand/sms/src/smsatutil.cpp
telephonyserverplugins/attestltsy/bwins/licenseeskeletontsyu.def
telephonyserverplugins/attestltsy/bwins/stltsyu.def
telephonyserverplugins/attestltsy/comms/inc/commengine.h
telephonyserverplugins/attestltsy/comms/inc/commreader.h
telephonyserverplugins/attestltsy/comms/inc/commwriter.h
telephonyserverplugins/attestltsy/comms/inc/mcommobserver.h
telephonyserverplugins/attestltsy/comms/inc/stringparser.h
telephonyserverplugins/attestltsy/comms/src/commengine.cpp
telephonyserverplugins/attestltsy/comms/src/commreader.cpp
telephonyserverplugins/attestltsy/comms/src/commwriter.cpp
telephonyserverplugins/attestltsy/comms/src/stringparser.cpp
telephonyserverplugins/attestltsy/data/snap.cfg
telephonyserverplugins/attestltsy/data/systemtest.cfg
telephonyserverplugins/attestltsy/eabi/licenseeskeletontsyu.def
telephonyserverplugins/attestltsy/eabi/stltsyu.def
telephonyserverplugins/attestltsy/group/bld.inf
telephonyserverplugins/attestltsy/group/bld.inf~
telephonyserverplugins/attestltsy/group/stltsy.mmp
telephonyserverplugins/attestltsy/handler/inc/cltsycallcontrolhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsycallcontrolmultipartyhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsycellbroadcasthandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsyfactoryv1.h
telephonyserverplugins/attestltsy/handler/inc/cltsypacketserviceshandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookenhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookonhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsyphonehandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsysathandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsysecurityhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsysimhandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsysmshandler.h
telephonyserverplugins/attestltsy/handler/inc/cltsysupplementaryserviceshandler.h
telephonyserverplugins/attestltsy/handler/inc/ltsymacros.h
telephonyserverplugins/attestltsy/handler/inc/misdispatchinterfacesupported.h
telephonyserverplugins/attestltsy/handler/src/cltsycallcontrolhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsycallcontrolmultipartyhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsycellbroadcasthandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsyfactoryv1.cpp
telephonyserverplugins/attestltsy/handler/src/cltsypacketserviceshandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsyphonebookenhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsyphonebookhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsyphonebookonhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsyphonehandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsysathandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsysecurityhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsysimhandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsysmshandler.cpp
telephonyserverplugins/attestltsy/handler/src/cltsysupplementaryserviceshandler.cpp
telephonyserverplugins/attestltsy/integrationtest/documentation/integration_stltsy_Test_Specification.doc
telephonyserverplugins/attestltsy/integrationtest/group/bld.inf
telephonyserverplugins/attestltsy/integrationtest/group/te_integration_stltsysuite.iby
telephonyserverplugins/attestltsy/integrationtest/group/te_integration_stltsysuite.mmp
telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuitedefs.h
telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuiteserver.h
telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuitestepbase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyasyncoperation.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolbase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolcustomapiterminateallcalls.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialbadcall.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialemergencycall.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialemergencycallstopallcalls.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialhangupcase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialselfcall.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase1.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase2.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase3.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolphoneterminateallcalls.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolswapcalls.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallshareddata.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosephone.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosesms.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosesmsstore.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetmessagestoreinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonebatterycap.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonebatteryinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonesignalcap.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonesignalstrength.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsymodel.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsymodel.inl
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopenphone.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopensms.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopensmsstore.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkclose.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkdelete.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkdeleteinvalidindex.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkgetstoreinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkopen.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkread.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkreadinvalidindex.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkwrite.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkwriteinvalidindex.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetcellinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetcurrentnetworkinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetdetectednetworks.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetdetectednetworkscancel.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetfdnstatus.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegethomenetwork.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetnetworkregistrationstatus.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetphoneid.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphoneregistercellinfochangenotification.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphoneselectnetwork.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonesetnetworkselectionsetting.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestepbase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestorebase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestoreshareddata.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktactivatecontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktattachnetwork.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosecontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosecontextqos.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosepacket.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdeactivatecontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdeletecontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdetachnetwork.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextconfig.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextqosprofile.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetdefaultparams.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetdynamiccapabilities.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetnwkregistrationstatus.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetservicestatus.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetstaticcapabilities.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktinitialisecontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopencontext.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopencontextqos.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopenpacket.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetcontextconfig.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetcontextqosprofile.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetdefaultparams.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktshareddata.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktshareddata.inl
telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktteststepbase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsyshareddata.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsack.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsatutil.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsbase.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmscontrolreceivesmscase1step.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmscontrolsendsmscase1step.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdelete.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdeleteall.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdeleteinvalidindex.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsnack.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsread.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsreadinvalidindex.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsreceive.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmssend.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmssendinvalidparam.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsshareddata.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsstore.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsstoregetinfo.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmswrite.h
telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmswriteinvalidparam.h
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stllsycallcontrol.script
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stllsysmscontrol.script
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsySuite.script
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsyphonebook.script
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsyphonecontrol.script
telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsypktcontrol.script
telephonyserverplugins/attestltsy/integrationtest/src/te_integration_stltsysuiteserver.cpp
telephonyserverplugins/attestltsy/integrationtest/src/te_integration_stltsysuitestepbase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyasyncoperation.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolbase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolcustomapiterminateallcalls.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialbadcall.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialemergencycall.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialemergencycallstopallcalls.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialhangupcase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialselfcall.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase1.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase2.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase3.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolphoneterminateallcalls.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolswapcalls.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsycallshareddata.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosephone.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosesms.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosesmsstore.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsygetmessagestoreinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonebatterycap.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonebatteryinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonesignalcap.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonesignalstrength.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsymodel.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyopenphone.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyopensms.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyopensmsstore.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkclose.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkdelete.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkdeleteinvalidindex.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkgetstoreinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkopen.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkread.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkreadinvalidindex.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkwrite.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkwriteinvalidindex.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonedetectednetworks.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonedetectednetworkscancel.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetcellinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetcurrentnetworkinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetfdnstatus.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegethomenetwork.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetnetworkregistrationstatus.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetphoneid.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphoneregistercellinfochangenotification.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphoneselectnetwork.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonesetnetworkselectionsetting.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestepbase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestorebase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestoreshareddata.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktactivatecontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktattachnetwork.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosecontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosecontextqos.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosepacket.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdeactivatecontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdeletecontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdetachnetwork.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextconfig.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextqosprifile.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextqosprofile.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetdefaultparams.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetdynamiccapabilities.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetnwkregistrationstatus.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetservicestatus.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetstaticcapabilities.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktinitialsecontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopencontext.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopencontextqos.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopenpacket.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetcontextconfig.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetcontextqosprofile.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetdefaultparams.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktshareddata.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsypktteststepbase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsyshareddata.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsack.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsatutil.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsbase.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmscontrolreceivesmscase1step.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmscontrolsendsmscase1step.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdelete.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdeleteall.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdeleteinvalidindex.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsnack.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsread.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsreadinvalidindex.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsreceive.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmssend.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmssendinvalidparam.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsshareddata.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsstore.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsstoregetinfo.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmswrite.cpp
telephonyserverplugins/attestltsy/integrationtest/src/testltsysmswriteinvalidparam.cpp
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsycallcontrol.ini
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsycallcontrol.script
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsysmscontrol.ini
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsysmscontrol.script
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonebook.script
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonecontrol.ini
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonecontrol.script
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsypktcontrol.ini
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsypktcontrol.script
telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsysuite.ini
telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite.xml
telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite/te_integration_stltsytest.xml
telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite/testexecuteservers/te_integration_stltsysuite.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/allcallreleasecompleteobserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,35 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// MAllCallReleaseCompleteObserver
+
+
+#ifndef ALLCALLRELEASECOMPLETEOBSERVER_H_
+#define ALLCALLRELEASECOMPLETEOBSERVER_H_
+
+//system include
+#include <e32std.h>
+//user include
+
+
+class MAllCallReleaseCompleteObserver
+	{
+public:
+	
+	/**
+	 * All call was released by ATH
+	 */
+	virtual void ReleaseAllCallComplete(TInt aError) = 0;
+	};
+
+#endif /*ALLCALLRELEASECOMPLETENOTIFY_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atanswer.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,186 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atanswer.h
+// This contains CATAnswer which answering incomging call.
+// 
+
+#ifndef ATANSWER_H_
+#define ATANSWER_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+class CATAnswer : public CAtCommandBase
+	{
+public:
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATAnswer* NewL(CGlobalPhonemanager& aGloblePhone,
+			               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATAnswer* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATAnswer();
+	
+	/**
+	 * Seting answer id
+	 * 
+	 * @param aCallId
+	 */
+	void SetAnswerCallId(TInt aCallId);
+	
+	/**
+	 * Seting the call is or not 3rd party
+	 * 
+	 * 
+	 * @param aIsIsvCall ETrue 3rd party  another EFalse
+	 */
+	void SetIsIsvCall(TBool aIsIsvCall);
+	
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+		
+	/**
+	* Start AT request
+	* 
+	*/
+	virtual void StartRequest();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+protected:
+	
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CATAnswer(CGlobalPhonemanager& aGloblePhone, 
+			  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	* The last execute end of this command
+	*/	
+	void Complete();
+	
+private:
+	
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle response OK
+	 * 
+	 */
+	void HandleConnectedComplete();		
+	
+private:
+	
+	/**
+	 * AT command execute step
+	 * 
+	 */
+	enum TATStep
+		{
+		EATNotInProgress,
+		EATWaitForWriteComplete,
+		EATReadComplete
+		};	
+	
+private:
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iIOStatus;
+	
+	/**
+	 * At command return errors
+	 * 
+	 */
+	TInt iATResult;
+	
+	/**
+	 * Identifier step
+	 * 
+	 */
+	TATStep iAnswerStep;	
+	
+	/**
+	 * answer call id
+	 * 
+	 */
+	TInt iCallId;
+	
+	/**
+	 * The flag of 3rd party call
+	 * 
+	 */
+	TBool iIsIsvCall;
+	
+	};
+
+#endif /*ATANSWER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atchld.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,296 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atchld.h
+// This contains CATChld which hold, resume, release, swap one call.
+// 
+
+#ifndef ATCHLD_H_
+#define ATCHLD_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+class CATChld : public CAtCommandBase
+	{
+public:
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATChld* NewL(CGlobalPhonemanager& aGloblePhone,
+			             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATChld* NewLC(CGlobalPhonemanager& aGloblePhone,
+			              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATChld();
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+		
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start AT request
+	* 
+	*/
+	virtual void StartRequest();	
+	
+public:
+	
+	/**
+	 * IPC type
+	 * 
+	 */
+	enum TIpcType
+		{
+		ELtsyReqCallHangup = 0,   //Invoke function HandleHangUpReqL(TInt aCallId, TInt aHangupCause)     
+		ELtsyReqCallHold = 1,	  //Invoke function HandleHoldReqL(TInt aCallId)
+		ELtsyReqCallResume = 2,	  //Invoke function HandleResumeReqL(TInt aCallId)
+		ELtsyReqCallSwap = 3	  //Invoke function HandleSwapReqL(TInt aHeldCallId, TInt aConnectedCallId)
+		};
+	
+	/**
+	 * which identify AT type
+	 * 
+	 */
+	enum TChldType
+		{
+		EReleaseAllHeldCallOrUDUB = 0,
+		EReleaseAllActiveCallAndAcceptHeldWaiting = 1,
+		EHeldAllActiveCallAndAcceptHeldWaiting = 2,  //For held a call and resume a call
+		EAddHeldCallToConversation = 3,
+		ECallTranster =  4,
+		ERleaseSpecificCall = 5,
+		EHeldAllActiveCallExceptCallX = 6
+		};
+	
+	/**
+	 *Set IPC type 
+	 * 
+	 * @param aIpcType
+	 */
+	void SetIpcType(TIpcType aIpcType);	
+	
+	/**
+	 * Set chld type
+	 * 
+	 * @param aManageType
+	 */
+	void SetChldType(TChldType aManageType);
+	
+	/**
+	 * Set call id
+	 * 
+	 * @param aCallId
+	 */
+	void SetCallId(TInt aCallId);
+	
+	/**
+	 * Set connected call id
+	 * 
+	 * @param aConnectedCallId
+	 */
+	void SetConnectedCallId(TInt aConnectedCallId);
+	
+	/**
+	 * Set hang up case 
+	 * 
+	 * @param aHangupCase
+	 */
+	void SetHangupCase(TInt aHangupCase);
+	
+	/**
+	 * Init member
+	 * 
+	 */
+	void InitVariable();
+	
+	/**
+	 * Prevent second holding when the aHoldCallId is holded
+	 * 
+	 * @param aHoldCallId
+	 */
+	TBool IsHoldCall(TInt aHoldCallId);
+	
+	/**
+	 * Prevent second resumeing when the aActiveCallId is actived
+	 * 
+	 * @param aActiveCallId
+	 */
+	TBool IsActiveCall(TInt aActiveCallId);
+	
+protected:
+	
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CATChld(CGlobalPhonemanager& aGloblePhone,
+			CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/	
+	void ConstructL();
+
+	/**
+	* The last execute end of this command
+	* 
+	*/	
+	virtual void Complete();
+	
+private:
+	
+	/**
+	 * AT command execute step
+	 * 
+	 */
+	enum TATStep
+		{
+		EATNotInProgress,
+		EATWaitForWriteComplete,
+		EATReadComplete
+		};
+	
+private:
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle response OK
+	 * 
+	 */
+	void HandleCHLDComplete();
+	
+	/**
+	 * Hang up call complete
+	 * 
+	 */
+	void HandleHangupComplete();
+	
+	/**
+	 * Hold call complete
+	 * 
+	 */
+	void HandleHoldComplete();
+	
+	/**
+	 * Resume call complete
+	 * 
+	 */
+	void HandleResumeComplete();
+	
+	/**
+	 * Swap call complete
+	 * 
+	 */
+	void HandleSwapComplete();
+	
+private:
+	
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iIOStatus;
+	
+	/**
+	 * At command return errors
+	 * 
+	 */
+	TInt iATResult;
+		
+	/**
+	 * Identifier step
+	 * 
+	 */
+	TATStep iATStep;
+	
+	/**
+	 * 
+	 * 
+	 */
+	TIpcType iIpcType;
+	
+	/**
+	 * 
+	 * 
+	 */
+	TChldType iChldType;
+	
+	/**
+	 * for hangup/hold/resum/swap
+	 * 
+	 */
+	TInt iCallId;
+	
+	/**
+	 * for swap
+	 * 
+	 */
+	TInt iConnectedCallId;
+	
+	/**
+	 * for hangup
+	 * 
+	 */
+	TInt iHangupCause;
+	
+	};
+
+#endif /*ATCHLD_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atclcc.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,224 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atclcc.h
+// This contains CATClcc which query incoming or waitting call information.
+// 
+
+
+#ifndef ATCLCC_H_
+#define ATCLCC_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+//class forward
+class MCallInformationQueryCompleteNotify;
+
+class CATClcc : public CAtCommandBase
+	{
+public:
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATClcc* NewL(CGlobalPhonemanager& aGloblePhone,
+			             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATClcc* NewLC(CGlobalPhonemanager& aGloblePhone,
+			              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATClcc();
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+		
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/	
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);	
+	
+	/**
+	* Start AT request
+	* 
+	*/
+	virtual void StartRequest();
+	
+	/**
+	 * Init member variable
+	 * 
+	 */
+	void InitVariable();
+	
+	/**
+	 * Add query call information complete obsever 
+	 * 
+	 */
+	void AddQueryCallInformationCompleteNotify(MCallInformationQueryCompleteNotify* aQueryCallInfoNotify);
+
+public:
+	
+	/**
+	 * AT execute result
+	 * 
+	 */
+	enum TATProcessStates
+		{
+		EProcessNotInProgress,
+		EProcessInProgress,
+		EProcessError,
+		EProcessOK
+		};
+	
+	/**
+	 * Get AT Process status
+	 * 
+	 */
+	TATProcessStates GetProcessStates() const;
+	
+	/**
+	 * Set AT Process status
+	 * 
+	 */
+	void SetProcessStates(TATProcessStates aProcessState);
+	
+protected:
+	
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CATClcc(CGlobalPhonemanager& aGloblePhone,
+			CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	* The last execute end of this command
+	* 
+	*/	
+	virtual void Complete();
+	
+private:
+	
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle response OK
+	 * 
+	 */
+	void HandleCLCCComplete();	
+	
+	/**
+	 * Parse AT clcc result
+	 * 
+	 */
+	void ParseCLCCResponseL(const TDesC8& aResponseBuf);
+	
+private:
+	
+	/**
+	 * At step
+	 * 
+	 */
+	enum TATStep
+		{
+		EATNotInProgress,
+		EATWaitForWriteComplete,
+		EATReadComplete
+		};
+	
+private:
+	
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iIOStatus;
+	
+	/**
+	 * At command return errors
+	 * 
+	 */
+	TInt iATResult;
+	
+	/**
+	 * Find OK result
+	 * 
+	 */
+	TBool iOKFounded;
+	
+	/**
+	 * Identifier step
+	 * 
+	 */
+	TATStep iATStep;
+	
+	/**
+	 * Process at command states
+	 * 
+	 */
+	TATProcessStates iProcessStates;
+	
+	/**
+	 * Observer which notify querying call information result
+	 * 
+	 */
+	MCallInformationQueryCompleteNotify* iQueryCallInfoNotify;
+	};
+
+#endif /*ATCLCC_H_*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atdialvoice.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,246 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atdialvoice.h
+// This contains CATDialVoice which dial a voice call.
+// 
+
+#ifndef ATDIALVOICE_H_
+#define ATDIALVOICE_H_
+
+//system include
+#include <etelmm.h>
+
+//user include
+#include "atcommandbase.h"
+#include "unsolicitedparams.h"
+#include "athangup.h"
+#include "allcallreleasecompleteobserver.h"
+
+class CATDialVoice : public CAtCommandBase, public MAllCallReleaseCompleteObserver
+	{
+public:
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATDialVoice* NewL(CGlobalPhonemanager& aGloblePhone,
+			                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CATDialVoice* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATDialVoice();
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+		
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Start AT request
+	* 
+	*/
+	virtual void StartRequest();
+	
+	/**
+	 * set telephone number
+	 * 
+	 * @param aTelNum
+	 */
+	void SetTelephoneNumber(const TDesC8& aTelNum);
+	
+	/**
+	 * ETrue : Emergency call
+	 * EFalse : Normal call
+	 */
+	void SetEmergnecyCallFlag(TBool aIsEmergencyCall = EFalse);
+	
+	/**
+	 * Init member
+	 * 
+	 */
+	void InitVariable();
+	
+	/**
+	 * From MAllCallReleaseCompleteObserver
+	 * 
+	 * @param aError
+	 */
+	virtual void ReleaseAllCallComplete(TInt aError);
+	
+protected:
+	
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CATDialVoice(CGlobalPhonemanager& aGloblePhone,
+			     CCtsyDispatcherCallback& aCtsyDispatcherCallback); 
+	
+	/**
+	* 2nd Constructor
+	* 
+	*/	
+	void ConstructL();
+	
+	/**
+	* The last execute end of this command
+	* 
+	*/	
+	virtual void Complete();
+	
+	/**
+	 * Parse +Wind at command
+	 * 
+	 * @param aParams class TUnsolicitedParams
+	 * @param aCommandBuf buffer of at command
+	 */
+	TInt ParseUnsolicitedCommandBufL(TUnsolicitedParams& aParams, const TDesC8& aCommandBuf);
+	
+	/**
+	 * Parse +Wind at command
+	 * 
+	 * @param aParams class TUnsolicitedParams
+	 */
+	TInt ProcessUnsolicitedCallCreated(const TUnsolicitedParams& aParams);
+private:
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle call dialing complete
+	 * 
+	 */
+	void HandleDiallingComplete();
+	
+	/**
+	 * Handle call connecting complete
+	 * 
+	 */
+	void HandleConnectingComplete();
+	
+	/**
+	 * Handle call connected complete
+	 * 
+	 */
+	void HandleConnectedComplete();
+		
+private:
+	
+	/**
+	 * Dial voice call step
+	 * 
+	 */
+	enum TDialVoicStep
+		{
+		EATDialNotInProgress,
+		EATWaitForWriteComplete,
+		EATWaitForDiallingComplete,
+		EATWaitForConnectingComplete,
+		EATWaitForConnectedComplete
+		};
+	
+private:
+	
+	/**
+	 * Telephony number
+	 * 
+	 */
+	TBuf8<RMobilePhone::KMaxMobileTelNumberSize> iTelNum;
+	
+	/**
+	 * call id
+	 * 
+	 */
+	TInt iCallId;
+	
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iStatus;
+	
+	/**
+	 * At Command return errors
+	 * 
+	 */
+	TInt iResult;
+	
+	/**
+	 * OK response is founded
+	 * 
+	 */
+	TBool iOKFounded;
+	
+	/**
+	 * State about reading and writing
+	 * 
+	 */
+	TDialVoicStep iDialStep;
+	
+	/**
+	 * True : Emergency Call
+	 * False : Normal Call
+	 * 
+	 */
+	TBool iIsEmergencyCall;
+	
+	/**
+	 * When Emergency call release all call
+	 */
+	CATHangUp* iATH;
+	};
+
+#endif /*ATDIALVOICE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atdtmfvts.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,242 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atdtmfvts.h
+// This contains CATDtmfVts which send the DTMF to network.
+// 
+
+#ifndef ATDTMFVTS_H_
+#define ATDTMFVTS_H_
+
+//system include
+#include <callbacktimer.h>
+//user include
+#include "atcommandbase.h"
+
+//const define
+const TInt KLtsyTonesLength = 200;
+
+
+//class forward
+class CGlobalPhonemanager;
+class CCtsyDispatcherCallback;
+
+class CATDtmfVts : public CAtCommandBase, 
+				   public MTimerObserver
+	{
+public:
+	/**
+	 * Factory funciton
+	 * 
+	 */
+	static CATDtmfVts* NewL(CGlobalPhonemanager& aGloblePhone,
+			                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CATDtmfVts* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATDtmfVts();
+	
+	/**
+	 * Execute the AT command
+	 * 
+	 */
+	virtual void ExecuteCommand();
+		
+	/**
+	 * Start the request
+	 * 
+	 */
+	virtual void StartRequest();
+	
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+		
+	/**
+	 * This call id is must an active call id
+	 * 
+	 */
+	TInt SetCallId(TInt aCallId);
+	
+	/**
+	 * Must be invoke when Execucommand
+	 * 
+	 */
+	TInt SetDtmfString(const TDesC& aDtmfString);
+	
+	/**
+	 * Check if the char is the DTMF tones
+	 * 
+	 */
+	TBool CharIsDtmf(const TChar& aDtmfChar);
+	
+	/**
+	 * Check if the string are DTMF tones
+	 * 
+	 */
+	TBool StringIsDtmf(const TDesC& aDtmfString);
+	
+	/**
+     * Reset the all the flag
+	 * 
+	 */
+	void InitVariable();		
+public:
+	/**
+	 * Define the DTMF type
+	 * 
+	 */
+	enum TDtmfWorkType
+		{
+		EDtmfUnknow,
+		EDtmfSendOneTone,   //Send One Char
+		EDtmfSendMoreTones, //Send string tones
+		EDtmfStopOneTone,   //Stop One char
+		EDtmfCancelMoreTones //Cancel More Tones
+		};
+	
+	/**
+	 * 
+     * Set the DTMF Type
+	 */
+	void SetDtmfWorkType(TDtmfWorkType aDtmfWorkType);
+protected:	
+	/**
+	 * Constructor
+	 * 
+	 */
+	CATDtmfVts(CGlobalPhonemanager& aGloblePhone,
+			   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();	
+private:
+	/**
+	 * Overwite the Parent's complete
+	 * 
+	 */
+	virtual void Complete();
+	
+	/**
+	 * Checck if there is any active call current
+	 * 
+	 */
+	TBool IsHaveActiveCall(TInt aActiveCallId);	
+	
+	/**
+	 * From MTimerObserver 
+	 * 
+	 */
+    virtual void TimerRun(TInt aError);
+    
+    /**
+     * Start the timer
+     * 
+     */
+    void StartTimer();	
+    
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle the complete event
+	 * 
+	 */
+	void HandleSendDtmfTonesSuccess();
+	
+private:
+	
+	/**
+	 * Define the state of sending the DTMF tone
+	 * 
+	 */
+	enum TATStep
+		{
+		EATNotInProgress,
+		EATWaitForWriteComplete,
+		EATReadComplete
+		};
+private:
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iIOStatus;
+	
+	/**
+	 * At command return errors
+	 * 
+	 */
+	TInt iATResult;
+	
+	/**
+	 * The sending is done successfully
+	 * 
+	 */
+	TBool iOKFounded;
+	
+	/**
+	 * Identifier step
+	 * 
+	 */
+	TATStep iAnswerStep;	
+	
+	/**
+	 * The calll Id
+	 * 
+	 */
+	TInt iCallId;
+	
+	/**
+	 * The DTMF type
+	 * 
+	 */
+	TDtmfWorkType iDtmfWorkType;
+	
+	/**
+	 * The timer active object
+	 * 
+	 */
+	CCallbackTimer* iCallbackTimer;	
+	};
+
+#endif /*ATDTMFVTS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/athangup.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,187 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Hangup a ongoning call
+
+#ifndef ATHANGUP_H_
+#define ATHANGUP_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+//class forward
+class MAllCallReleaseCompleteObserver;
+
+class CATHangUp : public CAtCommandBase
+	{
+public:
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CATHangUp* NewL(CGlobalPhonemanager& aGloblePhone,
+			               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CATHangUp* NewLC(CGlobalPhonemanager& aGloblePhone,
+			               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destrctor
+	 * 
+	 */
+	virtual ~CATHangUp();
+	
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */
+	virtual void ExecuteCommand();
+	
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */		
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);	
+	
+	/**
+	 * From CRequestBase
+	 * 
+	 */	
+	virtual void StartRequest();
+	
+	/**
+	 * Add the call release observer
+	 */
+	void AddAllCallReleaseObserver(MAllCallReleaseCompleteObserver* aObserver);
+	
+	/**
+	 * Reset the internal states
+	 */
+	void InitVariable();
+	
+public:
+	
+	/**
+	 * Define the hungup opertion
+	 * 
+	 */
+	enum THangupOperator
+		{
+		EUnknownAPI,
+		ECustomAPI,
+		ERMobilePhoneAPI
+		};
+	
+	/**
+	 * Set the hangup opertion type
+	 * 
+	 */
+	void SetHangupOperator(THangupOperator aOperator);
+	
+protected:
+	/**
+	 * Constructor
+	 * 
+	 */
+	CATHangUp(CGlobalPhonemanager& aGloblePhone,
+			  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();
+	
+	/**
+	 * From CAtCommandBase
+	 * 
+	 */
+	virtual void Complete();
+	
+private:
+	/**
+	 * Handle IO errors
+	 * 
+	 */
+	void HandleIOError();
+	
+	/**
+	 * Handle response error
+	 * 
+	 */
+	void HandleResponseError();
+	
+	/**
+	 * Handle response OK
+	 * 
+	 */
+	void HandleDisconnectedComplete();		
+
+private:
+	/**
+	 * Define the states for hanging up a call
+	 * 
+	 */
+	enum THangUpStep
+		{
+		EATHangUpNotInProgress,
+		EATHangUpWaitForWriteComplete,
+		EATHangUpReadComplete
+		};
+	
+private:
+	/**
+	 * I/O error when Read or Write
+	 * include timeout
+	 */
+	TInt iIOStatus;
+	
+	/**
+	 * At command return errors
+	 * 
+	 */
+	TInt iATResult;
+		
+	/**
+	 * Identifier step
+	 * 
+	 */
+	THangUpStep iHangupStep;
+	
+	/**
+	 * The hangup opertion type
+	 * 
+	 */
+	THangupOperator iHangupOperator;
+	
+	/**
+	 * Notify all release
+	 * 
+	 */
+	MAllCallReleaseCompleteObserver* iAllCallReleaseObserver;
+	
+	};
+
+#endif /*ATHANGUP_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/athangupcommandrecords.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,112 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Record the infomation related to hangup commands
+
+#ifndef ATHANGUPCOMMANDRECORDS_H_
+#define ATHANGUPCOMMANDRECORDS_H_
+
+//system include
+#include <e32base.h>
+#include <e32cmn.h> 
+
+/**
+ * Hand up command information
+ * 
+ */
+class TATHanupCommandInfo
+	{
+public:
+	TATHanupCommandInfo();
+	TInt iCallId;
+	TInt iHangupCause;
+	};
+
+/**
+ * Hang up command information records
+ */
+class CATHangupCommandRecords : public CBase
+	{
+public:
+	
+	/**
+	 * Factory fucntion
+	 */
+	static CATHangupCommandRecords* NewL();
+	
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CATHangupCommandRecords* NewLC();
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATHangupCommandRecords();
+	
+	/**
+	 * Add hanup information
+	 */
+	TInt AddHangupCommandInfo(TInt aCallId, TInt aHangupCase);
+	
+	/**
+	 * KErrNone get command info
+	 * KErrNotFound not get command info
+	 * and then remove this info from the array
+	 */
+	TInt GetFirstHangupCommandInfoAndRemoveIt(TATHanupCommandInfo& aInfo);
+	
+	/**
+	 * Mark there is one hanup active command
+	 */
+	void SetHangupActiveFlag(TBool aIsActive);
+	
+	/**
+	 * Retrieve the flag of current hangup command
+	 *
+	 * @return The ETrue if there is one acitve hangup command active, EFalase otherwise
+	 */
+	TBool GetHangupActiveFlag() const;
+	
+	/**
+	 * Check if there are any hangup command in this store
+	 */
+	TBool IsHaveRecords() const;
+	
+protected:
+	
+	/**
+	 * Constructor
+	 */
+	CATHangupCommandRecords();
+	
+	/**
+	 * 2nd structor
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * Flag of active hangup command 
+	 */
+	TBool iHangupActive;
+	
+	/**
+	 * Store the hangup command info
+	 */
+	RArray<TATHanupCommandInfo> iHangupInfoArray;
+	};
+
+#endif /*ATHANGUPCOMMANDRECORDS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atring.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,71 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Wait for first one incoming call
+
+#ifndef ATRING_H_
+#define ATRING_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+class CATRing : public CAtCommandBase
+	{
+public:
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CATRing* NewL(CGlobalPhonemanager& aGloblePhone,
+			             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 *
+	 * Factory function
+	 * 
+	 */ 
+	static CATRing* NewLC(CGlobalPhonemanager& aGloblePhone,
+			              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 
+	 * Destructor
+	 * 
+	 */
+	virtual ~CATRing();
+	
+	/**
+	 * Run this command
+	 * 
+	 */
+	virtual void ExecuteCommand(){};
+		
+protected:
+	/**
+	 * 
+	 * Constructor
+	 * 
+	 */
+	CATRing(CGlobalPhonemanager& aGloblePhone,
+			CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();
+	
+	};
+
+#endif /*ATRING_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/atwaitforcallhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,62 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Wait for 1st incoming call
+
+#ifndef ATWAITFORCALLHANDLER_H_
+#define ATWAITFORCALLHANDLER_H_
+
+//system include
+
+//user include
+#include "atcommandcontrolbase.h"
+
+
+//class forward
+class CATRing;
+class CATClcc;
+
+class CATWaitForCallHandler : public CATCommandControlBase
+	{
+public:
+	static CATWaitForCallHandler* NewL(CGlobalPhonemanager& aGloblePhone,
+			                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	static CATWaitForCallHandler* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	virtual ~CATWaitForCallHandler();
+	
+	void StartToWaitForCall();
+	
+	//From MAtCommandExecuteObserver
+	void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	
+protected:
+	
+	CATWaitForCallHandler(CGlobalPhonemanager& aGloblePhone,
+			              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	void ConstructL();
+	
+	TInt ProcessIncomingCallInfomation();	
+
+private:
+	
+	CATRing* iAtRing;
+	
+	CATClcc* iAtClcc;
+
+	};
+
+#endif /*ATWAITFORCALLHANDLER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/callinformationquerycompletenotify.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,29 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// MCallInformationQueryCompleteNotify. The observer for getting the notification of completion of querying the call infomation
+
+#ifndef CALLINFORMATIONQUERYCOMPLETENOTIFY_H_
+#define CALLINFORMATIONQUERYCOMPLETENOTIFY_H_
+
+//system include
+#include <e32std.h>
+//user include
+
+class MCallInformationQueryCompleteNotify
+	{
+public:
+	virtual void QueryCallInformationComplete(TInt aError) = 0;
+	};
+
+#endif /*CALLINFORMATIONQUERYCOMPLETENOTIFY_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/inc/unsolicitedcommandcallcontrolhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,129 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CUnsolicitedCommandCallControlHandler. The handler for handling the unsolicited command related to call control
+
+#ifndef UNSOLICITEDCOMMANDCALLCONTROLHANDLER_H_
+#define UNSOLICITEDCOMMANDCALLCONTROLHANDLER_H_
+
+//system include
+#include <e32base.h>
+//user include
+#include "atunsolicitedobserver.h"
+#include "callinformationquerycompletenotify.h"
+
+//class forward
+class CGlobalPhonemanager;
+class CCtsyDispatcherCallback;
+class CATClcc;
+
+class CUnsolicitedCommandCallControlHandler : public CBase, 
+											  public MLtsyUnsolicitedCommandObserver,
+											  public MCallInformationQueryCompleteNotify											  
+	{
+public:
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CUnsolicitedCommandCallControlHandler* NewL(CGlobalPhonemanager& aGloblePhone,
+			                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CUnsolicitedCommandCallControlHandler* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CUnsolicitedCommandCallControlHandler();
+
+	/**
+	 * From MLtsyUnsolicitedCommandObserver
+	 * 
+	 */
+	virtual void UnsolicitedCommandArriving(TInt aEvent, const TDesC8& aWindPkg);
+	
+	/**
+	 * From MCallInformationQueryCompleteNotify
+	 * 
+	 */
+	virtual void QueryCallInformationComplete(TInt aError);
+	
+protected:
+	/**
+	 * Constructor
+	 * 
+	 */
+	CUnsolicitedCommandCallControlHandler(CGlobalPhonemanager& aGloblePhone,
+			                              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * Handler sim remove event
+	 * 
+	 */
+	void HandleSimRemoveEvent();
+	
+	/**
+	 * Handle product init event
+	 * 
+	 */
+	void HandleProductInitEvent();
+	
+	/**
+	 * Handle network lost event
+	 * 
+	 */
+	void HandleNetworkLostEvent();
+	
+	/**
+	 * Handle call created event
+	 * 
+	 */
+	void HandleCallCreatedEvent(const TDesC8& aWindPkg);
+	
+	/**
+	 * Handle call release event
+	 * 
+	 */
+	void HandleCallReleasedEvent(const TDesC8& aWindPkg);
+
+private:
+	/**
+	 * Phone manager
+	 * 
+	 */
+	CGlobalPhonemanager& iGlobalPhone;
+	
+	/**
+	 * Call back reference
+	 * 
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+	/**
+	 * The at command for querying the call infomation
+	 * 
+	 */
+	CATClcc* iAtClcc;
+	};
+
+#endif /*UNSOLICITEDCOMMANDCALLCONTROLHANDLER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atanswer.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,292 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atanswer.cpp
+// This contains CATAnswer which answering incomging call.
+// 
+
+//system include
+
+//user include
+#include "atanswer.h"
+#include "ltsycallinformationmanager.h"
+#include "mslogger.h"
+
+//const define
+const TInt KLtsyAnswerReadTimeOut = 20;
+_LIT8(KLtsyAnswerCallCommand, "ATA\r");
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer* CATAnswer::NewL(CGlobalPhonemanager& aGloblePhone,
+						   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::NewL()"));
+	
+	CATAnswer* self = CATAnswer::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer* CATAnswer::NewLC(CGlobalPhonemanager& aGloblePhone,
+						    CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::NewLC()"));
+	
+	CATAnswer* self = new (ELeave) CATAnswer(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::~CATAnswer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer::~CATAnswer()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetAnswerCallId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::SetAnswerCallId(TInt aCallId)
+	{
+	iCallId = aCallId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetIsIsvCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::SetIsIsvCall(TBool aIsIsvCall)
+	{
+	iIsIsvCall = aIsIsvCall;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetIsIsvCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer::CATAnswer(CGlobalPhonemanager& aGloblePhone,
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+					 :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::CATAnswer()"));
+	
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iAnswerStep = EATNotInProgress;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ConstructL()"));
+	
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyNoCarrierString);
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyAnswerReadTimeOut);	
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ExecuteCommand()"));
+	
+	//Write AT command
+	iTxBuffer.Copy(KLtsyAnswerCallCommand);
+	Write();
+	iAnswerStep = EATWaitForWriteComplete;
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::StartRequest()"));
+	
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		iATResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		iATResult = KErrArgument;
+		}
+	else if (aResponseBuf.Match(KLtsyNoCarrierString) == 0)
+		{
+		iATResult = KErrEtelNoCarrier;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleIOError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleIOError()"));
+	
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(iIOStatus, iCallId);
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleResponseError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleResponseError()"));
+	
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(iATResult, iCallId);
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleConnectedComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleConnectedComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleConnectedComplete()"));
+
+	//Setting call states
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusAnswering);	
+		
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusConnected);
+			                                                             
+    //Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(KErrNone, iCallId);
+				                                                             						
+	//Change Call State to active
+	TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+		{
+		tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
+		}
+	
+	//If exist other call , should set hold
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (n != iCallId)
+			{
+			TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+				tCallInfo.GetCallState() != TLtsyCallInformation::EHeldCall )
+				{
+				tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
+				
+				//Notify CTSY call state has changed
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+						                                                             n, 
+						                                                 RMobileCall::EStatusHold);				
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::Complete()
+	{
+	//Invoke base class complete
+	CAtCommandBase::Complete();
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;	
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{  
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::EventSignal()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aStatus = %d"),aStatus);
+	
+	iIOStatus = aStatus;
+	
+	//I/O error
+	if (iIOStatus != KErrNone)
+		{
+		HandleIOError();
+		Complete();
+		return;
+		}
+	
+	switch (iAnswerStep)
+		{
+		case EATWaitForWriteComplete:
+			iAnswerStep = EATReadComplete;
+			break;
+			
+		case EATReadComplete:
+			if (iATResult == KErrNone)
+				{
+				HandleConnectedComplete();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atchld.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,622 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atchld.cpp
+// This contains CATChld which hold, resume, release, swap one call.
+// 
+
+
+//sysmtem include
+
+//user include
+#include "atchld.h"
+#include "ltsycallinformationmanager.h"
+#include "athangupcommandrecords.h"
+#include "mslogger.h"
+
+//const define
+const TInt KLtsyCHLDReadTimeout = 3;
+const TInt KLtsyCHLDWaitForModemTime = 1000*250; // 0.25 seconds
+_LIT8(KLtsyCHLDCommandFormat1, "AT+CHLD=%d\r");
+_LIT8(KLtsyCHLDCommandFormat2, "AT+CHLD=%d%d\r");
+_LIT8(KLtsyReleaseOutgoingCommand, "ATH1\r");    //Hang up outging call
+
+
+// ---------------------------------------------------------------------------
+// CATChld::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATChld* CATChld::NewL(CGlobalPhonemanager& aGloblePhone,
+		               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATChld* self = CATChld::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATChld* CATChld::NewLC(CGlobalPhonemanager& aGloblePhone,
+		               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATChld* self = new (ELeave) CATChld(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATChld::~CATChld
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATChld::~CATChld()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::CATChld
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATChld::CATChld(CGlobalPhonemanager& aGloblePhone,
+		         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+				 : CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::CATChld()"));
+	
+	//Set At type
+	iAtType = ELtsyAT_Call_CHLD;
+	
+	//Init variable
+	InitVariable();
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::InitVariable
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::InitVariable()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::InitVariable()"));
+	
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iATStep = EATNotInProgress;
+	iIpcType = ELtsyReqCallHangup;
+	iChldType = ERleaseSpecificCall;
+	iCallId = KLtsyErrorCallId;
+	iConnectedCallId = KLtsyErrorCallId;
+	iHangupCause = -1;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::IsHoldCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool CATChld::IsHoldCall(TInt aHoldCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::IsHoldCall()"));
+	if (aHoldCallId >= KLtsyMinCallId && aHoldCallId <= KLtsyMaxCallId)
+		{
+		const TLtsyCallInformation& tCallInfo = iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(aHoldCallId);
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo() &&
+			TLtsyCallInformation::EHeldCall == tCallInfo.GetCallState())
+			{
+			return ETrue;
+			}		
+		}
+	return EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::IsActiveCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool CATChld::IsActiveCall(TInt aActiveCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::IsActiveCall()"));
+	
+	if (aActiveCallId >= KLtsyMinCallId && aActiveCallId <= KLtsyMaxCallId)
+		{
+		const TLtsyCallInformation& tCallInfo = iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(aActiveCallId);
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo() &&
+			TLtsyCallInformation::EActiveCall == tCallInfo.GetCallState())
+			{
+			return ETrue;
+			}		
+		}	
+	
+	return EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ConstructL()"));
+	
+	//Invoke base class function
+	CAtCommandBase::ConstructL();
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyCHLDReadTimeout);	
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ExecuteCommand()"));
+	
+	if (iChldType == EReleaseAllHeldCallOrUDUB ||
+		iChldType == EReleaseAllActiveCallAndAcceptHeldWaiting ||
+		iChldType == EHeldAllActiveCallAndAcceptHeldWaiting ||
+		iChldType == EAddHeldCallToConversation ||
+		iChldType == ECallTranster)
+		{
+		iTxBuffer.Format(KLtsyCHLDCommandFormat1, iChldType);
+		}
+	else
+		{
+		if (iChldType == ERleaseSpecificCall) //Release one call
+			{
+			
+			const TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+			
+			if (TLtsyCallInformation::EDialingCall == tCallInfo.GetCallState() ||
+				TLtsyCallInformation::EAlertingCall == 	tCallInfo.GetCallState())
+				{
+				//Hang up dialing or Alerting call(Outgoing call)
+				iTxBuffer.Copy(KLtsyReleaseOutgoingCommand);
+				}
+			else //Other call
+				{
+				iTxBuffer.Format(KLtsyCHLDCommandFormat2, EReleaseAllActiveCallAndAcceptHeldWaiting, iCallId);
+				}
+			}
+		else
+			{
+			iTxBuffer.Format(KLtsyCHLDCommandFormat2, EHeldAllActiveCallAndAcceptHeldWaiting, iCallId);
+			}
+		}
+	
+	LOGTEXT2(_L8("[Ltsy CallControl] CHLD Command = %S"), &iTxBuffer);
+	
+	//Setting waiting for modem time, when Command is too fast, Modem response error
+	if (iIpcType == ELtsyReqCallHold || 
+		iIpcType == ELtsyReqCallResume ||
+		iIpcType == ELtsyReqCallSwap)
+		{
+		User::After(KLtsyCHLDWaitForModemTime);
+		}
+	
+	Write();
+	iATStep = EATWaitForWriteComplete;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::SetIpcType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::SetIpcType(TIpcType aIpcType)
+	{
+	iIpcType = aIpcType;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::SetChldType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::SetChldType(TChldType aChldType)
+	{
+	iChldType = aChldType;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::SetCallId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::SetCallId(TInt aCallId)
+	{
+	iCallId = aCallId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::SetConnectedCallId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::SetConnectedCallId(TInt aConnectedCallId)
+	{
+	iConnectedCallId = aConnectedCallId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::SetHangupCase
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::SetHangupCase(TInt aHangupCase)
+	{
+	iHangupCause = aHangupCase;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		iATResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		iATResult = KErrArgument;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleIOError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleIOError()"));
+	
+	//Hangup
+	if (iIpcType == ELtsyReqCallHangup)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlHangUpComp(iIOStatus, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallHold) //Hold call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlHoldComp(iIOStatus, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallResume) //Resume call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlResumeComp(iIOStatus, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallSwap) //Swap call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSwapComp(iIOStatus);
+		}		
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleResponseError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleResponseError()"));
+	
+	//Hangup
+	if (iIpcType == ELtsyReqCallHangup)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlHangUpComp(iATResult, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallHold) //Hold call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlHoldComp(iATResult, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallResume) //Resume call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlResumeComp(iATResult, iCallId);
+		}
+	else if (iIpcType == ELtsyReqCallSwap) //Swap call
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSwapComp(iATResult);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleCHLDComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleCHLDComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleCHLDComplete()"));
+	
+	//Hangup
+	if (iIpcType == ELtsyReqCallHangup)
+		{
+		HandleHangupComplete();
+		}
+	else if (iIpcType == ELtsyReqCallHold) //Hold call
+		{
+		HandleHoldComplete();
+		}
+	else if (iIpcType == ELtsyReqCallResume) //Resume call
+		{
+		HandleResumeComplete();
+		}
+	else if (iIpcType == ELtsyReqCallSwap) //Swap call
+		{
+		HandleSwapComplete();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleHangupComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleHangupComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleHangupComplete()"));
+	
+	const TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	
+	if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+		{
+		if (tCallInfo.GetCallState() == TLtsyCallInformation::EInComingCall ||
+			tCallInfo.GetCallState() == TLtsyCallInformation::EWaitingCall	)
+			{
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected, 
+					                                                             iCallId, 
+					                                                             RMobileCall::EStatusDisconnecting);
+			
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected, 
+					                                                             iCallId, 
+					                                                             RMobileCall::EStatusIdle);			
+			}
+		else
+			{
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing, 
+					                                                             iCallId, 
+					                                                             RMobileCall::EStatusDisconnecting);
+			
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing, 
+					                                                             iCallId, 
+					                                                             RMobileCall::EStatusIdle);			
+			}
+		}
+	
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlHangUpComp(KErrNone, iCallId);
+	//Setting all call id state unused
+	iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(iCallId);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleHoldComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleHoldComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleHoldComplete()"));
+	
+	iCtsyDispatcherCallback.CallbackCallControlHoldComp(KErrNone, iCallId);
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusHold);
+	
+	//Notify CTSY Call id Idel
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+		if (n == iCallId)
+			{
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+				{
+				//Setting my call state active
+				tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);				
+				}
+			}
+		else
+			{
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+				{
+				//Setting my call state active
+				tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
+				
+				//Notify CTSY call state change
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																					 n,
+																                     RMobileCall::EStatusConnected);
+				}
+			}
+		}	
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleResumeComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleResumeComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleResumeComplete()"));
+	
+	iCtsyDispatcherCallback.CallbackCallControlResumeComp(KErrNone, iCallId);
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusConnected);
+
+	//Notify CTSY Call id Idel
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+		if (n == iCallId)
+			{
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+				{
+				//Setting my call state active
+				tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);				
+				}			
+			}
+		else
+			{
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+				{
+				//Setting my call state active
+				tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
+				
+				//Notify CTSY call state change
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																					 n,
+																                     RMobileCall::EStatusHold);
+				}			
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::HandleSwapComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::HandleSwapComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleSwapComplete()"));
+	
+	iCtsyDispatcherCallback.CallbackCallControlSwapComp(KErrNone);
+	
+	//One call or two calls situation
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+		
+		if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+			tCallInfo.GetCallState() == TLtsyCallInformation::EActiveCall)
+			{
+			tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
+			//Notify CTSY call state change
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																				 n,
+															                     RMobileCall::EStatusHold);			
+			}
+		else if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+				((tCallInfo.GetCallState() == TLtsyCallInformation::EHeldCall) || 
+				 (tCallInfo.GetCallState() == TLtsyCallInformation::EWaitingCall) ||
+				 (tCallInfo.GetCallState() == TLtsyCallInformation::EInComingCall))) //????
+			{
+			tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
+			//Notify CTSY call state change
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																				 n,
+															                     RMobileCall::EStatusConnected);			
+			}		
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::Complete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::Complete()"));
+	
+	//Check Hang up arrray
+	if ((iIpcType == ELtsyReqCallHangup) && iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().IsHaveRecords())
+		{
+		InitVariable();
+		
+		TATHanupCommandInfo tHangupInfo;
+		iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().GetFirstHangupCommandInfoAndRemoveIt(tHangupInfo);
+		
+		//Set hang up info
+		SetCallId(tHangupInfo.iCallId);
+		SetHangupCase(tHangupInfo.iHangupCause);
+		SetIpcType(CATChld::ELtsyReqCallHangup);
+		SetChldType(CATChld::ERleaseSpecificCall);
+		StartRequest();
+		return;
+		}
+	
+	//Invoke base class complete
+	CAtCommandBase::Complete();
+	
+	//Set hang up active
+	iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().SetHangupActiveFlag(EFalse);
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATChld::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATChld::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::EventSignal()"));
+	if(aEventSource == EReadCompletion)
+	    {
+	    LOGTEXT(_L8("[Ltsy CallControl] The EventSource = EReadCompletion"));
+	    }
+	else if(aEventSource == EWriteCompletion)
+	    {
+	    LOGTEXT(_L8("[Ltsy CallControl] The EventSource = EWriteCompletion"));
+	    }
+	else if(aEventSource == ETimeoutCompletion)
+	    {
+	    LOGTEXT(_L8("[Ltsy CallControl] The EventSource = ETimeoutCompletion"));
+	    }
+	else
+	    {
+	    LOGTEXT(_L8("[Ltsy CallControl] The EventSource = Unknown"));
+	    }
+	    
+	LOGTEXT2(_L8("[Ltsy CallControl]aStatus = %d"),aStatus);
+
+	iIOStatus = aStatus;
+	
+	if (iIOStatus != KErrNone)
+		{
+		HandleIOError();
+		Complete();
+		return;
+		}
+	
+	switch (iATStep)
+		{
+		case EATWaitForWriteComplete:
+			iATStep = EATReadComplete;
+			break;
+			
+		case EATReadComplete:
+			ClearCurrentLine();
+			if (iATResult == KErrNone)
+				{
+				HandleCHLDComplete();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atclcc.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,511 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atclcc.cpp
+// This contains CATClcc which query incoming or waitting call information.
+// 
+
+//system include
+
+//user include
+#include "mslogger.h"
+#include "atmanager.h"
+#include "activecommandstore.h"
+#include "atclcc.h"
+#include "callinformationquerycompletenotify.h"
+#include "ltsycommondefine.h"
+#include "ltsycallinformationmanager.h"
+
+//const define
+const TInt KLtsyClccReadTimeout = 2;
+
+//List current call information 
+_LIT8(KLtsyCLCCCommand, "AT+CLCC\r");
+_LIT8(KLtsyCLCCMatchString, "+CLCC:*");
+
+
+// ---------------------------------------------------------------------------
+// CATClcc::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATClcc* CATClcc::NewL(CGlobalPhonemanager& aGloblePhone,
+			           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::NewL()"));
+	
+	CATClcc* self = CATClcc::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATClcc* CATClcc::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::NewLC()"));
+	
+	CATClcc* self = new (ELeave) CATClcc(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATClcc::~CATClcc
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATClcc::~CATClcc()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::~CATClcc()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::CATClcc
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATClcc::CATClcc(CGlobalPhonemanager& aGloblePhone, 
+		         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+				 :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::CATClcc()"));
+	
+	iAtType = ELtsyAT_General_CLCC;
+	
+	iQueryCallInfoNotify = NULL;
+	InitVariable();
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::ConstructL()"));
+	
+	//Invoke base class function
+	CAtCommandBase::ConstructL();
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyClccReadTimeout);
+	
+	//Add expecting string
+	AddExpectStringL(KLtsyCLCCMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::ExecuteCommand()"));
+	
+	iOKFounded = EFalse;
+	iTxBuffer.Copy(KLtsyCLCCCommand);
+	Write();
+	iATStep = EATWaitForWriteComplete;
+	iProcessStates = EProcessInProgress;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::InitVariable
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::InitVariable()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::InitVariable()"));
+	
+	iOKFounded = EFalse;
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iATStep = EATNotInProgress;
+	iProcessStates = EProcessNotInProgress;	
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::AddQueryCallInformationCompleteNotify
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::AddQueryCallInformationCompleteNotify(MCallInformationQueryCompleteNotify* aQueryCallInfoNotify)
+	{
+	iQueryCallInfoNotify = aQueryCallInfoNotify;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::GetProcessStates
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATClcc::TATProcessStates CATClcc::GetProcessStates() const
+	{
+	return iProcessStates;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::SetProcessStates
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::SetProcessStates(CATClcc::TATProcessStates aProcessState)
+	{
+	iProcessStates = aProcessState;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::StartRequest()"));
+	
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::ParseCLCCResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::ParseCLCCResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::ParseCLCCResponseL()"));
+	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array, aResponseBuf);
+	TInt nCount = array.Count();
+	
+	//  1       2      3      4       5       6
+	//+CLCC : <id1>, <dir>, <stat>, <mode>, <mpty>
+	//Its count must >= 6
+	if (nCount < 6)	  
+		{
+		CleanupStack::PopAndDestroy(1);
+		return;
+		}
+	
+	//Parse +CLCC :* buffer
+	//Only care Waiting call and incoming call
+	TInt nVal(0);
+	TLex8 tLex(array[3]);
+	if (tLex.Val(nVal) == KErrNone)
+		{		
+		if (nVal == TLtsyCallInformation::EActiveCall ||
+			nVal == TLtsyCallInformation::EHeldCall ||
+			nVal == TLtsyCallInformation::EDialingCall ||
+			nVal == TLtsyCallInformation::EAlertingCall )
+			{
+			CleanupStack::PopAndDestroy(1);
+			LOGTEXT(_L8("[Ltsy CallControl] First Parse state of the call not find incoming call and waiting call"));
+			return;			
+			}
+		
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy(1);
+		LOGTEXT(_L8("[Ltsy CallControl] First Parse state of the call Failing"));
+		return;
+		}
+	
+	//Parse incoming call or waiting call
+	
+	//Call id
+	tLex.Assign(array[1]);
+	if ((tLex.Val(nVal) != KErrNone)||
+	    (nVal < KLtsyMinCallId)	||
+		(nVal > KLtsyMaxCallId))
+		{
+		CleanupStack::PopAndDestroy(1);
+		LOGTEXT(_L8("[Ltsy CallControl] Parse call id of the call Failing"));
+		return;
+		}
+   
+	//Parse call id success
+	TLtsyCallInformation& callinfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(nVal));
+	callinfo.SetCallIdIsUsedInfo(TLtsyCallInformation::EUsed);
+	callinfo.SetCallId(nVal);
+	
+	TBool bSuccess(ETrue);
+	for (TInt n = 2; bSuccess && n < nCount; n++)
+		{
+		//Direction Call
+		if (n == 2)
+			{
+			tLex.Assign(array[n]);
+			if (tLex.Val(nVal) == KErrNone)
+				{
+				if (TLtsyCallInformation::EMoCall == nVal)
+					{
+					callinfo.SetCallDirection(TLtsyCallInformation::EMoCall);
+					}
+				else
+					{
+					callinfo.SetCallDirection(TLtsyCallInformation::EMtCall);
+					}
+				}
+			else
+				{
+				bSuccess = EFalse;
+				LOGTEXT(_L8("[Ltsy CallControl] Parse direction call Failing"));
+				}
+			}
+		
+		//State of the Call
+		if (n == 3)
+			{
+			tLex.Assign(array[n]);
+			if (tLex.Val(nVal) == KErrNone)
+				{
+				if (TLtsyCallInformation::EInComingCall == nVal)
+					{
+					callinfo.SetCallState(TLtsyCallInformation::EInComingCall);
+					}
+				else
+					{
+					callinfo.SetCallState(TLtsyCallInformation::EWaitingCall);
+					}
+				}
+			else
+				{
+				bSuccess = EFalse;
+				LOGTEXT(_L8("[Ltsy CallControl] Parse state of the call Failing"));				
+				}
+			}
+		
+		//Teleservice
+		if (n == 4)
+			{
+			tLex.Assign(array[n]);
+			if (tLex.Val(nVal) == KErrNone)
+				{
+				if (TLtsyCallInformation::EVoiceCall == nVal)
+					{
+					callinfo.SetCallMode(TLtsyCallInformation::EVoiceCall);
+					}
+				else if (TLtsyCallInformation::EDataCall == nVal)
+					{
+					callinfo.SetCallMode(TLtsyCallInformation::EDataCall);
+					}
+				else if (TLtsyCallInformation::EFaxCall == nVal)
+					{
+					callinfo.SetCallMode(TLtsyCallInformation::EFaxCall);
+					}
+				else
+					{
+					callinfo.SetCallMode(TLtsyCallInformation::EUnKnowCall);
+					}
+				}
+			else
+				{
+				bSuccess = EFalse;
+				LOGTEXT(_L8("[Ltsy CallControl] Parse teleservice Failing"));					
+				}
+			}
+
+		//multiparty
+		if (n == 5)
+			{
+			tLex.Assign(array[n]);
+			if (tLex.Val(nVal) == KErrNone)
+				{
+				if (TLtsyCallInformation::ENotConference == nVal)
+					{
+					callinfo.SetConferenceCall(TLtsyCallInformation::ENotConference);
+					}
+				else
+					{
+					callinfo.SetConferenceCall(TLtsyCallInformation::EIsConference);
+					}
+				}
+			else
+				{
+				bSuccess = EFalse;
+				LOGTEXT(_L8("[Ltsy CallControl] Parse multiparty Failing"));				
+				}
+			}
+		
+		//telenum
+		if (n == 6)
+			{
+			callinfo.SetMobileTelNum(array[n]);
+			}		
+
+		//type of address
+		if (n == 7)
+			{
+			tLex.Assign(array[n]);
+			if (tLex.Val(nVal) == KErrNone)
+				{
+				callinfo.SetAddressType(nVal);
+				}
+			else
+				{
+				bSuccess = EFalse;
+				LOGTEXT(_L8("[Ltsy CallControl] Parse type of address Failing"));				
+				}
+			}
+		
+		//alpah
+		if (n == 8)
+			{
+			callinfo.SetMobileName(array[n]);
+			}
+		}
+	
+	//Parse failer
+	if (!bSuccess)
+		{
+		iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(callinfo.GetCallId());
+		}
+	
+	CleanupStack::PopAndDestroy(1);
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::ParseResponseL()"));
+	
+	//Process expecting string +CLCC : *
+	if (aResponseBuf.Match(KLtsyCLCCMatchString) == 0)
+		{
+		ParseCLCCResponseL(aResponseBuf);
+		}
+	else if (aResponseBuf.Match(KLtsyOkString) == 0) //Process expecting string OK
+		{
+		iATResult = KErrNone;
+		iProcessStates = EProcessOK;
+		iOKFounded = ETrue;		
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0) //Process expecting string ERROR
+		{
+		iATResult = KErrArgument;
+		iProcessStates = EProcessError;
+		iOKFounded = EFalse;		
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::HandleIOError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::HandleIOError()"));
+	
+	iProcessStates = EProcessError;
+	
+	if (iQueryCallInfoNotify != NULL)
+		{
+		iQueryCallInfoNotify->QueryCallInformationComplete(iIOStatus);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::HandleResponseError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::HandleResponseError()"));
+	
+	if (iQueryCallInfoNotify != NULL)
+		{
+		iQueryCallInfoNotify->QueryCallInformationComplete(iATResult);
+		}	
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::HandleCLCCComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::HandleCLCCComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::HandleCLCCComplete()"));
+	
+	if (iQueryCallInfoNotify != NULL)
+		{
+		iQueryCallInfoNotify->QueryCallInformationComplete(KErrNone);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::Complete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::Complete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] iIOStatus = %d"), iIOStatus);
+	LOGTEXT2(_L8("[Ltsy CallControl] iATResult = %d"), iATResult);
+	
+	//Remove Ative Command and stop timer
+	CAtCommandBase::Complete();
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATClcc::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATClcc::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{  
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATClcc::EventSignal()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aEventSource = %d\taStatus = %d"),aStatus);
+	
+	iIOStatus = aStatus;
+	if (iIOStatus != KErrNone)
+		{
+		HandleIOError();	
+		Complete();
+		return;
+		}
+	
+	switch (iATStep)
+		{
+		case EATWaitForWriteComplete:
+			iATStep = EATReadComplete;
+			break;
+			
+		case EATReadComplete:
+			ClearCurrentLine();
+			if (iATResult == KErrNone)
+				{
+				if (iOKFounded)
+					{
+					HandleCLCCComplete();
+					Complete();
+					}
+				}
+			else
+				{
+				HandleResponseError();
+				Complete();
+				}
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atdialvoice.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,638 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atdialvoice.cpp
+// This contains CATDialVoice which dial a voice call.
+//
+
+//user include
+#include "atdialvoice.h"
+#include "ltsycommondefine.h"
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include "globalphonemanager.h"
+#include "activecommandstore.h"
+#include "atmanager.h"
+#include "ltsycallinformationmanager.h"
+#include "mslogger.h"
+
+//const define 
+const TInt KLtsyWaitForConnect = 60;
+_LIT8(KLtsyDialVoiceCommandFormat,"ATD%S;\r");
+_LIT8(KLtsyBusyString, "BUSY");
+_LIT8(KLtsyNoAnswerString, "NO ANSWER");
+_LIT8(KLtsyUnsolicitedCallCreated, "+WIND: 5*");
+_LIT8(KLtsyUnsolicitedCallingAltert, "+WIND: 2");
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDialVoice* CATDialVoice::NewL(CGlobalPhonemanager& aGloblePhone,
+		                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::NewL()"));
+	
+	CATDialVoice* self = CATDialVoice::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDialVoice* CATDialVoice::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::NewLC()"));
+	
+	CATDialVoice* self = new (ELeave) CATDialVoice(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::~CATDialVoice
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDialVoice::~CATDialVoice()
+	{
+	delete iATH;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::CATDialVoice
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDialVoice::CATDialVoice(CGlobalPhonemanager& aGloblePhone, 
+		                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+				           :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)	
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::CATDialVoice()"));
+	
+	iAtType = ELtsyAT_Call_ATD;
+	iResult = KErrNone;
+	iOKFounded = EFalse;
+	iCallId = KLtsyErrorCallId;
+	iStatus = KErrNone;
+	iDialStep = EATDialNotInProgress;
+	iIsEmergencyCall = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::ConstructL()"));
+	
+	//Invoke base class function
+	CAtCommandBase::ConstructL();
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyWaitForConnect);
+	
+	//Add expecting string
+	AddExpectStringL(KLtsyUnsolicitedCallCreated);
+	AddExpectStringL(KLtsyUnsolicitedCallingAltert);
+	AddExpectStringL(KLtsyBusyString);
+	AddExpectStringL(KLtsyNoAnswerString);
+	AddExpectStringL(KLtsyNoCarrierString);
+	
+	//Create Hang up call
+	iATH = CATHangUp::NewL(iPhoneGlobals, iCtsyDispatcherCallback);
+	
+	//Add Observer
+	iATH->AddAllCallReleaseObserver(this);
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::SetEmergnecyCallFlag
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::InitVariable()
+	{
+	iAtType = ELtsyAT_Call_ATD;
+	iResult = KErrNone;
+	iOKFounded = EFalse;
+	iCallId = KLtsyErrorCallId;
+	iStatus = KErrNone;
+	iDialStep = EATDialNotInProgress;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ReleaseAllCallComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::ReleaseAllCallComplete(TInt /*aError*/)
+	{
+	//if aError equal KErrNone or other dial Emergency call
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::SetEmergnecyCallFlag
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::SetEmergnecyCallFlag(TBool aIsEmergencyCall)
+	{
+	iIsEmergencyCall = aIsEmergencyCall;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::SetTelephoneNumber
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::SetTelephoneNumber(const TDesC8& aTelNum)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::SetTelephoneNumber()"));
+	
+	iTelNum.Copy(aTelNum.Left(iTelNum.MaxLength()));
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::ExecuteCommand()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] Telephone number = %S"), &iTelNum);
+	
+	iOKFounded = EFalse;
+	iTxBuffer.Format(KLtsyDialVoiceCommandFormat, &iTelNum);
+	Write(); 
+	iDialStep = EATWaitForWriteComplete;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::StartRequest()
+	{
+	if (iIsEmergencyCall && iPhoneGlobals.GetCallInfoManager().IsHaveUsedCallId())
+		{
+		iATH->InitVariable();
+		iATH->StartRequest();
+		}
+	else
+		{
+		ExecuteCommand();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ParseUnsolicitedCommandBufL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATDialVoice::ParseUnsolicitedCommandBufL(TUnsolicitedParams& aParams, const TDesC8& aCommandBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::ParseUnsolicitedCommandBufL()"));
+	
+	RArray<TPtrC8> rArray;
+	CleanupClosePushL(rArray);
+	
+	iParser->ParseRespondedBuffer(rArray, aCommandBuf);
+	aParams.InitParams();
+	
+	TInt nCount = rArray.Count();
+	if (nCount <= 1)
+		{
+		CleanupStack::PopAndDestroy(1);
+		return KErrGeneral;
+		}
+
+	for(TInt index =1; index < nCount; index++)
+		{
+		if(index == 1)
+			{
+			TInt tVal(0);
+			TLex8 tLex(rArray[index]);
+			TInt nRes = tLex.Val(tVal);
+			if (nRes == KErrNone)
+				{
+				aParams.iEvent = tVal;
+				}
+			else
+				{
+				CleanupStack::PopAndDestroy(1);
+				return nRes;
+				}
+			}
+		
+		if(index == 2)
+			{
+			TInt tVal(0);
+			TLex8 tLex(rArray[index]);
+			TInt nRes = tLex.Val(tVal);
+			if (nRes == KErrNone)
+				{
+				aParams.iIdx = tVal;
+				}
+			else
+				{
+				CleanupStack::PopAndDestroy(1);	
+				return nRes;
+				}
+			}
+		}
+	
+	CleanupStack::Pop(1);
+	
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ProcessUnsolicitedCallCreated
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATDialVoice::ProcessUnsolicitedCallCreated(const TUnsolicitedParams& aParams)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::ProcessUnsolicitedCallCreated()"));
+	
+	if (aParams.iEvent !=  KLtsyUnsolicitedEvent05)
+		{
+		return KErrGeneral;
+		}
+	
+	TInt nCallId = aParams.iIdx;
+	if ((nCallId < KLtsyMinCallId) || (nCallId > KLtsyMaxCallId))
+		{
+		nCallId = iPhoneGlobals.GetCallInfoManager().FindUnUesedCallId();
+		if (KErrNotFound == nCallId)
+			{
+			return KErrNotFound;
+			}
+		}
+	
+	iCallId = nCallId;
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyUnsolicitedCallCreated) == 0)
+		{
+		LOGTEXT2(_L8("[Ltsy CallControl] iDialStep = %d"),iDialStep);
+		ASSERT(iDialStep == EATWaitForDiallingComplete);
+		
+		TUnsolicitedParams aParams;
+		iResult = ParseUnsolicitedCommandBufL(aParams, aResponseBuf);
+		if (iResult == KErrNone)
+			{
+			iResult = ProcessUnsolicitedCallCreated(aParams);
+			}
+		}
+	else if (aResponseBuf.Match(KLtsyUnsolicitedCallingAltert) == 0)
+		{
+		LOGTEXT2(_L8("[Ltsy CallControl] iDialStep = %d"),iDialStep);
+		ASSERT(iDialStep == EATWaitForConnectingComplete);
+		iResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		LOGTEXT2(_L8("[Ltsy CallControl] iDialStep = %d"),iDialStep);
+		LOGTEXT(_L8("[Ltsy CallControl] The call was connected successfully"));
+		
+		// if no KLtsyUnsolicitedCallingAltert string was received before we receive "OK"
+		// it aslo means the call has been connected even though such KLtsyUnsolicitedCallingAltert
+		// was not received
+		if(iDialStep == EATWaitForConnectingComplete)
+		    {
+		    LOGTEXT(_L8("[Ltsy CallControl] No alert string [+WIND: 2] received before we receive string [ok]"));
+		    
+		    HandleConnectingComplete();
+		    iDialStep = EATWaitForConnectedComplete;
+		    }
+		
+		iResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyBusyString) == 0)
+		{
+		//iResult = KErrEtelBusyDetected;
+		iResult = KErrGsmCCUserBusy;
+		}
+	else if (aResponseBuf.Match(KLtsyNoAnswerString) == 0)
+		{
+		//iResult = KErrEtelNoAnswer;
+		iResult = KErrGsmCCUserAlertingNoAnswer;
+		}
+	else if (aResponseBuf.Match(KLtsyNoCarrierString) == 0)
+		{
+		// that could be the problem of the client, when there were two ongoing call, but a new call is coming up. As
+		// GSM only support two ongoing calls
+		if(iCallId == KLtsyErrorCallId)
+		    {
+		    iResult = KErrEtelNoCarrier;
+		    return;
+		    }
+		        
+		const TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));		
+		if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+			{
+			if (tCallInfo.GetCallState() == TLtsyCallInformation::EDialingCall)
+				{
+				iResult = KErrEtelNoCarrier;
+				}
+			else
+				{
+				iResult = KErrGsmCCNormalCallClearing;
+				}
+			}
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		iResult = KErrArgument;
+		}
+	else
+		{
+		iResult = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::Complete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::Complete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] iStatus = %d"), iStatus);
+	LOGTEXT2(_L8("[Ltsy CallControl] iResult = %d"), iResult);
+	//Remove Active Command and Stop timer
+	CAtCommandBase::Complete();
+		
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::HandleIOErrorL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::HandleIOError()"));
+	
+	if (iDialStep == EATWaitForWriteComplete)
+		{
+		if (iIsEmergencyCall)
+			{
+			iCtsyDispatcherCallback.CallbackCallControlDialEmergencyComp(iStatus, KLtsyErrorCallId);
+			}
+		else
+			{
+			iCtsyDispatcherCallback.CallbackCallControlDialVoiceComp(iStatus, KLtsyErrorCallId);
+			}
+		}
+	else
+		{
+		//Call id has not be allocated
+		if (KLtsyErrorCallId == iCallId)
+			{
+			if (iIsEmergencyCall)
+				{
+				iCtsyDispatcherCallback.CallbackCallControlDialEmergencyComp(iStatus, iCallId);
+				}
+			else
+				{
+				iCtsyDispatcherCallback.CallbackCallControlDialVoiceComp(iStatus, iCallId);
+				}
+			}
+		else
+			{
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(iStatus, 
+					                                                             iCallId, 
+																		         RMobileCall::EStatusDisconnecting);
+			
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(iStatus, 
+					                                                             iCallId, 
+																		         RMobileCall::EStatusIdle);
+			//Setting ltsy call information
+			iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(iCallId);
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::HandleResponseError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::HandleResponseError()"));
+	
+	//Call id has not be allocated
+	if (KLtsyErrorCallId == iCallId)
+		{
+		if (iIsEmergencyCall)
+			{
+			iCtsyDispatcherCallback.CallbackCallControlDialEmergencyComp(iResult, iCallId);
+			}
+		else
+			{
+			iCtsyDispatcherCallback.CallbackCallControlDialVoiceComp(iResult, iCallId);
+			}
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(iResult, 
+																			 iCallId, 
+																			 RMobileCall::EStatusDisconnecting);
+		
+		iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(iResult, 
+																			 iCallId, 
+																			 RMobileCall::EStatusIdle);
+		//Setting ltsy call information
+		iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(iCallId);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::HandleDiallingCompleteL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::HandleDiallingComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDialVoice::HandleDiallingComplete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] Call id = %d"), iCallId);
+	
+	if (iIsEmergencyCall)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlDialEmergencyComp(KErrNone, iCallId);
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackCallControlDialVoiceComp(KErrNone, iCallId);
+		}
+	
+	LOGTEXT(_L8("[Ltsy CallControl] Call status = RMobileCall::EStatusDialling"));
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																		 iCallId, 
+													 RMobileCall::EStatusDialling);
+	
+	//Setting ltsy call information
+	TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	tCallInfo.SetCallId(iCallId);
+	tCallInfo.SetCallIdIsUsedInfo(TLtsyCallInformation::EUsed);
+	tCallInfo.SetCallDirection(TLtsyCallInformation::EMoCall);
+	tCallInfo.SetCallState(TLtsyCallInformation::EDialingCall);
+	tCallInfo.SetCallMode(TLtsyCallInformation::EVoiceCall);
+	tCallInfo.SetConferenceCall(TLtsyCallInformation::ENotConference);
+	//Emergency call flag
+	if (iIsEmergencyCall)
+		{
+		tCallInfo.SetEmergencyCallFlag(ETrue);
+		}
+	
+	
+	//If have another and it's state is not hold so setting hold
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (n != iCallId)
+			{
+			TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed && 
+				tCallInfo.GetCallState() != TLtsyCallInformation::EHeldCall)
+				{
+				//Setting ltsy call state
+				tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
+				
+				//Notify CTSY state change
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																					 n, 
+																      RMobileCall::EStatusHold);				
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::HandleConnectingCompleteL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::HandleConnectingComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Call status = RMobileCall::EStatusConnecting"));
+	
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+																		 iCallId, 
+													 RMobileCall::EStatusConnecting);	
+	
+	//Setting ltsy call information
+	TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	tCallInfo.SetCallState(TLtsyCallInformation::EAlertingCall);
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::HandleConnectedCompleteL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::HandleConnectedComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Call status = RMobileCall::EStatusConnected"));
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                              iCallId, 
+			                                           RMobileCall::EStatusConnected);
+	
+	//Setting ltsy call information
+	TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);	
+	}
+
+// ---------------------------------------------------------------------------
+// CATDialVoice::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDialVoice::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CATDialVoice::EventSignal()"));
+	
+	iStatus = aStatus;
+	
+	if (aStatus != KErrNone)
+		{
+		HandleIOError();
+		Complete();
+		return;
+		}
+	
+	switch (iDialStep)
+		{
+		case EATWaitForWriteComplete:
+			iDialStep = EATWaitForDiallingComplete;
+			break;
+			
+		case EATWaitForDiallingComplete:
+			//first clean current line
+			ClearCurrentLine();
+			//Process result
+			if (iResult == KErrNone)
+				{
+				HandleDiallingComplete();
+				iDialStep = EATWaitForConnectingComplete;
+				}
+			else
+				{
+				HandleResponseError();
+				Complete();
+				}
+			break;
+			
+		case EATWaitForConnectingComplete:
+			//first clean current line
+			ClearCurrentLine();
+			//Process result
+			if (iResult == KErrNone)
+				{
+				HandleConnectingComplete();
+				iDialStep = EATWaitForConnectedComplete;
+				}
+			else
+				{
+				HandleResponseError();
+				Complete();
+				}
+		    break;
+		    
+		case EATWaitForConnectedComplete:
+			//first clean current line
+			ClearCurrentLine();
+			//Process result
+			if (iResult == KErrNone)
+				{
+				HandleConnectedComplete();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atdtmfvts.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,395 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atdtmfvts.h
+// This contains CATDtmfVts which dial a voice call.
+// 
+
+//system include
+
+//user include
+#include "atdtmfvts.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+#include "ltsycallinformationmanager.h"
+
+//const define
+_LIT8(KLtsyVTSFirstCharFormat, "AT+VTS=%c");
+_LIT8(KLtsyVTSMoreCharFormat, ";+VTS=%c");
+_LIT8(KLtsyCarriageReturn,"\r");
+const TInt KLtsyVTSReadTimeout = 2;
+const TInt KLtsyStopAndCancelTimeOut = 100000; // 0.1 second
+
+
+CATDtmfVts* CATDtmfVts::NewL(CGlobalPhonemanager& aGloblePhone,
+			                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::NewL()"));
+	
+	CATDtmfVts* self = CATDtmfVts::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CATDtmfVts* CATDtmfVts::NewLC(CGlobalPhonemanager& aGloblePhone,
+			                  CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::NewLC()"));
+	
+	CATDtmfVts* self = new (ELeave) CATDtmfVts(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CATDtmfVts::~CATDtmfVts()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::~CATDtmfVts()"));
+	}
+
+CATDtmfVts::CATDtmfVts(CGlobalPhonemanager& aGloblePhone,
+		               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+					   :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::CATDtmfVts()"));
+	
+	InitVariable();
+	}
+
+void CATDtmfVts::InitVariable()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::InitVariable()"));
+	
+	iDtmfWorkType = EDtmfUnknow;
+	iOKFounded = EFalse;
+	iAnswerStep = EATNotInProgress;
+	iCallId = KLtsyErrorCallId;
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;	
+	}
+
+void CATDtmfVts::SetDtmfWorkType(TDtmfWorkType aDtmfWorkType)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::SetDtmfWorkType()"));
+	
+	iDtmfWorkType = aDtmfWorkType;
+	}
+
+void CATDtmfVts::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::ConstructL()"));
+	
+	//Invoke base class function
+	CAtCommandBase::ConstructL();
+	
+	//Create Timer
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyVTSReadTimeout);
+	}
+
+void CATDtmfVts::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::ExecuteCommand()"));
+	
+	if (iDtmfWorkType == EDtmfStopOneTone ||
+	    iDtmfWorkType == EDtmfCancelMoreTones)
+		{
+		StartTimer();
+		}
+	else
+		{
+		iOKFounded = EFalse;
+		if (iTxBuffer.Length() > 0)
+			{
+			LOGTEXT2(_L8("[Ltsy CallControl] VTS = %S"), &iTxBuffer);
+			Write();
+			iAnswerStep = EATWaitForWriteComplete;
+			}		
+		}
+	}
+
+TBool CATDtmfVts::IsHaveActiveCall(TInt aActiveCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::IsHaveActiveCall()"));
+	
+	if (aActiveCallId >= KLtsyMinCallId && aActiveCallId <= KLtsyMaxCallId)
+		{
+		const TLtsyCallInformation& tCallInfo = iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(aActiveCallId);
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo() &&
+			TLtsyCallInformation::EActiveCall == tCallInfo.GetCallState())
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+void CATDtmfVts::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::StartRequest()"));
+	
+	ExecuteCommand();
+	}
+
+TInt CATDtmfVts::SetCallId(TInt aCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::SetCallId()"));
+	
+	if (!IsHaveActiveCall(aCallId))
+		{
+		return KErrEtelCallNotActive;
+		}
+	
+	iCallId = aCallId;
+	
+	return KErrNone;
+	}
+
+TInt CATDtmfVts::SetDtmfString(const TDesC& aDtmfString)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::SetDtmfString()"));
+	
+	if (!StringIsDtmf(aDtmfString))
+		{
+		return KErrArgument;
+		}
+	
+	TInt nLen = aDtmfString.Length();
+	for (TInt n = 0; n < nLen; n++)
+		{
+		if (n == 0)
+			{
+			iTxBuffer.Format(KLtsyVTSFirstCharFormat, (TUint8)(aDtmfString[n]));
+			}
+		else
+			{
+			TBuf8<16> buf;
+			buf.Format(KLtsyVTSMoreCharFormat, (TUint8)(aDtmfString[n]));
+			
+			if ((buf.Length() + iTxBuffer.Length()) >= KLtsyGenericBufferSize)
+				{
+				return KErrOverflow;
+				}
+			iTxBuffer.Append(buf);
+			}
+		}
+	
+	//Converts the content of this descriptor to upper case.
+	iTxBuffer.UpperCase();
+	iTxBuffer.Append(KLtsyCarriageReturn);
+	
+	return KErrNone;
+	}
+
+TBool CATDtmfVts::CharIsDtmf(const TChar& aDtmfChar)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CATDtmfVts::IsDtmf()"));
+	
+	TUint uC = aDtmfChar.GetUpperCase();
+	
+	switch(uC)
+		{
+		case '0':
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+		case '5':
+		case '6':
+		case '7':
+		case '8':
+		case '9':
+		case 'A':
+		case 'B':
+		case 'C':
+		case 'D':
+		case '*':
+		case '#':
+			return ETrue;
+		}
+	return EFalse;
+	}
+
+TBool CATDtmfVts::StringIsDtmf(const TDesC& aDtmfString)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CATDtmfVts::StringIsDtmf()"));
+	
+	TInt nLen = aDtmfString.Length();
+	if (nLen == 0) 
+		{
+		return EFalse;
+		}
+	
+	for (TInt n = 0; n < nLen; n++)
+		{
+		if (!CharIsDtmf(aDtmfString[n]))
+			{
+			return EFalse;
+			}
+		}
+	
+	return ETrue;
+	}
+
+void CATDtmfVts::Complete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::Complete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] iIOStatus = %d"), iIOStatus);
+	LOGTEXT2(_L8("[Ltsy CallControl] iATResult = %d"), iATResult);
+	
+	//Remove Ative Command and stop timer
+	CAtCommandBase::Complete();
+	
+	//Init
+	InitVariable();
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;	
+	}
+
+void CATDtmfVts::StartTimer()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::StartTimer()"));	
+	
+    if (iCallbackTimer->IsActive())
+    	{
+    	iCallbackTimer->Cancel();
+    	}
+	iCallbackTimer->After(KLtsyStopAndCancelTimeOut);	
+	}
+
+void CATDtmfVts::TimerRun(TInt aError)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::TimerRun()"));
+	
+	if (aError != KErrNone)
+		{
+		User::After(KLtsyStopAndCancelTimeOut);
+		}
+	
+	if (iDtmfWorkType == EDtmfStopOneTone)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlStopDtmfToneComp(KErrNone);
+		}
+	else if (iDtmfWorkType == EDtmfCancelMoreTones)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSendDtmfTonesCancelComp(KErrNone);
+		}
+	
+	//Init
+	InitVariable();
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;	
+	}
+
+void CATDtmfVts::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::HandleIOError()"));
+	
+	if (iDtmfWorkType == EDtmfSendOneTone)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlStartDtmfToneComp(iIOStatus);
+		}
+	else if (iDtmfWorkType == EDtmfSendMoreTones)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSendDtmfTonesComp(iIOStatus);
+		}		
+	}
+
+void CATDtmfVts::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::HandleResponseError()"));
+	
+	if (iDtmfWorkType == EDtmfSendOneTone)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlStartDtmfToneComp(iATResult);
+		}
+	else if (iDtmfWorkType == EDtmfSendMoreTones)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSendDtmfTonesComp(iATResult);
+		}			
+	}
+
+void CATDtmfVts::HandleSendDtmfTonesSuccess()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::HandleSendDtmfTonesSuccess()"));
+	
+	if (iDtmfWorkType == EDtmfSendOneTone)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlStartDtmfToneComp(KErrNone);
+		}
+	else if (iDtmfWorkType == EDtmfSendMoreTones)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlSendDtmfTonesComp(KErrNone);
+		}
+	}
+
+void CATDtmfVts::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		iATResult = KErrNone;
+		iOKFounded = ETrue;
+		}
+	else if(aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		iATResult = KErrArgument;
+		}
+	}
+
+void CATDtmfVts::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATDtmfVts::EventSignal()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aEventSource = %d\taStatus = %d"),aStatus);
+	
+	iIOStatus = aStatus;
+	
+	//Process I/O Error
+	if (iIOStatus != KErrNone)
+		{
+		HandleResponseError();
+		Complete();
+		return;
+		}
+	
+	//Process at step
+	switch(iAnswerStep)
+		{
+		case EATWaitForWriteComplete:
+			iAnswerStep = EATReadComplete;
+			break;
+			
+		case EATReadComplete:
+			ClearCurrentLine();
+			if (iATResult == KErrNone)
+				{
+				HandleSendDtmfTonesSuccess();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/athangup.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,293 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Hangup a ongoning call
+
+//system include
+
+//user include
+#include "athangup.h"
+#include "atmanager.h"
+#include "activecommandstore.h"
+#include "mslogger.h"
+#include "ltsycallinformationmanager.h"
+#include "allcallreleasecompleteobserver.h"
+
+//const define
+const TInt KLtsyHangupReadTimeout = 2;
+_LIT8(KLtsyHangUpAllCallCommand, "ATH\r"); //ATH0
+
+
+CATHangUp* CATHangUp::NewL(CGlobalPhonemanager& aGloblePhone,
+			               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::NewL()"));
+	
+	CATHangUp* self = CATHangUp::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CATHangUp* CATHangUp::NewLC(CGlobalPhonemanager& aGloblePhone,
+			               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::NewLC()"));
+	
+	CATHangUp* self = new (ELeave) CATHangUp(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CATHangUp::~CATHangUp()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::~CATHangUp()"));
+	}
+
+CATHangUp::CATHangUp(CGlobalPhonemanager& aGloblePhone,
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+					 :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::CATHangUp()"));
+	
+	iAtType = ELtsyAT_Call_ATH;
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iHangupStep = EATHangUpNotInProgress;
+	iHangupOperator = EUnknownAPI;
+	iAllCallReleaseObserver = NULL;
+	}
+
+void CATHangUp::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::ConstructL()"));
+	
+	//Invoke base class function
+	CAtCommandBase::ConstructL();
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyHangupReadTimeout);
+	}
+
+
+void CATHangUp::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::ExecuteCommand()"));
+	
+	iTxBuffer.Copy(KLtsyHangUpAllCallCommand);
+	Write();
+	iHangupStep = EATHangUpWaitForWriteComplete;
+	}
+
+void CATHangUp::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::StartRequest()"));
+	
+	ExecuteCommand();
+	}
+
+void CATHangUp::AddAllCallReleaseObserver(MAllCallReleaseCompleteObserver* aObserver)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::AddAllCallReleaseObserver()"));
+	
+	iAllCallReleaseObserver = aObserver;
+	}
+
+void CATHangUp::InitVariable()
+	{
+	iAtType = ELtsyAT_Call_ATH;
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iHangupStep = EATHangUpNotInProgress;
+	iHangupOperator = EUnknownAPI;	
+	}
+
+void CATHangUp::SetHangupOperator(THangupOperator aOperator)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::SetHangupOperator()"));
+	
+	iHangupOperator = aOperator;
+	}
+
+void CATHangUp::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::HandleIOError()"));
+	
+	if (iHangupOperator == ECustomAPI)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlTerminateAllCallsComp(iIOStatus);
+		}
+	else if (iHangupOperator == ERMobilePhoneAPI)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneTerminateAllCallsComp(iIOStatus);
+		}
+	else
+		{
+		LOGTEXT(_L8("[Ltsy CallControl] Hangup unknown operator!!!!"));
+		}
+	}
+
+void CATHangUp::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::HandleResponseError()"));
+	
+	if (iHangupOperator == ECustomAPI)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlTerminateAllCallsComp(iATResult);
+		}
+	else if (iHangupOperator == ERMobilePhoneAPI)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneTerminateAllCallsComp(iATResult);
+		}
+	else
+		{
+		LOGTEXT(_L8("[Ltsy CallControl] Hangup unknown operator!!!!"));
+		}
+	}
+
+void CATHangUp::HandleDisconnectedComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::HandleDisconnectedComplete()"));
+	
+	if (iHangupOperator == ECustomAPI)
+		{
+		iCtsyDispatcherCallback.CallbackCallControlTerminateAllCallsComp(iATResult);
+		}
+	else if (iHangupOperator == ERMobilePhoneAPI)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneTerminateAllCallsComp(iATResult);
+		}
+	else 
+		{
+		LOGTEXT(_L8("[Ltsy CallControl] Hangup unknown operator!!!!"));
+		if (iAllCallReleaseObserver == NULL)
+			{
+			return;
+			}
+		}
+
+	//Notify CTSY all call idel
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+		if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+			{
+			
+			if (tCallInfo.GetCallState() == TLtsyCallInformation::EInComingCall ||
+				tCallInfo.GetCallState() == TLtsyCallInformation::EWaitingCall	)
+				{
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected, 
+						                                                             n, 
+						                                                             RMobileCall::EStatusDisconnecting);			
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected, 
+																					 n,
+																					 RMobileCall::EStatusIdle);				
+				}
+			else
+				{
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing, 
+						                                                             n, 
+						                                                             RMobileCall::EStatusDisconnecting);			
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing, 
+																					 n,
+																					 RMobileCall::EStatusIdle);				
+				}
+			}		
+		}
+	
+	//Setting all call id state unused
+	iPhoneGlobals.GetCallInfoManager().ResetAllCalInformation();
+	}
+
+void CATHangUp::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		LOGTEXT(_L8("[Ltsy CallControl] Hang up call reponse is OK"));
+		
+		iATResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		LOGTEXT(_L8("[Ltsy CallControl] Hang up call reponse is Error"));
+		
+		iATResult = KErrArgument;
+		}
+	}
+
+void CATHangUp::Complete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::Complete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] iIOStatus = %d"), iIOStatus);
+	LOGTEXT2(_L8("[Ltsy CallControl] iATResult = %d"), iATResult);
+	
+	//Remove Ative Command and stop timer
+	CAtCommandBase::Complete();
+		
+	//Let other command can use I/O port
+	if (iAllCallReleaseObserver == NULL)
+		{
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		}
+	else
+		{
+		if (iIOStatus != KErrNone)
+			{
+			iAllCallReleaseObserver->ReleaseAllCallComplete(iIOStatus);
+			}
+		else
+			{
+			iAllCallReleaseObserver->ReleaseAllCallComplete(iATResult);
+			}
+		}
+	}
+
+void CATHangUp::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATHangUp::EventSignal()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aEventSource = %d\taStatus = %d"),aStatus);
+	
+	iIOStatus = aStatus;
+	if (iIOStatus != KErrNone)
+		{
+		HandleIOError();
+		Complete();
+		return;
+		}
+	
+	switch (iHangupStep)
+		{
+		case EATHangUpWaitForWriteComplete:
+			iHangupStep = EATHangUpReadComplete;
+			break;
+			
+		case EATHangUpReadComplete:
+			if (iATResult == KErrNone)
+				{
+				HandleDisconnectedComplete();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/athangupcommandrecords.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,118 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Record the infomation related to hangup commands
+
+//system include
+
+//user include
+#include "athangupcommandrecords.h"
+#include "mslogger.h"
+
+TATHanupCommandInfo::TATHanupCommandInfo()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting TATHanupCommandInfo::TATHanupCommandInfo()"));	
+	iCallId = -1;
+	iHangupCause = -1;
+	}
+
+/**
+ * 
+ *
+ */
+CATHangupCommandRecords* CATHangupCommandRecords::NewL()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::NewL()"));
+	CATHangupCommandRecords* self = CATHangupCommandRecords::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CATHangupCommandRecords* CATHangupCommandRecords::NewLC()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::NewLC()"));
+	CATHangupCommandRecords* self = new (ELeave) CATHangupCommandRecords;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CATHangupCommandRecords::~CATHangupCommandRecords()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::~CATHangupCommandRecords()"));
+	iHangupInfoArray.Close();
+	}
+
+CATHangupCommandRecords::CATHangupCommandRecords()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::CATHangupCommandRecords()"));
+	iHangupActive = EFalse;
+	}
+
+void CATHangupCommandRecords::ConstructL()
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::ConstructL()"));
+	}
+
+TInt CATHangupCommandRecords::AddHangupCommandInfo(TInt aCallId, TInt aHangupCase)
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::AddHangupCommandInfo()"));
+	TATHanupCommandInfo tInfo;
+	tInfo.iCallId = aCallId;
+	tInfo.iHangupCause = aHangupCase;
+	TInt nRes = iHangupInfoArray.Append(tInfo);
+	return nRes;
+	}
+
+TInt CATHangupCommandRecords::GetFirstHangupCommandInfoAndRemoveIt(TATHanupCommandInfo& aInfo)
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::GetFirstHangupCommandInfoAndRemoveIt()"));
+	TInt nCount = iHangupInfoArray.Count();
+	LOGTEXT2( _L8("[Ltsy CallControl] Hang up command information array count = %d"), nCount);
+	
+	if (nCount > 0)
+		{
+		aInfo.iCallId = iHangupInfoArray[0].iCallId;
+		aInfo.iHangupCause = iHangupInfoArray[0].iHangupCause;
+		iHangupInfoArray.Remove(0);
+		return KErrNone;
+		}
+	return KErrNotFound;
+	}
+
+void CATHangupCommandRecords::SetHangupActiveFlag(TBool aIsActive)
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::SetHangupActiveFlag()"));
+	iHangupActive = aIsActive;
+	}
+
+TBool CATHangupCommandRecords::GetHangupActiveFlag() const
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CATHangupCommandRecords::GetHangupActiveFlag()"));
+	return iHangupActive;
+	}
+
+
+TBool CATHangupCommandRecords::IsHaveRecords() const
+	{
+	if (iHangupInfoArray.Count() > 0)
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atring.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,71 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Wait for first one incoming call
+
+//system include
+
+//user include
+#include "atring.h"
+#include "mslogger.h"
+
+//const define
+_LIT8(KLtsyIncomingExtCallIndication,"+CRING:*");
+_LIT8(KLtsyIncomingCallIndication,"RING");
+
+CATRing* CATRing::NewL(CGlobalPhonemanager& aGloblePhone,
+			           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATRing::NewL()"));
+	
+	CATRing* self = CATRing::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+CATRing* CATRing::NewLC(CGlobalPhonemanager& aGloblePhone,
+			            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATRing::NewLC()"));
+	
+	CATRing* self = new (ELeave) CATRing(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CATRing::~CATRing()
+	{
+	}
+
+CATRing::CATRing(CGlobalPhonemanager& aGloblePhone,
+		         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                 :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATRing::CATRing()"));
+	
+	iAtType = ELtsyAT_Call_RING;
+	}
+
+void CATRing::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATRing::ConstructL()"));
+	
+	CAtCommandBase::ConstructL(); //Not must
+	RemoveAllExpectString();
+	AddExpectStringL(KLtsyIncomingCallIndication);
+	AddExpectStringL(KLtsyIncomingExtCallIndication);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atwaitforcallhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,190 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Wait for 2nd incoming call
+
+//system include
+
+//user include
+#include "atwaitforcallhandler.h"
+#include "atclcc.h"
+#include "atring.h"
+#include "atmanager.h"
+#include "activecommandstore.h"
+#include "ltsycallinformationmanager.h"
+#include "mslogger.h"
+
+CATWaitForCallHandler* CATWaitForCallHandler::NewL(CGlobalPhonemanager& aGloblePhone,
+		                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::NewL()"));
+	
+	CATWaitForCallHandler* self = CATWaitForCallHandler::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CATWaitForCallHandler* CATWaitForCallHandler::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                                            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::NewLC()"));
+	
+	CATWaitForCallHandler* self = new (ELeave) CATWaitForCallHandler(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CATWaitForCallHandler::~CATWaitForCallHandler()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::~CATWaitForCallHandler()"));
+	
+	delete iAtRing;
+	iAtRing = NULL;
+	
+	delete iAtClcc;
+	iAtClcc = NULL;
+	}
+
+
+CATWaitForCallHandler::CATWaitForCallHandler(CGlobalPhonemanager& aGloblePhone,
+		                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+											 :CATCommandControlBase(aGloblePhone, aCtsyDispatcherCallback) 
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::CATWaitForCallHandler()"));
+	
+	iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(EFalse);
+	}
+
+void CATWaitForCallHandler::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::ConstructL()"));
+	
+	iAtClcc = CATClcc::NewL(iPhoneGlobals, iCtsyDispatcherCallback);
+	iAtRing = CATRing::NewL(iPhoneGlobals, iCtsyDispatcherCallback);
+	iAtRing->SetAtCommandObserver(this);
+	}
+
+
+void CATWaitForCallHandler::StartToWaitForCall()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::StartToWaitForCall()"));
+	
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->AddUnsolicitedAtCommand(iAtRing);
+	}
+
+TInt CATWaitForCallHandler::ProcessIncomingCallInfomation()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::ProcessIncomingCallInfomation()"));
+	
+	TInt nCallId = iPhoneGlobals.GetCallInfoManager().FindIncomingCallId();
+	
+	if (KErrNotFound == nCallId)
+		{
+		return KErrNotFound;
+		}
+	
+	//Incoming call information
+	TLtsyCallInformation& tIncomingCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+	
+	RMobileCall::TMobileCallInfoV1 tMobileCallInfo;
+	
+	//Call id
+	tMobileCallInfo.iCallId = tIncomingCallInfo.GetCallId();
+	
+	//Call service
+	TLtsyCallInformation::TCallMode tCallService(tIncomingCallInfo.GetCallMode());
+	if (TLtsyCallInformation::EVoiceCall == tCallService)
+		{
+		tMobileCallInfo.iService = RMobilePhone::EVoiceService;
+		}
+	else if (TLtsyCallInformation::EDataCall == tCallService)
+		{
+		tMobileCallInfo.iService = RMobilePhone::ECircuitDataService;
+		}
+	else if (TLtsyCallInformation::EFaxCall == tCallService)
+		{
+		tMobileCallInfo.iService = RMobilePhone::EFaxService;
+		}
+	else
+		{
+		tMobileCallInfo.iService = RMobilePhone::EServiceUnspecified;
+		}
+		
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlNotifyIncomingCallInd(KErrNone, tMobileCallInfo);
+	
+	//Ring State
+	tMobileCallInfo.iStatus = RMobileCall::EStatusRinging;
+	
+	//Telephone number
+	tMobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Copy(tIncomingCallInfo.GetMobileTelNum());
+	
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallInfoChangeInd(KErrNone, tMobileCallInfo);
+	
+	return KErrNone;
+	}
+
+void CATWaitForCallHandler::AtCommandExecuteComplete(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::AtCommandExecuteComplete()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aEventSource = %d\taStatus = %d"),aStatus);
+		
+	//Process read or timeout error
+	if (aStatus != KErrNone)
+		{
+		//Reset Ring Count
+		iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(EFalse);
+		
+		//Init ATCLCC Variable
+		iAtClcc->InitVariable();
+		
+		//Init InComing Call State
+		TInt nCall = iPhoneGlobals.GetCallInfoManager().FindIncomingCallId();
+		if (nCall != KErrNotFound)
+			{
+			iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(nCall);
+			}
+		return;
+		}
+	
+	//Clear Ring String
+	iAtRing->ClearCurrentLine();
+	
+	//CLCC find incoming information If first ring  coming
+	if (!iPhoneGlobals.GetCallInfoManager().GetIncomingCallFlag())
+		{
+		TInt nRet = iPhoneGlobals.CheckGlobalPhoneStatus();
+		if (nRet == KErrNone)
+			{
+			iPhoneGlobals.iEventSignalActive = ETrue;
+			iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(ETrue);
+			iAtClcc->StartRequest();			
+			}
+		}	
+	
+	//Find At Clcc OK
+	if (iAtClcc->GetProcessStates() == CATClcc::EProcessOK)
+		{
+		TInt nRes = ProcessIncomingCallInfomation();
+		iAtClcc->InitVariable();
+		}	
+	
+	//Process AT CLCC error
+	if (iAtClcc->GetProcessStates() == CATClcc::EProcessError )
+		{
+		iAtClcc->InitVariable();
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/unsolicitedcommandcallcontrolhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,291 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CUnsolicitedCommandCallControlHandler. The handler for handling the unsolicited command related to call control
+
+//system include
+
+//user include
+#include "unsolicitedcommandcallcontrolhandler.h"
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include "ltsycommondefine.h"
+#include "globalphonemanager.h"
+#include "unsolicitedparams.h"
+#include "atclcc.h"
+#include "ltsycallinformationmanager.h"
+#include "mslogger.h"
+
+CUnsolicitedCommandCallControlHandler* CUnsolicitedCommandCallControlHandler::NewL(CGlobalPhonemanager& aGloblePhone,
+		                                                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::NewL()"));
+	
+	CUnsolicitedCommandCallControlHandler* self = CUnsolicitedCommandCallControlHandler::NewLC(aGloblePhone, 
+			                                                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CUnsolicitedCommandCallControlHandler* CUnsolicitedCommandCallControlHandler::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                                                                            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::NewLC()"));
+	
+	CUnsolicitedCommandCallControlHandler* self = new (ELeave) CUnsolicitedCommandCallControlHandler(aGloblePhone, 
+			                                                                                         aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CUnsolicitedCommandCallControlHandler::~CUnsolicitedCommandCallControlHandler()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::~CUnsolicitedCommandCallControlHandler()"));
+	}
+
+CUnsolicitedCommandCallControlHandler::CUnsolicitedCommandCallControlHandler(CGlobalPhonemanager& aGloblePhone,
+		                                                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+																			 :iGlobalPhone(aGloblePhone),
+																			  iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::CUnsolicitedCommandCallControlHandler()"));
+	}
+
+void CUnsolicitedCommandCallControlHandler::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::ConstructL()"));
+	
+	iAtClcc = CATClcc::NewL(iGlobalPhone, iCtsyDispatcherCallback);
+	
+	iAtClcc->AddQueryCallInformationCompleteNotify(this);
+	}
+
+void CUnsolicitedCommandCallControlHandler::QueryCallInformationComplete(TInt /*aError*/)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::QueryCallInformationComplete()"));
+	
+	if (iAtClcc->GetProcessStates() == CATClcc::EProcessOK)
+		{
+		TInt nCallId = iGlobalPhone.GetCallInfoManager().FindWaitingCallId();
+		
+		LOGTEXT2(_L8("[Ltsy CallControl] The Waiting Call Id = %d"), nCallId);
+		if (KErrNotFound == nCallId)
+			{
+			iAtClcc->InitVariable();
+			return;
+			}
+		
+		//Waiting call information
+		TLtsyCallInformation& tWaitingCallInfo(iGlobalPhone.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+		
+		RMobileCall::TMobileCallInfoV1 tMobileCallInfo;
+		
+		//Call id
+		tMobileCallInfo.iCallId = tWaitingCallInfo.GetCallId();
+		
+		//Call service
+		TLtsyCallInformation::TCallMode tCallService(tWaitingCallInfo.GetCallMode());
+		if (TLtsyCallInformation::EVoiceCall == tCallService)
+			{
+			tMobileCallInfo.iService = RMobilePhone::EVoiceService;
+			}
+		else if (TLtsyCallInformation::EDataCall == tCallService)
+			{
+			tMobileCallInfo.iService = RMobilePhone::ECircuitDataService;
+			}
+		else if (TLtsyCallInformation::EFaxCall == tCallService)
+			{
+			tMobileCallInfo.iService = RMobilePhone::EFaxService;
+			}
+		else
+			{
+			tMobileCallInfo.iService = RMobilePhone::EServiceUnspecified;
+			}	
+		
+		//Call back
+		iCtsyDispatcherCallback.CallbackCallControlNotifyIncomingCallInd(KErrNone, tMobileCallInfo);
+		
+		//Waiting States
+		tMobileCallInfo.iStatus = RMobileCall::EStatusRinging;		
+		
+		//Telephone number
+		tMobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Copy(tWaitingCallInfo.GetMobileTelNum());
+			
+		//Callback
+		iCtsyDispatcherCallback.CallbackCallControlNotifyCallInfoChangeInd(KErrNone, tMobileCallInfo);		
+		}
+	
+	//Init iAtCll for reusing it
+	iAtClcc->InitVariable();	
+	}
+
+void CUnsolicitedCommandCallControlHandler::HandleSimRemoveEvent()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::HandleSimRemoveEvent()"));
+	
+	TInt nErr = KErrEtelNoCarrier;
+	
+	for (TInt nCallId = KLtsyMinCallId; nCallId <= KLtsyMaxCallId; nCallId++)
+		{
+		TLtsyCallInformation& tCallInfo(iGlobalPhone.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo())
+			{
+			//Notify disconnecting status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusDisconnecting);				
+			
+			//Nofity idel status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusIdle);				
+			}
+		}
+	
+	iGlobalPhone.GetCallInfoManager().ResetAllCalInformation();	
+	}
+
+void CUnsolicitedCommandCallControlHandler::HandleProductInitEvent()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::HandleProductInitEvent()"));
+	
+	TInt nErr = KErrEtelNoCarrier;
+	
+	for (TInt nCallId = KLtsyMinCallId; nCallId <= KLtsyMaxCallId; nCallId++)
+		{
+		TLtsyCallInformation& tCallInfo(iGlobalPhone.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo())
+			{
+			//Notify disconnecting status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusDisconnecting);				
+			//Notify idel status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusIdle);				
+			}
+		}
+	
+	iGlobalPhone.GetCallInfoManager().ResetAllCalInformation();		
+	}
+
+void CUnsolicitedCommandCallControlHandler::HandleNetworkLostEvent()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::HandleNetworkLostEvent()"));
+	
+	TInt nErr = KErrEtelNoCarrier;	
+	
+	for (TInt nCallId = KLtsyMinCallId; nCallId <= KLtsyMaxCallId; nCallId++)
+		{
+		TLtsyCallInformation& tCallInfo(iGlobalPhone.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo())
+			{
+			//Notify disconnecting status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusDisconnecting);				
+			//Notify idel status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(nErr,
+					                                                             nCallId, 
+					                                                             RMobileCall::EStatusIdle);				
+			}
+		}
+	
+	iGlobalPhone.GetCallInfoManager().ResetAllCalInformation();		
+	}
+
+void CUnsolicitedCommandCallControlHandler::HandleCallCreatedEvent(const TDesC8& aWindPkg)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::HandleCallCreatedEvent()"));
+	
+	TUnsolicitedParams::TUnsolicitedParamsPckgBuf* pPckg = (TUnsolicitedParams::TUnsolicitedParamsPckgBuf*)(&aWindPkg);
+	TInt nCallId = (*pPckg)().iIdx;
+	LOGTEXT2(_L8("[Ltsy CallControl] nCallId = %d"), nCallId);
+	
+	if (iAtClcc->GetProcessStates() == CATClcc::EProcessNotInProgress)
+		{
+		TInt nRet = iGlobalPhone.CheckGlobalPhoneStatus();
+		if (nRet == KErrNone)
+			{
+			iGlobalPhone.iEventSignalActive = ETrue;
+			iAtClcc->StartRequest();			
+			}
+		}
+	}
+
+void CUnsolicitedCommandCallControlHandler::HandleCallReleasedEvent(const TDesC8& aWindPkg)
+	{
+	//if call id is incoming call reset incoming call states
+	iGlobalPhone.GetCallInfoManager().SetIncomingCallFlag(EFalse);
+	
+	//Notify CTSY incoming call release
+	TUnsolicitedParams::TUnsolicitedParamsPckgBuf* pPckg = (TUnsolicitedParams::TUnsolicitedParamsPckgBuf*)(&aWindPkg);
+	TInt nCallId = (*pPckg)().iIdx;		
+	LOGTEXT2(_L8("[Ltsy CallControl] nCallId = %d"), nCallId);
+	
+	if (nCallId >= KLtsyMinCallId && nCallId <= KLtsyMaxCallId)
+		{
+		TLtsyCallInformation& tCallInfo(iGlobalPhone.GetCallInfoManager().GetCallInformationByCallId(nCallId));
+		if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo())
+			{
+			//Notify disconnecting status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing,
+																				 nCallId,
+																				 RMobileCall::EStatusDisconnecting);			
+			//Notify idel status
+			iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing,
+																				 nCallId,
+																				 RMobileCall::EStatusIdle);
+			
+			iGlobalPhone.GetCallInfoManager().ResetCallInformationByCallId(nCallId);
+			}
+		}	
+	}
+
+void CUnsolicitedCommandCallControlHandler::UnsolicitedCommandArriving(TInt aEvent, 
+																	   const TDesC8& aWindPkg)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CUnsolicitedCommandCallControlHandler::UnsolicitedCommandArriving()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] nEvent = %d"), aEvent);
+	
+	switch (aEvent)
+		{
+		case KLtsyUnsolicitedEvent00:
+			HandleSimRemoveEvent();
+			break;
+			
+		case KLtsyUnsolicitedEvent03:
+			HandleProductInitEvent();
+			break;
+			
+		case KLtsyUnsolicitedEvent08:
+			HandleNetworkLostEvent();
+			break;
+			
+		case KLtsyUnsolicitedEvent05:
+			HandleCallCreatedEvent(aWindPkg);
+			break;
+			
+		case KLtsyUnsolicitedEvent06:
+			HandleCallReleasedEvent(aWindPkg);
+			break;
+			
+		default:
+			break;
+		}
+	
+	LOGTEXT(_L8("[Ltsy CallControl] End CUnsolicitedCommandCallControlHandler::UnsolicitedCommandArriving()"));
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/activecommandstore.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,83 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CActiveCommandStore which store one and only one solicited active at command and a number of active 
+// unsolicited at commands
+// 
+
+#ifndef ACTIVECOMMANDSTORE_H_
+#define ACTIVECOMMANDSTORE_H_
+
+#include "atcommandbase.h"
+
+//Class forward
+
+/**
+ * This class is used to manager a list of active AT commands
+ * 
+ */
+class CActiveCommandStore : public CBase
+	{
+public:
+    /**
+     * Factory function
+     */
+	static CActiveCommandStore* NewL();
+	
+	/**
+	 * Factory function
+	 */
+	static CActiveCommandStore* NewLC();
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~CActiveCommandStore();
+	
+	/**
+	 * Add unsolicited AT command
+	 */
+	TInt AddUnsolicitedAtCommand(CAtCommandBase *aAtCommand);
+	
+	/**
+	 * Add the solicited AT command
+	 */
+	TInt AddSolicitedAtCommand(CAtCommandBase *aAtCommand);
+	
+	/**
+	 * Remove the At command
+	 */
+	TInt RemoveActiveAtCommand(const CAtCommandBase *aAtCommand);
+	
+	/**
+	 * Get the active command list
+	 */
+	RPointerArray<CAtCommandBase>& GetActiveCommandArray();
+protected:
+    /**
+     * constructor
+     */
+	CActiveCommandStore();
+	
+	/**
+	 * 2nd constructor
+	 */
+	void ConstructL();
+private:
+    /**
+     * The list store the acitve AT command solicited and unsolicited
+     */
+	RPointerArray<CAtCommandBase> iArray;
+	};
+
+#endif /*ACTIVECOMMANDSTORE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/asynchelperrequest.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,105 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file asynchelperrequest.h
+// 
+
+#ifndef __ASYNCHELPERREQUEST_H__
+#define __ASYNCHELPERREQUEST_H__
+
+//system include
+#include <e32base.h>
+//user include
+#include "cltsypacketserviceshandler.h"
+// forward class
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+/**
+ * This is a helper class. 
+ * There are sometimes, CTSY passed an asynchronous request to LTSY, and LTSY alreay know what should be returned(No need to Send AT command to Baseband).
+ * But as the passed request is 'Asynchronous', so we have to somehow return this value to CTSY in an asynchronous way.
+ * So we just inherit form CTimer which an Active object, and reuturn the alreay-known value to CTSY some time later.
+ *  
+ */
+class CAsyncHelperRequest : public CTimer
+	{
+public:
+	/**
+	 * 2nd Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 * @param aPriority
+	 */
+	static CAsyncHelperRequest* NewL(CGlobalPhonemanager& aGloblePhone,
+			                   CCtsyDispatcherCallback& aCallBack,
+			                   TInt aPriority = CActive::EPriorityLow);	
+	/**
+	 * Destructor
+	 *
+	 */
+	virtual ~CAsyncHelperRequest();
+	
+	/**
+	 * Set request IPC
+	 */
+	void SetRequestId(const TInt aIpc);
+protected:
+    /**
+     * constructor
+     */
+	CAsyncHelperRequest(CGlobalPhonemanager& aGloblePhone,CCtsyDispatcherCallback& aCallBack,TInt aPriority);
+	
+	/**
+	 * Typicl RunL which inherit from CActive
+	 */
+	virtual void RunL();
+private:
+    /**
+     * Start the timer
+     */
+	void StartTimer(const TTimeIntervalMicroSeconds32 aTimeout = 100000);
+	
+	/**
+	 * Stop the timer
+	 */
+	void StopTimer();
+protected:	
+    /**
+     * Call back dispatcher
+     */
+    CCtsyDispatcherCallback& iCallBack;
+    
+    /**
+     * The global phone reference
+     */
+    CGlobalPhonemanager& iGloblePhone;	
+private:
+    /**
+     * The IPC requtest ID which is used to identiy what callback function should be returned
+     */
+	TInt iRequestId;
+	
+	/**
+	 * Store the IPC request ID
+	 */
+	RArray<TInt> iReqArray;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+	};
+
+
+
+#endif //__ASYNCHELPERREQUEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,278 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atcommandbase.h
+// This contains CAtCommandBase which is the base class for AT command
+// 
+
+#ifndef ATCOMMANDBASE_H_
+#define ATCOMMANDBASE_H_
+
+// system include
+#include <e32base.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+// user include
+#include "atcommandtype.h"
+#include "ltsycommondefine.h"
+#include "respondbufparser.h"
+#include "requestbase.h"
+#include "globalphonemanager.h"
+
+
+// const defination
+const TUint KLtsyGenericBufferSize = 200;
+
+// forward class
+class CGlobalPhonemanager;
+class CAtManager;
+class CCommEngine;
+class CCtsyDispatcherCallback;
+class MAtCommandExecuteObserver;
+class CRequestBase;
+class CATSwitchOnLineMode;
+
+/**
+* This class provide the common functionalities for AT Command
+*
+*/
+class CAtCommandBase : public CRequestBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	virtual ~CAtCommandBase();
+public:// pure virtual functions	
+
+	/**
+	* Pure virtual function. Start Execute AT Command
+	*/
+	virtual void ExecuteCommand()=0;
+	
+	/**
+	* Cancel the AT Command execution
+	*/
+	virtual void CancelCommand();
+	
+public:// virtual functions	
+	/**
+	* Must be called after the AT Command execution get complete
+	*/
+	virtual void Complete();
+	
+	/**
+	* It can be overrided by inherited class
+	* 
+	* @param aResponseBuf Line buf reading from baseband which is 
+	*  parsered by class CAtCommandBase or CAtCommandBase's subtype
+	*/	
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	 * Virtual Function
+	 * This function would be called after one of @see TAtEventSource happened.
+	 * Subclass should implement this function.
+	 * 
+	 * @param aEventSource One of them: EReadCompletion, EWriteCompletion and ETimeoutCompletion
+	 * @param aStatus KErrNone if the event was complete without any error, or otherwise.
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+public:
+	/**
+	* Return the AT Type
+	* @return TLtsyATCommandType The AT Type and @see TLtsyATCommandType
+	*/
+	TLtsyATCommandType AtType();
+	
+	/**
+	* Add expected response string after an AT Command was executed
+	*
+	* @param aExpectStr
+	*/
+	void AddExpectStringL(const TDesC8& aExpectStr);
+	
+	/**
+	* Add expected response string after an AT Command was executed
+	*
+	* @param aExpectStr
+	*/
+	void RemoveExpectString(const TDesC8& aExpectStr);
+	
+	/**
+	* Reset and clean all the expect string
+	*
+	*/
+	void RemoveAllExpectString();
+	
+	/**
+	* Add an AT Command to ATCommandStore
+	*
+	*/
+	void AddUnsolicitedAtCommand();
+	
+	/**
+	* Remove an AT Command in ATCommandStore
+	*
+	*/
+	void RemoveAtCommand();
+	
+	/**
+	* Issue writing AT Command to baseband
+	*
+	*/
+	void Write();
+	
+	/**
+	 * Set write and read timout
+	 */
+	void SetTimeOut(TInt aWriteTimeOut, TInt aReadTimeOut);
+	
+	/**
+	* Clean the whole buffer received from baseband
+	*/
+	void ClearBuffer();
+	
+	/**
+	* Clean the current line in the buffer
+	*/
+	void ClearCurrentLine();
+	
+	/**
+	* The buffer for storing the all received data from comms engine
+	*/
+	TPtrC8 Buffer() const;
+	
+	/**
+	* The current line in the buffer
+	*/
+	TPtrC8 CurrentLine() const;
+	/**
+	* The last line which had not matched in the buffer
+	*/
+	TPtrC8 PrecedingLine() const;
+	
+	/**
+	* Check if the passed string was matched with Expected AT String
+	*
+	* @param aReadLine
+	* @return TBool ETrue if matched, otherwise EFalse
+	*/
+	virtual TBool MatchExpectString(const TDesC8& aReadLine);
+	/**
+	 * Set AT command observer
+	 * If the observer was set, the AT command should return the data from baseband back to it but not Dispatcher Callback handler.
+	 * 
+	 * @param aAtCommandObserver The AT command observer @see MAtCommandExecuteObserver
+	 */
+	void SetAtCommandObserver(MAtCommandExecuteObserver* aAtCommandObserver);
+	
+	/**
+	 * Remove the AT command observer
+	 * 
+	 */
+	void RemoveAtCommandObserver();
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	void GenericEventSignal(TAtEventSource aEventSource, TInt aStatus);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aAtManager
+	* @param aCommEngine
+	* @param aAtCommandObserver
+	*/
+	CAtCommandBase(CGlobalPhonemanager& aGloblePhone, CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	* This function must be called in his subtype class for 
+	* creating instance of class CRespondBufParser
+	*/
+	void ConstructL();
+    /**
+	* Start timer and would be expired after time periond of aTimeOut seconds
+	*/
+	void StartTimer(const TInt aTimeOut);
+private:
+  	/**
+	* Stop the timer
+	*/
+	void StopTimer();
+
+protected:
+    /**
+	* Identify the Type of AT Command
+	*/
+	TLtsyATCommandType iAtType;
+	
+	/**
+	* The array of strings which contain the expected Response Message from BaseBand
+	*/
+	RArray<TPtrC8> iExpectingArray;
+	
+	/**
+	* The buffer contains the "AT" String which should be sent to BaseBand Modem
+	*/
+	TBuf8<KLtsyGenericBufferSize> iTxBuffer;
+	
+	/**
+	* The expired time in which the Writing of AT command should be complete
+	*/
+	TInt iWriteTimeOut;
+	
+	/**
+	* The expired time in which the response message should be received
+	*/
+	TInt iReadTimeOut;
+	
+	/**
+	* The pointer to class CRespondBufParserparser for parsering response 
+	* message buffer
+	* 
+	*/	
+	CRespondBufParser* iParser;
+	
+	/**
+	* The dispacher callback handler
+	*/
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+private:	
+	/**
+	* The AT command observer.
+	* In most of cases, when the AT command was complete, it should use dispathcer callback handler to return data back to CTSY.
+	* But in some of cases, AT command should return the data back to the AT Command Observer which actually return the composed data
+	* (some of them were collected from other AT commands)
+	* back to CTSY.
+	* 
+	* Not own
+	*/
+	MAtCommandExecuteObserver* iAtCommandObserver;
+	
+	/**
+	* The buffer contains the line which had not matched
+	*/
+	TBuf8<KLtsyGenericBufferSize> iNoMatchedLastLine;
+	
+	
+	CATSwitchOnLineMode* iATSwitchOnLineMode;
+
+	};
+
+#endif /*ATCOMMANDBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandcontrolbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,127 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATCommandControlBase which is composite class of a number classes
+// 
+
+#ifndef ATCOMMANDCONTROLBASE_H_
+#define ATCOMMANDCONTROLBASE_H_
+
+//system include
+#include <e32base.h>
+
+//user include 
+#include "atcommandtype.h"
+#include "atcommandexecuteobserver.h"
+#include "requestbase.h"
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+
+//forward class
+class CAtCommandBase;
+class CRequestBase;
+
+/**
+ * This class is a composite class which is composed of a number of AT commands
+ * 
+ */
+class CATCommandControlBase : public CRequestBase, public MAtCommandExecuteObserver
+	{
+public:
+    /**
+     * Destructor
+     */
+	virtual ~CATCommandControlBase();
+public:
+    /**
+     * Add an AT command
+     * 
+     * @param aAtCommand The AT command which is to be added in
+     */
+	TInt AddAtCommand(const CAtCommandBase* aAtCommand);
+	
+	/**
+	 * Remove the AT command
+	 */
+	void RemoveAtCommand(const CAtCommandBase* aAtCommand);
+	
+	/**
+	 * Remove the AT command by its AT type
+	 */
+	void RemoveAtCommandByAtType(TLtsyATCommandType aType);
+	
+	/**
+	 * Get the AT command by its AT type
+	 * 
+	 * @param aType @see TLtsyATCommandType
+	 */
+	CAtCommandBase& GetAtCommandByAtTypeL(TLtsyATCommandType aType);
+	
+	/**
+	 * Remove all the AT commands
+	 */
+	void CleanAllAtCommands();
+	
+	/**
+	 * Remove all the AT commands and destroy them also
+	 */
+	void CleanAndDeleteAllAtCommands();	
+public:
+    /**
+     * Define the type to delete the AT command
+     */
+	enum TAutoDeleteAtCommand
+		{
+		/**
+		 * Delete all at command instance contained in the RPointArray when destructor
+		 */
+		EAutoDelete,
+		/**
+		 * Only close RPointArray, not delete at command instance contained in the RPonintArray
+		 */
+		ENoDelete
+		};
+	/**
+	 * Set the type of auto delete type
+	 */
+	void SetIsAutoDelete(TAutoDeleteAtCommand aIsDel);
+	
+	/**
+	 * Get the auto delete type
+	 */
+	TAutoDeleteAtCommand GetIsAutoDelete();
+protected:
+    /**
+     * Constructor
+     */
+	CATCommandControlBase(CGlobalPhonemanager& aGloblePhone, 
+		                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+protected:
+    /**
+     * The dispatcher call back
+     */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+private:
+    /**
+     * Auto delete type
+     */
+    TAutoDeleteAtCommand iIsDel;
+    
+    /**
+     * AT commands store
+     */
+    RPointerArray<CAtCommandBase> iArray;	
+	};
+
+#endif /*ATCOMMANDCONTROLBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandexecuteobserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,32 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atcommandexecuteobserver.h
+// 
+
+#ifndef ATCOMMANDEXECUTEOBSERVER_H_
+#define ATCOMMANDEXECUTEOBSERVER_H_
+
+//symstem include
+
+//user include
+#include "ltsycommondefine.h"
+
+
+class MAtCommandExecuteObserver
+	{
+public:
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus) = 0;
+	};
+
+#endif /*ATCOMMANDEXECUTEOBSERVER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atcommandtype.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,104 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atcommandtype.h
+// 
+
+#ifndef ATCOMMANDTYPE_H_
+#define ATCOMMANDTYPE_H_
+
+//Identifer at command class
+
+const TInt KLtsyGeneralAtCommandTypeUnitId = 0;
+const TInt KLtsyCallControlAtCommandTypeUnitId = 200;
+const TInt KLtsyPhoneAtCommandTypeUnitId = 400;
+const TInt KLtsySecurityAtCommandTypeUnitId = 600;
+const TInt KLtsyCellBroadcastAtCommandTypeUnitId = 800;
+const TInt KLtsyPhonebookOnTypeUnitId = 1000;
+const TInt KLtsyPhonebookTypeUnitId = 1200;
+const TInt KLtsySimTypeUnitId = 1400;
+const TInt KLtsySmsTypeUnitId = 1600;
+const TInt KLtsyCallControlMultipartyTypeUnitId = 1800;
+const TInt KLtsySupplementaryServicesTypeUnitId = 2000;
+const TInt KLtsyPacketServicesTypeUnitId = 2200;
+const TInt KLtsySatTypeUnitId = 2400;
+
+enum TLtsyATCommandType
+	{
+	/*Not Use*/
+	ELtsyAt_User_NotUse = -1,
+	/*General*/
+	ELtsyAT_General_AT = KLtsyGeneralAtCommandTypeUnitId + 1,	//AT
+	ELtsyAT_General_WIND = KLtsyGeneralAtCommandTypeUnitId + 2,	//+WIND (Unsolicited command)
+	ELtsyAT_General_CLCC = KLtsyGeneralAtCommandTypeUnitId + 3, //AT+CLCC (list current call information)
+	
+	/*Call Control*/
+	ELtsyAT_Call_ATD = KLtsyCallControlAtCommandTypeUnitId + 1,		//ATD
+	ELtsyAT_Call_ATH = KLtsyCallControlAtCommandTypeUnitId + 2,     //ATH
+	ELtsyAT_Call_RING = KLtsyCallControlAtCommandTypeUnitId + 3,    //RING or +CRING : *
+	ELtsyAT_Call_CHLD = KLtsyCallControlAtCommandTypeUnitId + 4,    //CHLD(for use release/hold/resume/swap a call)
+	
+	/*Phone*/
+	ELtsyAT_Phone_ModemStatus      = KLtsyPhoneAtCommandTypeUnitId + 1,
+	ELtsyAT_Phone_NwkRegStatus     = KLtsyPhoneAtCommandTypeUnitId + 2,
+	ELtsyAT_Phone_SimCardStatus    = KLtsyPhoneAtCommandTypeUnitId + 3,
+	ELtsyAT_Phone_NwkInfo          = KLtsyPhoneAtCommandTypeUnitId + 4,
+	ELtsyAT_Phone_GetSignal        = KLtsyPhoneAtCommandTypeUnitId + 5,
+	ELtsyAT_Phone_GetBattery       = KLtsyPhoneAtCommandTypeUnitId + 6,
+	ELtsyAT_Phone_SMSSetting1      = KLtsyPhoneAtCommandTypeUnitId + 7,
+	ELtsyAT_Phone_SMSSetting2      = KLtsyPhoneAtCommandTypeUnitId + 8,
+	ELtsyAT_Phone_RegistNwk        = KLtsyPhoneAtCommandTypeUnitId + 9,
+	ELtsyAT_Phone_GPRSRegNwk       = KLtsyPhoneAtCommandTypeUnitId + 10,
+	ELtsyAT_Phone_SetWind          = KLtsyPhoneAtCommandTypeUnitId + 11,
+	ELtsyAT_Phone_GetImei          = KLtsyPhoneAtCommandTypeUnitId + 12,
+	ELtsyAT_Phone_GetManufacturer  = KLtsyPhoneAtCommandTypeUnitId + 13,
+	ELtsyAT_Phone_GetModel         = KLtsyPhoneAtCommandTypeUnitId + 14,
+	ELtsyAT_Phone_GetRevision      = KLtsyPhoneAtCommandTypeUnitId + 15,
+	ELtsyAT_Phone_SetOperFormat    = KLtsyPhoneAtCommandTypeUnitId + 16,
+	ELtsyAT_Phone_CheckFdnSupport  = KLtsyPhoneAtCommandTypeUnitId + 17,
+	ELtsyAT_Phone_GetFdnStatus     = KLtsyPhoneAtCommandTypeUnitId + 18,
+	ELtsyAT_Phone_SetTDRSingal     = KLtsyPhoneAtCommandTypeUnitId + 19,
+	/*Security*/
+	
+	/*Cell Broad Cast*/
+	
+	/*Phone book On*/
+	
+	/*Phone book*/
+	
+	ELtsyAT_Phonebook_SmsStoreGetInfo=KLtsyPhonebookTypeUnitId  + 1,
+	/*Sim*/
+	
+	/*Sms*/
+	ELtsyAT_Sms_GetMessageStoreInfo = KLtsySmsTypeUnitId + 1,
+	
+	ELtsyAT_Sms_ReceiveMessage = KLtsySmsTypeUnitId+2,
+	/*Call Control Multiparty*/
+	
+	/*Supplementary Services*/
+	
+	/*PacketServices*/
+	ELtsyAT_Packet_ActivateContext          = KLtsyPacketServicesTypeUnitId + 1,
+	ELtsyAT_Packet_GetContextAddr           = KLtsyPacketServicesTypeUnitId + 2,
+	ELtsyAT_Packet_SwitchOnlineMode         = KLtsyPacketServicesTypeUnitId + 3,
+	ELtsyAT_Packet_HangUp                   = KLtsyPacketServicesTypeUnitId + 4,
+	ELtsyAT_Packet_DeactivateContext        = KLtsyPacketServicesTypeUnitId + 5,
+	ELtsyAT_Packet_ConnectContext           = KLtsyPacketServicesTypeUnitId + 6,
+	ELtsyAT_Packet_DeleteContext1           = KLtsyPacketServicesTypeUnitId + 7,
+	ELtsyAT_Packet_DeleteContext2           = KLtsyPacketServicesTypeUnitId + 8,
+	ELtsyAT_Packet_DeleteContext3           = KLtsyPacketServicesTypeUnitId + 9,
+	ELtsyAT_Packet_DeleteContext4           = KLtsyPacketServicesTypeUnitId + 10
+	/*Sat*/
+	};
+
+#endif /*ATCOMMANDTYPE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/athelpercommand.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file athelpercommand.h
+// 
+
+
+#ifndef __ATHELPERCOMMAND_H__
+#define __ATHELPERCOMMAND_H__
+
+//user include
+#include "atcommandbase.h"
+
+/**
+ * \class CATHelperCommand 
+ * \brief get Modem status.
+ *
+ * CATHelperCommand inherits from the CAtCommandBase class. 
+ * This file defines the AT command for simple AT command 
+ * which only return OK or Error
+ */
+class CATHelperCommand : public CAtCommandBase
+{
+public:
+	static CATHelperCommand* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATHelperCommand();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Cancel the AT Command execution
+	 */
+	virtual void CancelCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Set the string which should be executed AT Command
+	 */
+	void SetAtCommandString(const TDesC8& aATString);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	/**
+	 * Start this request
+	 */
+	void SetATType(TLtsyATCommandType aATType);
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATHelperCommand(CGlobalPhonemanager& aGloblePhone, 
+		              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	/**
+	* The buffer contains the "AT" String which should be sent to BaseBand Modem
+	*/
+	TBuf8<KLtsyGenericBufferSize> iATBuffer;
+
+};
+#endif //__ATHELPERCOMMAND_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atipcrequestcompleteobserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,25 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains MIpcRequestCompleteObserver which store one and only one solicited active at command and a number of active 
+// 
+
+#ifndef ATIPCREQUESTCOMPLETEOBSERVER_H_
+#define ATIPCREQUESTCOMPLETEOBSERVER_H_
+
+class MIpcRequestCompleteObserver
+    {
+public:    
+    virtual void NotifyIpcRequestComplete(TInt aIpcId) = 0;
+    };
+#endif /* ATIPCREQUESTCOMPLETEOBSERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atmanager.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,113 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atmanager.h
+// This contains CAtManager which manage AT commands
+//
+
+#ifndef ATMANAGER_H_
+#define ATMANAGER_H_
+
+// system include
+#include <e32base.h>
+
+// user include
+#include "mcommobserver.h"
+#include "atcommandbase.h"
+
+//class forward
+class CActiveCommandStore;
+
+/**
+ * This class is acting an interface between Comms Engine and AT commands, which manage to find active
+ * AT command and send the Event to it.
+ * 
+ */
+class CAtManager : public CBase, 
+				   public MCommReadLineNotifier, 
+				   public MCommEngineObserver
+	{
+public:
+	/**
+	 * Factory function
+	 * 
+	 */
+	static CAtManager* NewL();
+	
+	/**
+	 * Factory function
+	 */
+	static CAtManager* NewLC();
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~CAtManager();
+	
+public:
+	/**
+	 * Set current active solicited AT Command.
+	 * By default, one one solicited AT command should be currently Active
+	 * 
+	 * @param aSolicitedCommand The solicited AT command
+	 */
+	void SetSolicitedAtCommand(CAtCommandBase* aSolicitedCommand);
+	
+	/**
+	 * Get the Active Commands store: only one solicited and number of unsoclited AT Commands
+	 * 
+	 * CActiveCommandStore The active commands store
+	 */
+	CActiveCommandStore* GetActiveCommandStore() const;
+	
+	/**
+	 * From MCommEngineObserver
+	 * This function would be called when the event @see TAtEventSource happened.
+	 * 
+	 */
+	virtual void ReadOrWriteComplete(TAtEventSource aEvent, TInt aStatus);
+	
+	/**
+	 * From MCommReadLineNotifier
+	 * This function would be called when one line string were found 
+	 */
+	virtual TBool NotifyOneLineFoundL(TInt aStatus, const TDesC8& aLineBuf);
+	
+protected:
+	/**
+	 * Constructor
+	 * 
+	 */
+	CAtManager();
+	
+	/**
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * The active solicited AT command
+	 * Not Own
+	 */
+	CAtCommandBase* iSolicitedCommand; 
+	
+	/**
+	 * The active command store
+	 * Own
+	 */
+	CActiveCommandStore* iActiveCommandStore;
+	};
+
+#endif /*ATMANAGER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atswitchonlinemode.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,114 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATSwitchOnLineMode which switch to online mode
+// 
+
+#ifndef __ATSWITCHONLINEMODE_H__
+#define __ATSWITCHONLINEMODE_H__
+
+#include <callbacktimer.h>
+//user include
+#include "atcommandbase.h"
+
+/**
+ * \class CATSwitchOnLineMode 
+ * \brief get Modem status.
+ *
+ * CATSwitchOnLineMode inherits from the CAtCommandBase class. 
+ * This file defines the AT command for simple AT command 
+ * which only return OK or Error
+ */
+class CATSwitchOnLineMode : public CAtCommandBase,
+                            public MTimerObserver
+{
+public:
+	static CATSwitchOnLineMode* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATSwitchOnLineMode();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	 * Start this request
+	 */
+	void StartSwitchOnLineMode(CAtCommandBase* aAtCommandBase,MAtCommandExecuteObserver* aAtCommandObserver);
+	/**
+	 * 
+	 * 
+	 */
+	void Enable();
+	/**
+	 * 
+	 * 
+	 */
+	void Disable();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATSwitchOnLineMode(CGlobalPhonemanager& aGloblePhone, 
+		                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	//From MTimerObserver
+    virtual void TimerRun(TInt aError);	
+    void StartTimer(const TInt aTimeout);
+private:
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	CAtCommandBase* iAtCommandBase;
+	MAtCommandExecuteObserver* iAtCommandObserver;
+	CCallbackTimer* iCallbackTimer;	
+	
+	enum 
+		{
+		ETimerNone,
+		ETimerDrop,
+		ETimerRaise,
+		ETimerReset,
+		ETimerRead,
+		ETimerWait
+		} iWhichTimer;
+
+};
+#endif //__ATSWITCHONLINEMODE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atunsolicited.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,109 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atunsolicited.h
+// 
+
+#ifndef ATUNSOLICITED_H_
+#define ATUNSOLICITED_H_
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+#include "unsolicitedparams.h"
+
+class CATUnsolicited : public CAtCommandBase
+	{
+public:
+	/**
+	 * 
+	 * 
+	 */
+	static CATUnsolicited* NewL(CGlobalPhonemanager& aGloblePhone,
+			                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 
+	 * 
+	 */
+	static CATUnsolicited* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+			                     
+	
+	/**
+	 * 
+	 * 
+	 */
+	virtual ~CATUnsolicited();
+	
+	/**
+	 * 
+	 * 
+	 * 
+	 */
+	virtual void ExecuteCommand(){};
+	
+	/**
+	 * 
+	 * 
+	 */
+	virtual void CancelCommand(){};
+	
+	/**
+	 * 
+	 * 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	 * 
+	 * 
+	 */
+	TInt GetParserResult() const;	
+	
+	/**
+	 * 
+	 * 
+	 */
+	const TDesC8& GetUnsolicitedParams() const;
+protected:
+	/**
+	 * 
+	 * 
+	 */
+	CATUnsolicited(CGlobalPhonemanager& aGloblePhone,
+				   CCtsyDispatcherCallback& aCtsyDispatcherCallback);	
+	
+	/**
+	 * 
+	 * 
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * 
+	 * 
+	 */
+	TUnsolicitedParams::TUnsolicitedParamsPckgBuf iPckgBuf;
+	
+	/**
+	 * 
+	 * 
+	 * 
+	 */
+	TInt iResult;
+	};
+
+#endif /*ATUNSOLICITED_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/atunsolicitedobserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,34 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atunsolicitedobserver.h
+// 
+
+#ifndef ATUNSOLICITEDOBSERVER_H_
+#define ATUNSOLICITEDOBSERVER_H_
+
+//system include
+#include <e32std.h>
+//user include
+
+class MLtsyUnsolicitedCommandObserver
+	{
+public:
+	/**
+	 * 
+	 * 
+	 */
+	virtual void UnsolicitedCommandArriving(TInt aEvent, const TDesC8& aWindPkg) = 0;
+	};
+
+#endif /*ATUNSOLICITEDOBSERVER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/globalphonemanager.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,224 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file globlephonemanager.h
+// This contains CGlobalPhonemanager which manage the global phone status and call info manager.
+// 
+
+#ifndef __GLOBALPHONEMANAGER_H__
+#define __GLOBALPHONEMANAGER_H__
+
+// system include
+#include <etel.h>
+#include <etelmm.h>
+#include <etelqos.h>
+#include <ctsy/ltsy/mltsydispatchphonebookinterface.h>
+
+// user include
+#include <cmmutility.h>
+#include "cltsypacketserviceshandler.h"
+
+/**
+ *  Define the prort access type
+ */
+enum TPortAccess
+	{
+	EPortAccessAllowed,
+	EPortAccessDenied
+	};
+
+/**
+ * Define the phone status for phone initialization
+ */ 
+enum TPhoneInitStatus
+	{
+	EPhoneNotInitialised,
+	EPhoneInitialising,
+	EPhoneInitialiseCancelling,
+	EPhoneInitialised
+	};
+
+/**
+ * Define the singnal info
+ * 
+ */ 
+struct TTsySignalInfo
+	{
+	TInt iSignalStrength;
+	TInt iBar;
+	};
+
+/**
+ * Define the storage type
+ */
+typedef TBuf8<2> TStorageType;
+
+/**
+ * Define the global phone status
+ */
+struct TPhoneStatusTSY
+	{
+	RPhone::TModemDetection iModemDetected;
+	RPhone::TMode iMode;
+	TUint iDataAndFaxFlags;
+	TPhoneInitStatus iInitStatus;
+	TPortAccess iPortAccess;
+	TInt iWaitForCarrierTime;
+	TBool iDataPortLoaned;
+	TUint iSupportedPhoneBookStorageFlag;
+	TInt iSupportedPhoneBookCount;
+	TStorageType iLastAccessedPhoneBook;
+	TBool iNetworkChanged;
+	RMobilePhone::TMobilePhoneRegistrationStatus iRegistrationStatus;
+	RMobilePhone::TMobilePhoneLocationAreaV1 iLocationArea;
+	RMobilePhone::TMobilePhoneNetworkInfoV5 iCurrentNetwork;
+	TTsySignalInfo iSignalInfo;
+	RMobilePhone::TMobilePhoneBatteryInfoV1 iBatteryInfo;
+	RMobilePhone::TMobilePhoneNITZ iMobilePhoneNITZ;
+	RPacketService::TRegistrationStatus iGprsRegistrationStatus;
+	RPacketService::TStatus iPacketStatus;
+	TInt iGprsMaxNumContexts;
+	TRfStateInfo iRfStateInfo;
+	RMobilePhone::TMobilePhoneNetworkSelectionV1  iLocalNetworkSel;
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	};
+
+// forward class declarations
+class CTsyConfig;
+class CAtManager;
+class CCommEngine;
+class CRequestBase;
+class CLtsyCallInformationManager;
+
+/**
+ * This class is a shared global phone manager across all the handlers.
+ * 
+ * This class provide the functions which store the phone status, modem status and access the call info manager.
+ * 
+ */
+class CGlobalPhonemanager : public CBase
+	{
+public:
+	/**
+	 * Factory function
+	 */
+	static CGlobalPhonemanager* NewL();
+	
+	/**
+	 * Factory function
+	 */
+	static CGlobalPhonemanager* NewLC();
+	
+	/**
+	 * virtual destructor
+	 */
+	virtual ~CGlobalPhonemanager();
+	
+public:
+	/**
+	 * Check current phone status before writing an AT command
+	 */
+	TInt CheckGlobalPhoneStatus();
+	
+	/**
+	 * Set current Active IPC Request
+	 */
+	void SetActiveRequest(CRequestBase* aRequestBase);
+	
+	/**
+	 * Before writing an AT command to baseband, the last active Request must be deleted in order to avoiding the  
+	 */
+	void DeleteLastActiveRequest();
+	
+	/**
+	 * Get Call informantion manager reference
+	 * 
+	 */
+	CLtsyCallInformationManager& GetCallInfoManager();
+	
+	/**
+	 * Get current active IPC request
+	 */
+	CRequestBase* CurrentActiveRequest();
+private:
+	/**
+	 * Constructor
+	 * 
+	 */
+	CGlobalPhonemanager();
+	
+	/**
+	 * 2nd Constructor
+	 * 
+	 */
+	void ConstructL();
+	
+	/**
+	 * Initialize Phone Manager
+	 * 
+	 */
+	void InitL();
+public:
+	/**
+	 * CommDB Engine
+	 */
+	CTsyConfig *iConfiguration;
+	
+	/**
+	 * Comm Engine
+	 * Own
+	 */
+	CCommEngine *iCommEngine;
+	
+	/**
+	 * AT Manager
+	 * Own
+	 */
+	CAtManager *iAtManager;	
+	
+	/**
+	 * Global phone status
+	 */
+	TPhoneStatusTSY iPhoneStatus;
+	
+	/**
+	 * This member define if or not there is unfinished IPC active
+	 */
+	TBool iEventSignalActive;
+
+	/**
+	 * Pkt Context list
+	 */
+	RPointerArray<TContextInfomation> iContextList;
+	/**
+ 	 * Phonebook store info
+ 	 */
+	DispatcherPhonebook::TPhonebookStoreInfoV1  iPhonebookStoreInfo;
+	/**
+	 * Get the total storage items from CAtSmsStoreInfo
+	 */
+	TInt iStoreTotal; 
+private:
+	/**
+	 * Current active Ipc Request
+	 */
+	CRequestBase* iActiveIpcRequest;
+	
+	/**
+	 * The call information manager
+	 * Own
+	 */
+	CLtsyCallInformationManager* iCallInfoManager;
+	};
+
+#endif /*__GLOBALPHONEMANAGER_H__*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycallinformation.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,197 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains TLtsyCallInformation which store baseband related call information
+// 
+
+#ifndef LTSYCALLINFORMATION_H_
+#define LTSYCALLINFORMATION_H_
+
+//system include
+#include <e32base.h>
+#include <etelmm.h>
+
+//user include
+
+class TLtsyCallInformation
+	{
+public:
+	/**
+	 * 
+	 * 
+	 */
+	TLtsyCallInformation();
+	
+	/**
+	 *Call id is used or not 
+	 * 
+	 */
+	enum TCallIdUsedInfo
+		{
+		EUsed,
+		ENotUsed
+		};
+	
+	/**
+	 * Direction of the call
+	 * 
+	 */
+	enum TDirectionCall
+		{
+		EUnknownDirection = -1,	//Don't know
+		EMoCall = 0, 	//Mobile originated(MO) call
+		EMtCall = 1   	//Moblie teminated(MT) call
+		};
+
+	/**
+	 * State of the call
+	 * 
+	 */
+	enum TCallState
+		{
+		EUnknownState = -1,   //Don't know call state
+		EActiveCall = 0,	  //Active call
+		EHeldCall = 1,        //Hold call
+		EDialingCall = 2,     //Dialing Call(MO call)
+		EAlertingCall = 3,    //Alerting Call(MO call)
+		EInComingCall = 4,    //InComing call(MT call)
+		EWaitingCall = 5      //Waiting call(MT call)
+		};
+	
+	/**
+	 * Teleservice
+	 * 
+	 */
+	enum TCallMode
+		{
+		EVoiceCall  = 0,
+		EDataCall   = 1,
+		EFaxCall    = 2,
+		EUnKnowCall = 9
+		};	
+	
+	/**
+	 * Multiparty(Conference)
+	 * 
+	 */
+	enum TConferenceCall
+		{
+		EUnknownIsConference = -1, //Don't know
+		ENotConference = 0,		   //Not conference
+		EIsConference  = 1         //Conference
+		};
+	
+public:
+	/**
+	 * 
+	 */
+	void SetCallId(TInt aCallId);
+	
+	/**
+	 * 
+	 * 
+	 */
+	TInt GetCallId() const;
+	
+	void SetCallIdIsUsedInfo(TCallIdUsedInfo aUsedInfo);
+	TCallIdUsedInfo GetCallIdIsUsedInfo() const;
+	
+	void SetCallDirection(TDirectionCall aDirection);
+	TDirectionCall GetCallDirection() const;
+	
+	void SetCallState(TCallState aCallState);
+	TCallState GetCallState() const;
+	
+	void SetCallMode(TCallMode aCallMode);
+	TCallMode GetCallMode() const;
+	
+	void SetConferenceCall(TConferenceCall aConferenceCall);
+	TConferenceCall GetConferenceCall() const;
+	
+	void SetMobileTelNum(const TDesC8& aTelNum);
+	const TDesC8& GetMobileTelNum() const;
+	
+	void SetAddressType(TInt aAddressType);
+	TInt GetAddressType() const;
+	
+	void SetMobileName(const TDesC8& aMobileName);
+	const TDesC8& GetMobileName() const;
+	
+	void SetEmergencyCallFlag(TBool aIsEmergency);
+	TBool GetEmergencyCallFlag() const;
+	
+private:
+	
+	/**
+	 * Call id
+	 * 
+	 */
+	TInt iCallId;
+	
+	/**
+	 * Call id used info
+	 * 
+	 */
+	TCallIdUsedInfo iUsedInfo;
+	
+	/**
+	 * Direction of the call
+	 * 
+	 */
+	TDirectionCall iDirection;
+	
+	/**
+	 * State of the call
+	 * 
+	 */
+	TCallState iCallState;
+	
+	/**
+	 * Teleservice
+	 * 
+	 */
+	TCallMode iCallMode;
+	
+	/**
+	 * Multiparty(Conference)
+	 * 
+	 */
+	TConferenceCall iIsConference;
+	
+	/**
+	 * Telephone num
+	 * 
+	 */
+	TBuf8<RMobilePhone::KMaxMobileTelNumberSize> iTelNum; 
+	
+	/**
+	 * 
+	 * 
+	 */
+	TInt iAddressType;
+	
+	/**
+	 * Moblie name
+	 * 
+	 */
+	TBuf8<RMobilePhone::KMaxMobileNameSize> iMobileName;
+	
+	/**
+	 * Emergency call
+	 * 
+	 */
+	TBool iIsEmergencyCall;
+	
+	};
+
+#endif /*LTSYCALLINFORMATION_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycallinformationmanager.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,150 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CLtsyCallInformationManager which manager call information
+// 
+
+#ifndef LTSYCALLINFORMATIONMANAGER_H_
+#define LTSYCALLINFORMATIONMANAGER_H_
+
+//system include
+
+//user include
+#include "ltsycallinformation.h"
+
+//const define
+const TInt KLtsyMaxCallCount = 8;
+
+// forward class declarations
+class CATHangupCommandRecords;
+
+/**
+ * This class is handling all the call related information.
+ * 
+ * This call information manager store the call information and manage the call status.
+ * 
+ */
+class CLtsyCallInformationManager : public CBase
+	{
+public:
+    /**
+     * Factory funciton to create a new object of CLtsyCallInfomationManager
+     */
+	static CLtsyCallInformationManager* NewL();
+	
+	/**
+     * Factory funciton to create a new object of CLtsyCallInfomationManager
+     */
+	static CLtsyCallInformationManager* NewLC();
+	
+	/**
+	 * The destructor
+	 */
+	virtual ~CLtsyCallInformationManager();
+	
+	/**
+	 * Clear all the call information related to the specific CallID
+	 */
+	void ResetCallInformationByCallId(TInt aCallId);
+	
+	/**
+	 * Clear all the call information stored by call information manager
+	 * 
+	 * This function will be called when Hangup terminates all calls is called
+	 */
+	void ResetAllCalInformation();
+	
+	/**
+	 * Get the call information by specific CallID
+	 */
+	TLtsyCallInformation& GetCallInformationByCallId(TInt aCallId);
+	
+	/**
+	 * Get the call Id which is not currently used
+	 */
+	TInt FindUnUesedCallId() const;
+	
+	/**
+	 * Check the callId is used or not
+	 */
+	TBool IsHaveUsedCallId() const;
+	
+	/**
+	 * Find the call ID of 1st incoming call
+	 */
+	TInt FindIncomingCallId() const;
+	
+	/**
+	 * Find the call Id by its status which is dialling and altering
+	 */
+	TInt FindDialingOrAlertingCallId() const;
+	
+	/**
+	 * Get the call Id of 2nd incoming call.
+	 * Waiting call means that an incoming call is already processed by the client. and just wait
+	 * the client to hanle this 2nd incoming call
+	 */
+	TInt FindWaitingCallId() const;
+	
+	/**
+	 * Set the incoming ring call flag.
+	 * If received "Ring" or "+CRing", set this flag to be ETrue. and set it to be EFalse, if this call has been connected.
+	 */
+	void SetIncomingCallFlag(TBool aIncomingCallFlag);
+	
+	/**
+	 * Get the incoming call flag
+	 */
+	TBool GetIncomingCallFlag() const;
+	
+	/**
+	 * Get the call ID assigned to emergence call
+	 */
+	TInt FindEmergencyCallId() const;
+	
+	/**
+	 * Get Hang up command records
+	 * 
+	 */
+	CATHangupCommandRecords& GetHangupCommandRecords();	
+	
+protected:
+	/**
+	 * Constructor
+	 */
+	CLtsyCallInformationManager();
+	
+	/**
+	 * 2nd constructor
+	 */
+	void ConstructL();
+	
+private:
+    /**
+     *Call Information array 
+     */
+	TLtsyCallInformation iCallInfo[KLtsyMaxCallCount];
+	
+	/**
+	 * Incoming call status flag
+	 */
+	TBool iIncomingCallFlag;
+	
+	/**
+	 * Own. 
+	 * The store to store the hanup information related to AT hangup command
+	 */
+	CATHangupCommandRecords* iHangupCommandRecords;		
+	};
+
+#endif /*LTSYCALLINFORMATIONMANAGER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/ltsycommondefine.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,110 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains common defination
+// 
+
+#ifndef LTSYCOMMONDEFINE_H_
+#define LTSYCOMMONDEFINE_H_
+
+// system include
+#include <e32std.h>
+
+/**
+ * Define the IO event
+ * 
+ */
+enum TAtEventSource
+	{
+	EReadCompletion,
+	EWriteCompletion,
+	ETimeoutCompletion
+	};
+
+/**
+* The default maximum time in which Writing an AT command must be complete
+* 5 seconds
+*/
+const TInt KLtsyDefaultWriteTimeOut = 5;
+
+/**
+* The default maximum time in which The response from baseband must be received 
+* 10 seconds
+*/
+const TInt KLtsyDefaultReadTimeOut = 20;
+
+/**
+* The invalid call ID
+*/
+const TInt KLtsyErrorCallId = -1;
+
+/**
+ * The minimum call id
+ * 
+ */
+const TInt KLtsyMinCallId = 1;
+
+/**
+ * The maximal call id
+ * 
+ */
+const TInt KLtsyMaxCallId = 7;
+
+/**
+ * +WIND
+ */
+const TInt KLtsyUnsolicitedEvent00 = 0;
+const TInt KLtsyUnsolicitedEvent01 = 1;
+const TInt KLtsyUnsolicitedEvent02 = 2;
+const TInt KLtsyUnsolicitedEvent03 = 3;
+const TInt KLtsyUnsolicitedEvent04 = 4;
+const TInt KLtsyUnsolicitedEvent05 = 5;
+const TInt KLtsyUnsolicitedEvent06 = 6;
+const TInt KLtsyUnsolicitedEvent07 = 7;
+const TInt KLtsyUnsolicitedEvent08 = 8;
+const TInt KLtsyUnsolicitedEvent09 = 9;
+const TInt KLtsyUnsolicitedEvent10 = 10;
+const TInt KLtsyUnsolicitedEvent11 = 11;
+const TInt KLtsyUnsolicitedEvent12 = 12;
+/**
+ *  const for sms 
+ */
+const TInt KGsmTpduSize = 165;            // 140 bytes user data + 25 bytes TPDU header
+const TInt KPduMode = 0;
+const TInt KTextMode = 1;
+const TInt KCMTMode = 2;
+const TInt KMaxAsciiPduLength = 400;       //For write message and send message
+
+/**
+ * ReadEntry for phonebook
+ */
+class TPhonebookReadEntry
+    {
+public:
+	TUint16     iIndex;
+    TBuf16<20>  iNumber;
+    TUint8      iTon;
+    TBuf16<14>  iText;	
+    };
+
+// const string defination
+_LIT8(KLtsyOkString,"OK");
+_LIT8(KLtsyErrorString,"ERROR");
+_LIT8(KLtsyCmeErrorString,"+CME ERROR:*");
+_LIT8(KLtsyNoCarrierString,"NO CARRIER");
+_LIT8(KLtsyGeneralIndMatchString, "+WIND:*");
+_LIT8(KAnyATCommand,"AT+*");
+
+_LIT8(KLtsyCtrlZChar,"\032");
+_LIT8(KLtsyCommaChar,",");
+#endif /*LTSYCOMMONDEFINE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/mslogger.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TSYLogger
+
+#include <e32std.h>	// for basic Symbian data types
+
+#ifndef __MSLOGGER_H__
+#define __MSLOGGER_H__
+
+#ifdef _DEBUG
+#define __LOGDEB__
+#else
+#define __LOGREL__
+#endif
+
+#ifdef	__LOGDEB__
+#define __LOGREL__
+#endif
+
+#ifdef __LOGDEB__
+#define LOGTEXT(AAA)				TSYLogger::Write(AAA)
+#else
+#define LOGTEXT(AAA)
+#endif
+
+#ifdef __LOGDEB__
+#define LOGTEXT2(AAA,BBB)			TSYLogger::WriteFormat(AAA,BBB)
+#else
+#define LOGTEXT2(AAA,BBB)
+#endif
+
+#ifdef __LOGDEB__
+#define LOGTEXT3(AAA,BBB,CCC)		TSYLogger::WriteFormat(AAA,BBB,CCC)
+#else
+#define LOGTEXT3(AAA,BBB,CCC)
+#endif
+
+#ifdef	__LOGREL__
+#define LOGTEXTREL(AAA)				TSYLogger::Write(AAA)
+#else
+#define LOGTEXTREL(AAA)				
+#endif
+
+#ifdef	__LOGREL__
+#define LOGTEXTREL2(AAA,BBB)		TSYLogger::WriteFormat(AAA,BBB)
+#else
+#define LOGTEXTREL2(AAA,BBB)		
+#endif
+
+#ifdef __LOGREL__
+#define LOGTEXTREL3(AAA,BBB,CCC)	TSYLogger::WriteFormat(AAA,BBB,CCC)
+#else
+#define LOGTEXTREL3(AAA,BBB,CCC)	
+#endif
+
+// TSYLogger
+// Implements logging.  All static calls.
+
+class TSYLogger
+	{
+public:
+	static void Write(const TDesC8& aText);
+	static void WriteFormat(TRefByValue<const TDesC8> aFmt,...);
+	};
+
+#endif	// __MSLOGGER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/panic.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,112 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file panic.h
+// Panic codes and panic function. This header should be kept private and not exported to
+// /epoc32/include/
+
+#ifndef __PANIC_H__
+#define __PANIC_H__
+
+/**
+ * Please add new panic codes to the end of the list so that panic code values
+ * do not change meaning.
+ * You can name the panic code as you wish.
+ */
+enum TTSYPanic
+	{
+	EGeneral,
+	EUnexpectedState,
+	EATCommand_NotConstructed,
+	EATCommand_IllegalCompletionWaitExpected,
+	EATCommand_IllegalCompletionWriteExpected,
+	EATCommand_IllegalCompletionWriteNotExpected,
+	EATCommand_IllegalCompletionReadExpected,
+	EATCommand_IllegalCompletionReadNotExpected,
+	EATCommand_IllegalWaitCompletion,
+	EATCommand_IllegalResponse,
+	EIllegalTsyReqHandle,
+	EIllegalPanicOccurredValue,
+	EIllegalOwnedState,
+	ENotifications_Remaining,
+	ELastEvents_Remaining,
+	ECalls_Remaining,
+	EFaxPtrNull,
+	EFaxCompletionPtrNull,
+	EATCommand_NotInProgress,
+	ERelinquishOwnershipWithNoCall,
+	EIllegalTsyNameInConnectedModemRecord,
+	EIllegalCallDuration,
+	EIllegalEvent,
+	EPreAllocatedCallDoesNotExist,
+	ENewCallDoesNotExist,
+	ECallNameAlreadyExists,
+	ERingingCallNotFound,
+	ELineAlreadyExists,
+	EAcquirerNotFound,
+	EUnknownPhoneBookStorageTypeIndex,
+	EIllegalPhoneBookState,
+	EFaxServerNotNull,
+	ENotDataCallType,
+	EATSmsUtilsDescriptorOverflow,
+	EATSmsUtilsOddNumberOfSemiOctets,
+	EATSmsCommandsWrongRequest,
+	EATSmsCommandsUnknownRequestStage,
+	EATSmsCommandsUnknownRequest,
+	EATSmsCommandsWrongRequestToCancel,
+	EATSmsMessagingSendNullMsgAttributes,
+	EATSmsMessagingSCATooLarge,
+	EATSmsMessagingUnknownRequestCompleted,
+	EMobileSmsMessagingUnknownIPC,		
+	EMobileSmsMessagingUnknownParamVersion,				
+	EMobileSmsMessagingNotYetImplemented,				
+	EMobileSmsMessagingNullParameter,					
+	EMobileSmsMessagingUnexpectedState,					
+	EMobileSmsMessagingReceiveBufferEmpty,				
+	EMobileSmsMessagingASCIIPduHasOddLength,			
+	EMobileSmsMessagingDigitCountOutOfRange,			
+	EMobileSmsMessagingCanNotReceiveUnstoredMessage,	
+	EMobileSmsMessagingMessageNotReserved,				
+	EMobileSmsMessagingClientAllocatedTooLittle,		
+	EMobileSmsMessagingClientAllocatedTooMuch,			
+	EMobileSmsMessagingSmsCapsNotValid,					
+	EMobileSmsMessagingIllegalIPCCallForRxMode,			
+	EMobileSmsMessagingAlreadyStarted,					
+	EMobileSmsMessagingCanNotReceiveStoredMessage,
+	ECMTHandlerDesPassedWithZeroLength,
+	EATGetSignalNullParameter,
+	EReceiveSmsQueueRequestOutstanding,
+	EMobileSmsMessagingPhoneNotSetToAReceiveMode,
+	EMobileSmsMessagingPhoneNotSetToASupportedReceiveMode,
+	ESmsRxQueuePduReadNullPointers,
+	ESmsRxQueuePduReadNoState,
+	ESmsRxQueuePduReadStopCalled,
+	ESmsRxQueuePduReadNonNullExpectString,
+	ESmsRxQueuePduReadNullExpectString,
+	ESmsRxQueuePduReadNullParameter,
+	ESmsRxQueuePduReadSCARemovalFailure,
+	EATSmsUtilsUnknownStoreName,
+	EATWaitForCMTNoState,
+	EATWaitForCMTSCARemovalFailure,
+	EATWaitForCMTPDUTooLong,
+	ETsyConfigNullDBPointer,
+	ETsyConfigAmbiguousModemTables,
+	ETsyConfigMMTSYNotInModemTables,
+	EPacketContextsRemaining,
+	EPacketContextDoesNotExist,
+	EUnableToConnectToFlogger,
+	};
+
+GLREF_C void Panic(TTSYPanic aPanicNumber);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/requestbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,82 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CRequestBase
+
+#ifndef ATIPCREQUEST_H_
+#define ATIPCREQUEST_H_
+
+// system include
+#include <e32base.h>
+
+// user include
+#include "atipcrequestcompleteobserver.h"
+
+//Class forward
+class CGlobalPhonemanager;
+
+/**
+ * The request base which acts a single IPC request passed by dispatcher
+ * 
+ */
+class CRequestBase : public CBase
+	{
+public:
+	/**
+	* Destructor
+	*/
+	virtual ~CRequestBase();
+	
+	/**
+	* Defince an interface of an IPC request to start this request asynchronously
+	*/
+	virtual void StartRequest();
+	
+	/**
+	 * Set the IPC request complete observer
+	 */
+	void SetIpcRequestCompleteObserver(MIpcRequestCompleteObserver* aIpcCompleteObserver);
+	
+	/**
+	 * Set IPC Id
+	 */
+	void SetIpcId(TInt aIpcId);
+	
+	/**
+	 * Get IPC Id
+	 */
+	TInt IpcId();
+protected:
+    /**
+    * The constructor
+    */
+	CRequestBase(CGlobalPhonemanager& aPhoneGlobals);
+	
+protected:
+    /**
+    * The global phone manager
+    */	
+	CGlobalPhonemanager& iPhoneGlobals;
+	
+	/**
+	 * The Ipc Request complete observer
+	 */
+	MIpcRequestCompleteObserver* iIpcCompleteObserver;
+	
+	/**
+	 * IPC Id
+	 */
+	TInt iIpcId;
+	};
+
+#endif /*ATIPCREQUEST_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/respondbufparser.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CRespondBufParser which provide an algorithm to analize the passed data from baseband
+//
+
+#ifndef __CRESPONDBUFPARSER_H__
+#define __CRESPONDBUFPARSER_H__
+#include <e32cmn.h> 
+#include <e32base.h>
+
+/**
+* This class is used to analyze the passed data and put the value in the buffer store
+*
+*/
+class CRespondBufParser : public CBase
+	{
+public:
+    /**
+    * Constructor
+    */
+	CRespondBufParser();
+	
+	/**
+	* Destructor
+	*/
+	virtual ~CRespondBufParser();
+	
+	/**
+	* Parse the responsed data
+	*/
+	void ParseRespondedBuffer(RArray<TPtrC8>& aArray, const TDesC8& aBuf);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/tsyconfg.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,222 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file tsconfig.h
+// This contains CTsyConfig which manage to get the modem settings from CommDB.
+// 
+
+#ifndef __TSYCONFG_H
+#define __TSYCONFG_H
+
+// system include
+#include <e32base.h>
+#include <d32comm.h>
+#include <etelmm.h>
+#include <commsdattypesv1_1.h>
+
+// use name space
+using namespace CommsDat;
+
+enum TConfigType
+	{
+	EConfigTypePreInit,
+	EConfigTypeInit,
+	EConfigTypeConnect,
+	EConfigTypeHangUp,
+	EConfigTypeFull,
+	EConfigTypeQuickInit,
+	EConfigTypeDDBugWorkAroundStart,
+	EConfigTypeDDBugWorkAroundEnd
+	};
+
+/** 
+ * CTsyConfig Class
+ * Creating the class will load the current modem settings.
+ * They may be refreshed by calling ReloadSettings.
+ * The ModemName, PortDriverName, CommPortName and String functions 
+ * will return descriptors to the relevant settings taken from 
+ * the current modem's settings.
+ * The CommConfig function will return a reference to the Configuration 
+ * structure in the current modem's settings. 
+ * All file closing, tidying and memory deallocation should be done 
+ * in the ~CTsyConfig destructor.
+ */
+class CTsyConfig : public CBase
+	{
+public:
+	/**
+	 * Factory function.
+	 * 
+	 * @return A newly created CTsyConfig Object
+	 */
+	static CTsyConfig* NewL();
+	
+	/**
+	 * Virtual destructor
+	 * 
+	 */
+	~CTsyConfig();
+    
+	/**
+	 * Set current table view.
+	 * Try to get current table view by 10 times.
+	 */
+	void SetCurrentTableViewL();
+	
+	/**
+	 * Get the field value by the name from modem Bearer record table in commdb.
+	 * 
+	 * @param aStringTag The field name
+	 * @param aString The field value
+	 */
+	TInt ConfigModemStringL(const TDesC& aStringTag, TDes8& aString);
+	
+	/**
+	 * Get the field value by the name from modem Bearer record table in commdb.
+	 * 
+	 * @param aStringTag The field name
+	 * @param aString The field value
+	 */
+	TInt ConfigModemStringL(const TDesC& aStringTag, TDes16& aString);
+	
+	/**
+	 * Gets the port config settings and masks out appropriate handshaking settings
+	 * according to whether state is about to initialise, just connected or about to hang up
+	 */ 
+	TInt PortConfig(TCommConfig& aConfigPckg, TConfigType aConfigType);
+	
+	/**
+	 * Stores the Speaker Preferences settings internally. These settings are stored on construction
+	 * of the CTsyConfig object.
+	 * @param aSpeakerSetting Speaker Preference setting
+	 */
+	void GetSpeakerSettingPref(RCall::TMonitorSpeakerControl& aSpeakerSetting);
+	
+	/**
+	 * Stores the Speaker Volume Preferences settings internally. These settings are stored on construction
+	 * of the CTsyConfig object.
+	 * @param aSpeakerVolume Speaker Volume setting
+	 */
+	void GetSpeakerVolumePref(RCall::TMonitorSpeakerVolume& aSpeakerVolume);
+	
+	/**
+	 * Stores the Dial Tone Preferences settings internally. These settings are stored on construction
+	 * of the CTsyConfig object.
+	 * @param aWaitForDialTonePref Wait for Dial Tone Preference setting
+	 */
+	void GetWaitForDialTonePref(RCall::TWaitForDialTone& aWaitForDialTonePref);
+	
+	/**
+	 * Opens a handle to CCommsDatabase	and positions the view on the default modem specified 
+	 * in the current Connected Modem record.
+	 * Note that the TSY does not keep the handle to the CCommsDatabase opened all the time, 
+	 * therefore this method is used to open the handle only when needed. The methods using 
+	 * this method are also responsible for calling ResetCurrentTableViews() to close the
+	 * handle to the CCommsDatabase and to clean up the table views.
+	 */
+	void GetCurrentTableViewsL();
+	
+	/**
+	 * Gets some commonly used settings from the Location and Modem Table Views and stores them
+	 * internally as these are not likely to change. 
+	 * If some of these settings are not found in the table view then a predefined default values are
+	 * used.
+	 */
+	void GetLocationModemSettingsL();
+	
+	/**
+	 * Closes the handle to CCommsDatabase and clears the view on the default modem specified 
+	 * in the current Connected Modem record. This method needs to be called after 
+	 * GetCurrentTableViewsL().
+	 */
+	void ResetCurrentTableViews();
+private:
+	/**
+	 * Constructor 
+	 */
+	CTsyConfig();
+	
+	/**
+	 * 2nd constructor
+	 * 
+	 */
+	void ConstructL();
+	
+	/*
+	 * Scan through the table for records containing Phonetsy.tsy
+	 * Stop at the first instance of such a record and return the id
+	 * 
+	 * @param aBearerId The Bearer ID in modem bearer table
+	 */
+ 	void GetModemBearerIdL(TUint32& aBearerId);  	
+ 	/*
+ 	 * Scan through the table for records containing MM.TSY
+ 	 * Stop at the first instance of such a record and return the id
+ 	 *
+ 	 * @param aBearerId The Bearer ID in modem bearer table
+ 	 * @param aLocationId 
+ 	 */
+ 	void GetLocationIdL(const TUint32& aBearerId, TUint32& aLocationId); 
+
+private:
+	/**
+	 * Store the modem configuration for connecting with AT Modem
+	 * 
+	 */
+	TCommConfigV01 iConfig;
+	
+	/**
+	 * The CommDB session
+	 * 
+	 * Own
+	 */
+	CMDBSession* iDbSession;
+	
+	/**
+	 * Store the IAP number for the selected modem
+	 * 
+	 */
+	TUint32 iModemBearer;
+	
+	/**
+	 * Location ID
+	 * 
+	 */
+	TUint32 iLocationId;
+	
+	/**
+	 * An integer value that indicates the time to pause after using the dial-ot code
+	 * 
+	 */
+	TInt iInterval;
+	
+	/**
+	 * Monitor speaker control setting flags
+	 * 
+	 */
+	RCall::TMonitorSpeakerControl iSpeakerSetting;
+	
+	/**
+	 * Monitor speaker volume control setting flags
+	 * 
+	 */
+	RCall::TMonitorSpeakerVolume iSpeakerVolume;
+	
+	/**
+	 * Wait for dial tone flags
+	 * 
+	 */
+	RCall::TWaitForDialTone iWaitForDialTonePref;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/unsolicitedeventmonitor.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,103 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CUnsolicitedEventMonitor which mornitor the arriving unsocilited event and then notify this to all observers.
+// 
+
+#ifndef UNSOLICITEDEVENTMONITOR_H_
+#define UNSOLICITEDEVENTMONITOR_H_
+
+//system include
+
+//user include
+#include "atcommandcontrolbase.h"
+#include "globalphonemanager.h"
+#include "atunsolicitedobserver.h"
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+/**
+ * This is a watcher class which mornitor the unsolicited events sent by baseband.
+ * Notify all the interesting observers when an unsolicited event has been received
+ */
+class CUnsolicitedEventMonitor : public CATCommandControlBase
+	{
+public:
+	/**
+	 * Factory function
+	 */
+	static CUnsolicitedEventMonitor* NewL(CGlobalPhonemanager& aPhoneglobals,
+						                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Factory function
+	 */
+	static CUnsolicitedEventMonitor* NewLC(CGlobalPhonemanager& aPhoneglobals,
+			                               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~CUnsolicitedEventMonitor();
+	
+	/**
+	 * Add the observer which is interested in geting the notification of incoming unsolicited event  
+	 */
+	void AddUnsolicitedObserver(const MLtsyUnsolicitedCommandObserver* aObserver);
+	
+	/**
+	 * Remove the unsolicited observer
+	 */
+	void RemoveUnsolicitedObserver(const MLtsyUnsolicitedCommandObserver* aObserver);
+	
+	/**
+	 * Notify all the observers that the unsoclicited event is received
+	 */
+	void NotifyEveryObserver();
+	
+	/**
+	 * Start to mornitor
+	 */
+	void StartUnsolicitedObserver();
+	
+	/**
+	 * Stop to mornitor
+	 */
+	void StopUnsolicitedObserver();
+	
+protected:
+	/**
+	 * The constructor
+	 */
+	CUnsolicitedEventMonitor(CGlobalPhonemanager& aPhoneglobals,
+			                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 2nd constructor
+	 */
+	void ConstructL();
+	
+public:
+	/**
+	 * Inherit from CAtCommandContolBase
+	 */
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	
+private:
+	/**
+	 * Own
+	 * Store a list of observers
+	 */
+	RPointerArray <MLtsyUnsolicitedCommandObserver> iArray;
+	};
+
+#endif /*UNSOLICITEDEVENTMONITOR_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/inc/unsolicitedparams.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,34 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This define the unsolicted event data
+// 
+
+#ifndef UNSOLICITEDPARAMS_H_
+#define UNSOLICITEDPARAMS_H_
+
+#include <e32std.h>
+
+class TUnsolicitedParams
+	{
+public:
+	TUnsolicitedParams();
+	void InitParams();
+public:
+	typedef TPckgBuf<TUnsolicitedParams> TUnsolicitedParamsPckgBuf;
+public:
+	TInt iEvent;
+	TInt iIdx;
+	};
+
+#endif /*UNSOLICITEDPARAMS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/activecommandstore.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,130 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CActiveCommandStore which store one and only one solicited active at command and a number of active 
+// unsolicited at commands
+// 
+
+#include "activecommandstore.h"
+#include "mslogger.h"
+
+//const TInt KLtsyActiveCommandStoreReserve = 5;
+
+CActiveCommandStore* CActiveCommandStore::NewL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::NewL()"));
+	CActiveCommandStore *self = CActiveCommandStore::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CActiveCommandStore* CActiveCommandStore::NewLC()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::NewLC()"));
+	CActiveCommandStore *self = new (ELeave) CActiveCommandStore;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CActiveCommandStore::~CActiveCommandStore()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::~CActiveCommandStore()"));
+	iArray.Close();
+	}
+
+CActiveCommandStore::CActiveCommandStore()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::CActiveCommandStore()"));
+	}
+
+void CActiveCommandStore::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::ConstructL()"));
+	iArray.Reset();
+	iArray.AppendL(NULL);
+	//iArray.ReserveL(KLtsyActiveCommandStoreReserve);
+	LOGTEXT2(_L8("[Ltsy] Active Store Count = %d"), iArray.Count());
+	}
+
+TInt CActiveCommandStore::AddUnsolicitedAtCommand(CAtCommandBase *aAtCommand)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::AddUnsolicitedAtCommand()"));
+	if (aAtCommand == NULL)
+		{
+		return KErrArgument;
+		}
+	
+	TInt nRes(KErrNone);
+	nRes = iArray.Append(aAtCommand);
+	LOGTEXT2(_L8("[Ltsy] Active Store Count = %d"), iArray.Count());
+	return nRes;	
+	}
+
+TInt CActiveCommandStore::AddSolicitedAtCommand(CAtCommandBase *aAtCommand)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::AddSolicitedAtCommand()"));
+	if (aAtCommand == NULL)
+		{
+		return KErrArgument;
+		}
+	
+	iArray[0] = aAtCommand;
+	LOGTEXT2(_L8("[Ltsy] Active Store Count = %d"), iArray.Count());
+	return KErrNone;	
+	}
+
+TInt CActiveCommandStore::RemoveActiveAtCommand(const CAtCommandBase *aAtCommand)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CActiveCommandStore::RemoveActiveAtCommand()"));
+	if (aAtCommand == NULL) 
+		{
+		return KErrArgument;
+		}
+	
+	TInt nFind = iArray.Find(aAtCommand);
+	if (nFind != KErrNotFound)
+		{
+		if (nFind == 0)
+			{
+			iArray[0] = NULL;
+			}
+		else
+			{
+			iArray.Remove(nFind);
+			}
+		return KErrNone;
+		}
+	else
+		{
+		return KErrNotFound;
+		}
+	}
+
+RPointerArray<CAtCommandBase>& CActiveCommandStore::GetActiveCommandArray()
+	{
+	return iArray;
+	}
+
+//End of file
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/asynchelperrequest.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,159 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CAsyncHelperRequest which is a helper request which callback to ctsy asynchronously 
+// 
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <rmmcustomapi.h> 
+#include "asynchelperrequest.h"
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "globalphonemanager.h"
+#include "tsyconfg.h"
+#include "mslogger.h"
+
+// Class CAsyncHelperRequest
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAsyncHelperRequest* CAsyncHelperRequest::NewL(CGlobalPhonemanager& aGloblePhone,
+		                           CCtsyDispatcherCallback& aCallBack,
+		                           TInt aPriority )
+	{
+	CAsyncHelperRequest* newTimer=new(ELeave) CAsyncHelperRequest(aGloblePhone,aCallBack,aPriority);
+	CleanupStack::PushL(newTimer);
+	newTimer->ConstructL();
+	CleanupStack::Pop();
+	return newTimer;
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::CAsyncHelperRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAsyncHelperRequest ::CAsyncHelperRequest(CGlobalPhonemanager& aGloblePhone,
+		                      CCtsyDispatcherCallback& aCallBack,
+		                      TInt aPriority)
+	: CTimer(aPriority),iCallBack(aCallBack),iGloblePhone(aGloblePhone)
+	{
+	CActiveScheduler::Add(this);
+	iRequestId = 0;
+	iReqArray.Reset();
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::~CAsyncHelperRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAsyncHelperRequest::~CAsyncHelperRequest()
+	{
+	Cancel();
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::SetRequestId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAsyncHelperRequest::SetRequestId(const TInt aIpc)
+	{
+	TInt count = iReqArray.Count();
+	if((count > 0)||IsActive())
+		{
+		iReqArray.Append(aIpc);
+		}
+	else
+		{
+		iRequestId = aIpc;
+		StartTimer();
+		}
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::RunL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAsyncHelperRequest::RunL()
+	{
+	switch(iRequestId)
+		{
+		case MLtsyDispatchPhoneGetNetworkMode::KLtsyDispatchPhoneGetNetworkModeApiId:
+			iCallBack.CallbackPhoneGetNetworkModeComp(KErrNone,RMobilePhone::ENetworkModeGsm);
+			break;
+		case MLtsyDispatchPhoneGetCurrentSystemNetworkModes::KLtsyDispatchPhoneGetCurrentSystemNetworkModesApiId:
+			iCallBack.CallbackPhoneGetCurrentSystemNetworkModesComp(KErrNone,RMmCustomAPI::KCapsNetworkModeGsm);
+			break;
+		case MLtsyDispatchPhoneGetNitzInfo::KLtsyDispatchPhoneGetNitzInfoApiId:
+			iCallBack.CallbackPhoneGetNitzInfoComp(KErrNone,iGloblePhone.iPhoneStatus.iMobilePhoneNITZ);
+			break;
+		case MLtsyDispatchPhoneSimRefreshRegister::KLtsyDispatchPhoneSimRefreshRegisterApiId:
+			iCallBack.CallbackPhoneSimRefreshRegisterComp(KErrNone);
+			break;
+		case MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams::KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId:
+			iCallBack.CallbackPacketServicesSetDefaultPdpContextParamsComp(KErrNone);
+			break;
+		case MLtsyDispatchPacketServicesGetStaticCapabilities::KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId:
+			TUint aCaps ;
+			aCaps=RPacketService::KCapsSetDefaultContextSupported;
+			aCaps|=RPacketService::KCapsMSClassSupported;
+			iCallBack.CallbackPacketServicesGetStaticCapabilitiesComp(KErrNone,aCaps);
+			break;
+		case MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists::KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId:
+			iCallBack.CallbackPacketServicesGetMaxNoMonitoredServiceListsComp(KErrNone,1);
+			break;
+		case MLtsyDispatchPacketServicesGetMaxNoActiveServices::KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId:
+			iCallBack.CallbackPacketServicesGetMaxNoActiveServicesComp(KErrNone,1);
+			break;
+		case MLtsyDispatchPacketServicesGetStatus::KLtsyDispatchPacketServicesGetStatusApiId:
+			iCallBack.CallbackPacketServicesGetStatusComp(KErrNone,iGloblePhone.iPhoneStatus.iPacketStatus,EFalse);
+			break;
+		case MLtsyDispatchPhoneGetDetectedNetworksCancel::KLtsyDispatchPhoneGetDetectedNetworksCancelApiId:
+			iCallBack.CallbackPhoneGetDetectedNetworksCancelComp(KErrNone);
+			break;
+		case MLtsyDispatchPhoneSelectNetworkCancel::KLtsyDispatchPhoneSelectNetworkCancelApiId:
+			iCallBack.CallbackPhoneSelectNetworkCancelComp(KErrGeneral);
+			break;
+		case MLtsyDispatchSmsSetMoSmsBearer::KLtsyDispatchSmsSetMoSmsBearerApiId:
+			iCallBack.CallbackSmsSetMoSmsBearerComp(KErrNotSupported);
+			break;	
+		case MLtsyDispatchPacketServicesGetPacketAttachMode::KLtsyDispatchPacketServicesGetPacketAttachModeApiId:
+		    iCallBack.CallbackPacketServicesGetPacketAttachModeComp(KErrNone, RPacketService::EAttachWhenNeeded);
+		    break;
+		default:
+			break;
+		}
+	TInt count = iReqArray.Count();
+	if(count > 0)
+		{
+		iRequestId = iReqArray[0];
+		iReqArray.Remove(0);
+		StartTimer();
+		}
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::StartTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAsyncHelperRequest::StartTimer(const TTimeIntervalMicroSeconds32 aTimeout)
+	{
+	if (IsActive())
+		Cancel();
+	After(aTimeout);
+	}
+// ---------------------------------------------------------------------------
+// CAsyncHelperRequest::StopTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAsyncHelperRequest::StopTimer()
+	{
+	Cancel();
+	}
+
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/atcommandbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,333 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atcommandbase.cpp
+// This contains CAtCommandBase which is the base class for AT command
+// 
+
+// user include
+#include "mslogger.h"
+#include "atcommandbase.h"
+#include "commengine.h"
+#include "atmanager.h"
+#include "stringparser.h"
+#include "atcommandexecuteobserver.h"
+#include "activecommandstore.h"
+#include "atswitchonlinemode.h"
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::~CAtCommandBase
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtCommandBase::~CAtCommandBase()
+	{
+	iExpectingArray.Close();
+	
+	delete iParser;
+	iParser = NULL;
+	
+	if(iATSwitchOnLineMode)
+		{
+		delete iATSwitchOnLineMode;
+		iATSwitchOnLineMode = NULL;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::AtType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TLtsyATCommandType CAtCommandBase::AtType()
+	{
+	return iAtType;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::CAtCommandBase
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtCommandBase::CAtCommandBase(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                               :CRequestBase(aGloblePhone),
+                               iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+					  
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtCommandBase::CAtCommandBase()"));
+	
+	iAtType = ELtsyAt_User_NotUse;
+	
+	iWriteTimeOut = KLtsyDefaultWriteTimeOut;
+	iReadTimeOut = KLtsyDefaultReadTimeOut;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtCommandBase::ConstructL()
+	{
+	iParser = new (ELeave) CRespondBufParser;
+	iAtCommandObserver = NULL;
+	//Add OK and ERROR expecting string
+	iExpectingArray.AppendL(KLtsyOkString());
+	iExpectingArray.AppendL(KLtsyErrorString());
+	iExpectingArray.AppendL(KLtsyCmeErrorString());
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::AddExpectStringL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtCommandBase::AddExpectStringL(const TDesC8& aExpectStr)
+	{
+	iExpectingArray.AppendL(aExpectStr);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::RemoveAllExpectString
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::RemoveAllExpectString()
+	{
+	iExpectingArray.Reset();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::RemoveExpectString
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::RemoveExpectString(const TDesC8& aExpectStr)
+	{
+	TBool found(ETrue);
+	TInt count = iExpectingArray.Count();
+	
+	for (TInt n = 0; found && n < count; n++)
+		{
+		if (iExpectingArray[n].Compare(aExpectStr) == 0)
+			{
+			iExpectingArray.Remove(n);
+			iExpectingArray.Compress();
+			found = EFalse;
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::MatchExpectString
+// other items were commented in a header 
+// ---------------------------------------------------------------------------		
+TBool CAtCommandBase::MatchExpectString(const TDesC8& aReadLine)
+	{
+	TInt count = iExpectingArray.Count();
+	LOGTEXT2(_L8("[Ltsy] count = %d"), count);
+	for (TInt n = 0; n < count; n++)
+		{
+		if (aReadLine.Match(iExpectingArray[n]) == 0)
+			{
+			return ETrue;
+			}
+		}
+	if(aReadLine.Length()< KLtsyGenericBufferSize)
+		{
+		iNoMatchedLastLine.Copy(aReadLine);
+		}
+	return EFalse;
+	}
+// ---------------------------------------------------------------------------
+// CAtCommandBase::SetAtCommandObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::SetAtCommandObserver(MAtCommandExecuteObserver* aAtCommandObserver)
+	{
+	iAtCommandObserver = aAtCommandObserver;
+	}
+// ---------------------------------------------------------------------------
+// CAtCommandBase::RemoveAtCommandObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::RemoveAtCommandObserver()
+	{
+	iAtCommandObserver = NULL;
+	}
+// ---------------------------------------------------------------------------
+// CAtCommandBase::GenericEventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::GenericEventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtCommandBase::GenericEventSignal()"));
+	if(iAtCommandObserver)
+		{
+		iAtCommandObserver->AtCommandExecuteComplete(aEventSource, aStatus);
+		}
+	else
+		{
+		EventSignal(aEventSource, aStatus);
+		}
+	if((aEventSource == EWriteCompletion) && (aStatus == KErrNone))
+	    {
+	    StartTimer(iReadTimeOut);
+		}
+	LOGTEXT(_L8("[Ltsy] End CAtCommandBase::GenericEventSignal()"));
+	}
+// ---------------------------------------------------------------------------
+// CAtCommandBase::Write
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::Write()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtCommandBase::Write()"));
+	if(iPhoneGlobals.iPhoneStatus.iMode==RPhone::EModeOnlineData)
+		{
+		if(!iATSwitchOnLineMode)
+			{
+			TRAPD(ret,iATSwitchOnLineMode = CATSwitchOnLineMode::NewL(iPhoneGlobals,iCtsyDispatcherCallback));
+			if(ret!=KErrNone)
+				{
+				EventSignal(EWriteCompletion,ret);
+				return;
+				}
+			}
+		iATSwitchOnLineMode->StartSwitchOnLineMode(this,iAtCommandObserver);
+		}
+	else
+		{
+		ClearBuffer();
+		iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+		iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);	
+		StartTimer(iWriteTimeOut);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtCommandBase::SetTimeOut
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::SetTimeOut(TInt aWriteTimeOut, TInt aReadTimeOut)
+	{
+	iWriteTimeOut = aWriteTimeOut;
+	iReadTimeOut = aReadTimeOut;
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::SetTimeOut
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::StartTimer(const TInt aTimeOut)
+	{
+	iPhoneGlobals.iCommEngine->StartTimer(aTimeOut);
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::StopTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::StopTimer()
+	{
+	iPhoneGlobals.iCommEngine->StopTimer();
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::Buffer
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+TPtrC8 CAtCommandBase::Buffer() const
+	{
+	return iPhoneGlobals.iCommEngine->GetStringParse()->Buffer();
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::CurrentLine
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+TPtrC8 CAtCommandBase::CurrentLine() const
+	{
+	return iPhoneGlobals.iCommEngine->GetStringParse()->CurrentLine();
+	}
+//---------------------------------------------------------------------------
+// CAtCommandBase::PrecedingLine
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+TPtrC8 CAtCommandBase::PrecedingLine() const
+	{
+	return iNoMatchedLastLine;
+	}
+//---------------------------------------------------------------------------
+// CAtCommandBase::ClearBuffer
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::ClearBuffer()
+	{
+	iPhoneGlobals.iCommEngine->GetStringParse()->ClearBuffer();
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::ClearCurrentLine
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::ClearCurrentLine()
+	{
+	iPhoneGlobals.iCommEngine->GetStringParse()->ClearCurrentLine();	
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::Complete()
+    {
+    (iPhoneGlobals.iAtManager->GetActiveCommandStore())->RemoveActiveAtCommand(this);	
+	StopTimer();
+	ClearBuffer();
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::CancelCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::CancelCommand()
+	{
+	
+	}
+
+//---------------------------------------------------------------------------
+// CAtCommandBase::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CAtCommandBase::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtCommandBase::ParseResponseL()"));
+	}
+
+void CAtCommandBase::EventSignal(TAtEventSource /*aEventSource*/, TInt /*aStatus*/)
+	{
+	
+	}
+//---------------------------------------------------------------------------
+// CAtCommandBase::AddUnsolicitedAtCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::AddUnsolicitedAtCommand()
+	{
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->AddUnsolicitedAtCommand(this);
+	}
+//---------------------------------------------------------------------------
+// CAtCommandBase::RemoveAtCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtCommandBase::RemoveAtCommand()
+	{
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->RemoveActiveAtCommand(this);
+	}
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/atcommandcontrolbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,136 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATCommandControlBase which is composite class of a number classes
+// 
+
+#include "mslogger.h"
+#include "atcommandbase.h"
+#include "atcommandcontrolbase.h"
+
+
+CATCommandControlBase::CATCommandControlBase(CGlobalPhonemanager& aGloblePhone, 
+                                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                             :CRequestBase(aGloblePhone),
+                                             iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+//	LOGTEXT(_L8("[Ltsy] Starting CATCommandControlBase::CATCommandControlBase()"));
+	iIsDel = EAutoDelete;
+	}
+
+CATCommandControlBase::~CATCommandControlBase()
+	{
+//	LOGTEXT(_L8("[Ltsy] Starting CATCommandControlBase::~CATCommandControlBase()"));
+	if (EAutoDelete == iIsDel)
+		{
+		CleanAndDeleteAllAtCommands();
+		}
+	
+	iArray.Close();
+	}
+
+TInt CATCommandControlBase::AddAtCommand(const CAtCommandBase* aAtCommand)
+	{
+//	LOGTEXT(_L8("[Ltsy] Starting CATCommandControlBase::AddAtCommand()"));
+	if (NULL == aAtCommand)
+		{
+		return KErrArgument;
+		}
+	
+	TInt nRes = iArray.Append(aAtCommand);
+	return nRes;
+	}
+
+void CATCommandControlBase::RemoveAtCommand(const CAtCommandBase* aAtCommand)
+	{	
+	if (NULL != aAtCommand)
+		{
+		TInt nFind = iArray.Find(aAtCommand);
+		if (nFind != KErrNotFound)
+			{
+			iArray.Remove(nFind);
+			iArray.Compress();
+			}
+		}
+	}
+
+void CATCommandControlBase::RemoveAtCommandByAtType(TLtsyATCommandType aType)
+	{
+	TBool bFlag(ETrue);
+	
+	for (TInt n = 0; bFlag && n < iArray.Count(); n++)
+		{
+		if (iArray[n]->AtType() == aType)
+			{
+			iArray.Remove(n);
+			iArray.Compress();
+			bFlag = EFalse;
+			}
+		}
+	}
+
+CAtCommandBase& CATCommandControlBase::GetAtCommandByAtTypeL(TLtsyATCommandType aType)
+	{
+	TBool bFlag(ETrue);
+	CAtCommandBase *cAtBase(NULL);
+	
+	for (TInt n = 0; bFlag && n < iArray.Count(); n++)
+		{
+		if (iArray[n]->AtType() == aType)
+			{
+			cAtBase = iArray[n];
+			}
+		}
+	
+	User::LeaveIfNull(cAtBase);
+	
+	return (*cAtBase);
+	}
+
+
+void CATCommandControlBase::SetIsAutoDelete(TAutoDeleteAtCommand aIsDel)
+	{
+	iIsDel = aIsDel;
+	}
+
+CATCommandControlBase::TAutoDeleteAtCommand CATCommandControlBase::GetIsAutoDelete()
+	{
+	return iIsDel;
+	}
+
+void CATCommandControlBase::CleanAllAtCommands()
+	{
+	iArray.Reset();
+	}
+
+void CATCommandControlBase::CleanAndDeleteAllAtCommands()
+	{
+	iArray.ResetAndDestroy();
+	}
+// End of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/athelpercommand.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,123 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATHelperCommand which is composite class of a number classes
+// 
+
+#include "athelpercommand.h"
+#include "mslogger.h"
+
+// Class CATHelperCommand
+// ---------------------------------------------------------------------------
+// CATHelperCommand::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATHelperCommand* CATHelperCommand::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATHelperCommand* self = new(ELeave) CATHelperCommand(aGloblePhone,
+			                                                aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::CATHelperCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATHelperCommand::CATHelperCommand(CGlobalPhonemanager& aGloblePhone, 
+	                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::~CATHelperCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATHelperCommand::~CATHelperCommand()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::ExecuteCommand()
+	{
+	iTxBuffer.Copy(iATBuffer);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::CancelCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::CancelCommand()
+	{	
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATHelperCommand::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::SetAtCommandString
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::SetAtCommandString(const TDesC8& aATString)
+	{
+	iATBuffer.Copy(aATString);
+	}
+// ---------------------------------------------------------------------------
+// CATHelperCommand::StartATType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATHelperCommand::SetATType(TLtsyATCommandType aATType)
+	{
+	iAtType = aATType;
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/atmanager.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,174 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+// use include
+#include "atmanager.h"
+#include "activecommandstore.h"
+#include "mslogger.h"
+
+// ---------------------------------------------------------------------------
+// CAtManager::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+CAtManager* CAtManager::NewL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::NewL()"));
+	CAtManager *self = CAtManager::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+CAtManager* CAtManager::NewLC()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::NewLC()"));
+	CAtManager *self = new (ELeave) CAtManager;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::~CAtManager
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+CAtManager::~CAtManager()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::~CAtManager()"));
+	
+	delete iActiveCommandStore;
+	iActiveCommandStore = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::CAtManager
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+CAtManager::CAtManager()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::CAtManager()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtManager::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::ConstructL()"));
+	iActiveCommandStore = CActiveCommandStore::NewL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::SetSolicitedAtCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtManager::SetSolicitedAtCommand(CAtCommandBase* aSolicitedCommand)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::SetSolicitedAtCommand()"));
+	iSolicitedCommand = aSolicitedCommand;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::GetActiveCommandStore
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+CActiveCommandStore* CAtManager::GetActiveCommandStore() const
+	{
+	return iActiveCommandStore;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::ReadOrWriteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+void CAtManager::ReadOrWriteComplete(TAtEventSource aEvent, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::AtCommandReadOrWriteComplete()"));
+	LOGTEXT3(_L8("[Ltsy] aEvent = %d, aStatus = %d"), aEvent, aStatus);
+	
+    if (aEvent == EWriteCompletion)
+		{
+		if (iSolicitedCommand != NULL)
+			{
+			if(aStatus == KErrNone)
+				{
+				// add this active AT Command in the first place of the store
+				iActiveCommandStore->AddSolicitedAtCommand(iSolicitedCommand);
+				}
+			else
+				{
+				iSolicitedCommand = NULL;
+				}
+			
+			iSolicitedCommand->GenericEventSignal(aEvent, aStatus);
+			}
+		}
+    else if (aEvent == EReadCompletion)
+		{
+		if (aStatus != KErrNone)
+			{
+			// check if there is active solicited AT command in the AT active command store
+			if((iActiveCommandStore->GetActiveCommandArray())[0] != NULL)
+	          {
+	          iSolicitedCommand->GenericEventSignal(aEvent, aStatus);
+	          }
+			
+			iSolicitedCommand = NULL;
+			}
+		}
+    else if(aEvent == ETimeoutCompletion)
+    	{
+		if(iSolicitedCommand)
+			{
+			iSolicitedCommand->GenericEventSignal(ETimeoutCompletion, aStatus);
+			iSolicitedCommand = NULL;
+			}
+    	}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtManager::NotifyOneLineFoundL
+// other items were commented in a header
+// ---------------------------------------------------------------------------	
+TBool CAtManager::NotifyOneLineFoundL(TInt aStatus, const TDesC8& aLineBuf)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CAtManager::NotifyOneLineFoundL()"));
+		
+	RPointerArray<CAtCommandBase>& atCommands = iActiveCommandStore->GetActiveCommandArray();
+	TInt count = atCommands.Count();
+	LOGTEXT2(_L8("[Ltsy] count = %d"), count);
+	
+	TBool atCommandFound(EFalse);
+	
+	for (TInt n = 0; !atCommandFound && n < count; n++)
+		{
+		CAtCommandBase* atCommand = atCommands[n];
+		if ((atCommand != NULL) && atCommand->MatchExpectString(aLineBuf))
+			{
+			atCommandFound = ETrue;
+			atCommand->ParseResponseL(aLineBuf);
+			atCommand->GenericEventSignal(EReadCompletion, aStatus);
+			}
+		}
+	LOGTEXT(_L8("[Ltsy] End CAtManager::NotifyOneLineFoundL()"));
+	return ETrue;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/atswitchonlinemode.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,227 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATSwitchOnLineMode which switch to online mode
+// 
+
+#include "atswitchonlinemode.h"
+#include "mslogger.h"
+#include "commengine.h"
+#include "tsyconfg.h"
+
+// Class CATSwitchOnLineMode
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSwitchOnLineMode* CATSwitchOnLineMode::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATSwitchOnLineMode* self = new(ELeave) CATSwitchOnLineMode(aGloblePhone,
+			                                                    aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::CATSwitchOnLineMode
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSwitchOnLineMode::CATSwitchOnLineMode(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	RemoveAllExpectString();
+	AddExpectStringL(KLtsyNoCarrierString());
+	iWhichTimer = ETimerNone;
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::~CATSwitchOnLineMode
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSwitchOnLineMode::~CATSwitchOnLineMode()
+	{
+	if(iCallbackTimer)
+		{
+		iCallbackTimer->Cancel();
+		delete iCallbackTimer;
+		iCallbackTimer = NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::ExecuteCommand()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if(CurrentLine().Match(KLtsyNoCarrierString) == 0)
+		{
+		iError = KErrNone;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::StartSwitchOnLineModeL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::StartSwitchOnLineMode(CAtCommandBase* aAtCommandBase,
+		                  MAtCommandExecuteObserver* aAtCommandObserver)
+	{
+	iAtCommandBase = aAtCommandBase;
+	iAtCommandObserver = aAtCommandObserver;
+	RemoveAtCommandObserver();
+	iPhoneGlobals.iCommEngine->CommCancel();		// This required to avoid a panic in C32 when we call iIo->ConfigurePort
+	TCommConfig configPckg;
+	TInt ret = KErrNone;
+	ret = iPhoneGlobals.iConfiguration->PortConfig(configPckg,EConfigTypeHangUp);	
+	if (ret==KErrNone)
+		ret = iPhoneGlobals.iCommEngine->ConfigurePort(configPckg);		
+	if (ret!=KErrNone)
+		{
+		iAtCommandBase->EventSignal(EWriteCompletion,ret);
+		}
+	iPhoneGlobals.iCommEngine->DropDtr();
+	iWhichTimer = ETimerDrop;
+	StartTimer(500000L);
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		aStatus = iError;
+		}
+	CAtCommandBase::Complete();
+	if(KErrNone ==aStatus)
+		{
+		//iPhoneGlobals.iPhoneStatus.iMode = RPhone::EModeOnlineCommand;
+		Disable();
+		StartTimer(1000000L);
+		iWhichTimer = ETimerWait;
+		}
+	else
+		{
+		Disable();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iAtCommandBase->EventSignal(EWriteCompletion,KErrNotReady);
+		}
+	
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::Enable
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::Enable()
+	{
+	AddUnsolicitedAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::Disable
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::Disable()
+	{
+	RemoveAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSwitchOnLineMode::StartTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSwitchOnLineMode::StartTimer(const TInt aTimeout)
+	{
+	if (iCallbackTimer->IsActive())
+		iCallbackTimer->Cancel();
+	iCallbackTimer->After(aTimeout);
+	}
+/**
+ * 
+ * 
+ */
+void CATSwitchOnLineMode::TimerRun(TInt aError)
+    {
+	if(aError == KErrNone)
+	    {
+		switch(iWhichTimer)
+			{
+			case ETimerDrop:
+			    LOGTEXT(_L8("[Ltsy] CATSwitchOnLineMode::ETimerDrop time out."));
+				iPhoneGlobals.iCommEngine->RaiseDTR();
+				iPhoneGlobals.iPhoneStatus.iMode = RPhone::EModeOnlineCommand;
+				iPhoneGlobals.iEventSignalActive = ETrue;
+				iWhichTimer = ETimerRaise;
+				StartTimer(1000000L);
+				break;
+			case ETimerRaise:
+                LOGTEXT(_L8("[Ltsy] CATSwitchOnLineMode::ETimerRaise time out."));
+				iPhoneGlobals.iCommEngine->ResetBuffers();
+				iWhichTimer = ETimerReset;
+				StartTimer(1000000L);
+				break;
+			case ETimerReset:
+                LOGTEXT(_L8("[Ltsy] CATSwitchOnLineMode::ETimerReset time out."));
+				ClearBuffer();
+				iPhoneGlobals.iCommEngine->Read();
+				iWhichTimer = ETimerRead;
+				Enable();
+				StartTimer(1000000L);
+				break;
+			case ETimerRead:
+                LOGTEXT(_L8("[Ltsy] CATSwitchOnLineMode::ETimerRead time out."));
+				StartTimer(1000000L);
+				iWhichTimer = ETimerWait;
+				break;
+			case ETimerWait:
+                LOGTEXT(_L8("[Ltsy] CATSwitchOnLineMode::ETimerWait time out."));
+			    if(iAtCommandObserver)
+			    	{
+			    	SetAtCommandObserver(iAtCommandObserver);
+			    	}
+			    Disable();
+			    iAtCommandBase->StartRequest(); 
+			    iWhichTimer = ETimerNone;
+				break;
+			default:
+				Disable();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iAtCommandBase->EventSignal(EWriteCompletion,KErrNotReady);
+				break;
+			}
+		}
+	else
+		{
+		Disable();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iAtCommandBase->EventSignal(EWriteCompletion,KErrNotReady);
+		}
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/atunsolicited.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,157 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CATUnsolicited
+// 
+
+//system include
+
+//user include
+#include "atunsolicited.h"
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATUnsolicited* CATUnsolicited::NewL(CGlobalPhonemanager& aGloblePhone,
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATUnsolicited* self = CATUnsolicited::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATUnsolicited* CATUnsolicited::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATUnsolicited* self = new (ELeave) CATUnsolicited(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::~CATUnsolicited
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATUnsolicited::~CATUnsolicited()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATUnsolicited::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	RemoveAllExpectString();
+	AddExpectStringL(KLtsyGeneralIndMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::CATUnsolicited
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATUnsolicited::CATUnsolicited(CGlobalPhonemanager& aGloblePhone,
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+							   :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	iAtType = ELtsyAT_General_WIND;
+	iResult = KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::GetParserResult
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATUnsolicited::GetParserResult() const
+	{
+	return iResult;
+	}
+
+// ---------------------------------------------------------------------------
+//  CATUnsolicited::GetUnsolicitedParams
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+const TDesC8& CATUnsolicited::GetUnsolicitedParams() const
+	{
+	return iPckgBuf;
+	}
+
+// ---------------------------------------------------------------------------
+// CATUnsolicited::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATUnsolicited::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	iResult = KErrNone;
+	
+	RArray<TPtrC8> rArray;
+	CleanupClosePushL(rArray);
+	
+	iParser->ParseRespondedBuffer(rArray, aResponseBuf);
+	
+	TUnsolicitedParams& tParams(iPckgBuf());
+	tParams.InitParams();
+	
+	TInt nCount = rArray.Count();
+	if (nCount <= 1)
+		{
+		iResult = KErrGeneral;
+		CleanupStack::PopAndDestroy(1);
+		return;
+		}
+	
+	if (nCount >= 2)
+		{
+		TInt tVal(0);
+		TLex8 tLex(rArray[1]);
+		TInt nRes = tLex.Val(tVal);
+		if (nRes == KErrNone)
+			{
+			tParams.iEvent = tVal;
+			}
+		else
+			{
+			iResult = nRes;
+			CleanupStack::PopAndDestroy(1);
+			return;
+			}
+		}
+	
+	if (nCount == 3 && tParams.iEvent != 10 && tParams.iEvent != 11)
+		{
+		TInt tVal(0);
+		TLex8 tLex(rArray[2]);
+		TInt nRes = tLex.Val(tVal);
+		if (nRes == KErrNone)
+			{
+			tParams.iIdx = tVal;
+			}
+		else
+			{
+			iResult = nRes;
+			CleanupStack::PopAndDestroy(1);	
+			return;
+			}
+		}
+	CleanupStack::PopAndDestroy(1);	
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/globalphonemanager.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,247 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file globlephonemanager.cpp
+// This contains CGlobalPhonemanager which manage the global phone status and call info manager.
+// 
+
+// user include
+#include "globalphonemanager.h"
+#include "atmanager.h"
+#include "commengine.h"
+#include "tsyconfg.h"
+#include "mslogger.h"
+#include "requestbase.h"
+#include "ltsycallinformationmanager.h"
+#include "athangupcommandrecords.h"
+
+#if defined (__WINS__)
+_LIT(KPDDName,"ECDRV");
+_LIT(KLDDName,"ECOMM");
+#else
+_LIT(KPDDName,"EUART1");
+#if defined (PDD2_NAME)
+_LIT(KPDD2Name,"EUART2");
+#endif
+_LIT(KLDDName,"ECOMM");
+#endif
+
+//define constant value
+const TInt KLtsyDefaultSecondsToWaitForCarrier=40;
+const TInt KLtsyCommReadPriority = 10;
+const TInt KLtsyCommWritePriority = 20;
+const TInt KLtsyChatBufferSize = 400;
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGlobalPhonemanager* CGlobalPhonemanager::NewL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::NewL()"));
+	
+	CGlobalPhonemanager *self = CGlobalPhonemanager::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGlobalPhonemanager* CGlobalPhonemanager::NewLC()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::NewLC()"));
+	
+	CGlobalPhonemanager *self = new (ELeave) CGlobalPhonemanager;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::~CGlobalPhonemanager
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGlobalPhonemanager::~CGlobalPhonemanager()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::~CGlobalPhonemanager()"));
+
+	delete iConfiguration;
+	delete iAtManager;
+	delete iCommEngine;
+	delete iActiveIpcRequest;
+	iContextList.ResetAndDestroy();
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::CGlobalPhonemanager
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGlobalPhonemanager::CGlobalPhonemanager()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::CGlobalPhonemanager()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGlobalPhonemanager::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::ConstructL()"));
+	
+	InitL();
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::InitL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGlobalPhonemanager::InitL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CGlobalPhonemanager::InitL()"));
+	
+	// initialize the status of phone
+	iPhoneStatus.iLocalNetworkSel.iMethod = RMobilePhone::ENetworkSelectionUnknown;
+	iPhoneStatus.iModemDetected = RPhone::EDetectedUnknown;
+	iPhoneStatus.iDataAndFaxFlags = RPhone::KCapsUnknown;
+	iPhoneStatus.iWaitForCarrierTime = KLtsyDefaultSecondsToWaitForCarrier;
+	iPhoneStatus.iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
+	iPhoneStatus.iPortAccess = EPortAccessAllowed;
+	iPhoneStatus.iMode = RPhone::EModeUnknown;
+	iPhoneStatus.iDataAndFaxFlags = RPhone::KCapsUnknown;
+	iPhoneStatus.iInitStatus = EPhoneNotInitialised;
+	iPhoneStatus.iGprsMaxNumContexts = 1;
+	iPhoneStatus.iMode=RPhone::EModeOnlineCommand;
+	
+	//Create the call information manager
+	iCallInfoManager = CLtsyCallInformationManager::NewL();
+	
+	// load physical device driver
+	TInt r = User::LoadPhysicalDevice(KPDDName);
+	if (r != KErrNone && r != KErrAlreadyExists)
+		{
+		User::Leave(r);
+		}
+	
+	// load logical device driver
+	r = User::LoadLogicalDevice(KLDDName);
+	if (r != KErrNone && r != KErrAlreadyExists)
+		{
+		User::Leave(r);
+		}
+		
+	// create the AT Manager
+	iAtManager = CAtManager::NewL();
+	
+	// create the Comm Engine which handle 
+	iCommEngine = CCommEngine::NewL(KLtsyChatBufferSize,KLtsyCommReadPriority,KLtsyCommWritePriority,iPhoneStatus.iPortAccess);
+	
+	// Set Comm Engine observer		
+	iCommEngine->SetCommEngineObserver(iAtManager);
+	iCommEngine->SetCommReadLineNotify(iAtManager);
+	
+	// create a CommDB configration helper class
+	iConfiguration = CTsyConfig::NewL();
+	
+	TFileName csy;
+	TName port;	
+	LOGTEXT(_L8("[Ltsy] Getting CSY from CommDB"));
+	User::LeaveIfError(iConfiguration->ConfigModemStringL(TPtrC(KCDTypeNameCsyName),csy));
+
+	LOGTEXT(_L8("[Ltsy] Getting PORT from CommDB"));
+	User::LeaveIfError(iConfiguration->ConfigModemStringL(TPtrC(KCDTypeNamePortName),port));
+	
+	// Open serial port by shared mode
+	User::LeaveIfError(iCommEngine->CommOpen(csy, port, ECommShared));
+	
+	// Configure Port
+	TCommConfig tConfigPckg;
+	
+	// Get the port configuration
+	LOGTEXT(_L8("[Ltsy] Setting Port Config"));	
+	User::LeaveIfError(iConfiguration->PortConfig(tConfigPckg,EConfigTypeInit));
+
+	LOGTEXT(_L8("[Ltsy] CommEngine Configure Port"));
+	User::LeaveIfError(iCommEngine->ConfigurePort(tConfigPckg));
+	
+	// issue reading from baseband
+	iCommEngine->Read();
+	
+	// Reset the context list
+	iContextList.Reset();
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::CheckGlobalPhoneStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CGlobalPhonemanager::CheckGlobalPhoneStatus()
+	{
+	if(EPhoneInitialised == iPhoneStatus.iInitStatus)
+		{
+		if (iEventSignalActive)
+			{
+			return  KErrInUse;
+			}
+		else
+			{
+			DeleteLastActiveRequest();
+			return KErrNone;
+			}
+		}
+	else
+		{
+		return iPhoneStatus.iInitStatus;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::SetActiveRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGlobalPhonemanager::SetActiveRequest(CRequestBase* aCurActiveRequest)
+	{
+	iActiveIpcRequest = aCurActiveRequest;
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::DeleteLastActiveRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGlobalPhonemanager::DeleteLastActiveRequest()
+	{
+	delete iActiveIpcRequest;
+	iActiveIpcRequest = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::GetCallInfoManager
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CLtsyCallInformationManager& CGlobalPhonemanager::GetCallInfoManager()
+	{
+	return (*iCallInfoManager);
+	}
+
+// ---------------------------------------------------------------------------
+// CGlobalPhonemanager::CurrentActiveRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CRequestBase* CGlobalPhonemanager::CurrentActiveRequest()
+    {
+    return iActiveIpcRequest;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/ltsycallinformation.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,182 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains TLtsyCallInformation which store baseband related call information
+// 
+
+//system include
+
+//user include
+#include "ltsycallinformation.h"
+#include "ltsycommondefine.h"
+#include "mslogger.h"
+
+TLtsyCallInformation::TLtsyCallInformation()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::TLtsyCallInformation()"));
+	
+	iCallId = KLtsyErrorCallId;
+	iUsedInfo = ENotUsed;
+	iDirection = EUnknownDirection;
+	iCallState = EUnknownState;
+	iCallMode = EUnKnowCall;
+	iIsConference = EUnknownIsConference;
+	iTelNum = KNullDesC8;
+	iAddressType = -1;
+	iMobileName = KNullDesC8;
+	iIsEmergencyCall = EFalse;
+	}
+
+void TLtsyCallInformation::SetCallId(TInt aCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetCallId()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aCallId = %d"), aCallId);
+	
+	ASSERT((aCallId >= KLtsyMinCallId) && (aCallId <= KLtsyMaxCallId));
+	
+	iCallId = aCallId;
+	}
+
+TInt TLtsyCallInformation::GetCallId() const
+	{
+	return iCallId;
+	}
+
+void TLtsyCallInformation::SetCallIdIsUsedInfo(TCallIdUsedInfo aUsedInfo)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetCallId()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aUsedInfo = %d"), aUsedInfo);
+	
+	iUsedInfo = aUsedInfo;
+	}
+
+TLtsyCallInformation::TCallIdUsedInfo TLtsyCallInformation::GetCallIdIsUsedInfo() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetCallIdIsUsedInfo()"));
+	
+	return iUsedInfo;
+	}
+
+void TLtsyCallInformation::SetCallDirection(TDirectionCall aDirection)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetCallDirection()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aDirection = %d"), aDirection);
+	
+	iDirection = aDirection;
+	}
+
+TLtsyCallInformation::TDirectionCall TLtsyCallInformation::GetCallDirection() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetCallDirection()"));
+	
+	return iDirection;
+	}
+
+void TLtsyCallInformation::SetCallState(TCallState aCallState)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetCallState()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aCallState = %d"), aCallState);
+	
+	iCallState = aCallState; 
+	}
+
+TLtsyCallInformation::TCallState TLtsyCallInformation::GetCallState() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetCallState()"));
+	
+	return iCallState;
+	}
+
+void TLtsyCallInformation::SetCallMode(TCallMode aCallMode)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetCallMode()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aCallMode = %d"), aCallMode);
+	
+	iCallMode = aCallMode;
+	}
+
+TLtsyCallInformation::TCallMode TLtsyCallInformation::GetCallMode() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetCallMode()"));
+	
+	return iCallMode;
+	}
+
+void TLtsyCallInformation::SetConferenceCall(TConferenceCall aConferenceCall)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetConferenceCall()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aConferenceCall = %d"), aConferenceCall);
+	
+	iIsConference = aConferenceCall;
+	}
+
+TLtsyCallInformation::TConferenceCall TLtsyCallInformation::GetConferenceCall() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetConferenceCall()"));
+	
+	return iIsConference;
+	}
+
+void TLtsyCallInformation::SetMobileTelNum(const TDesC8& aTelNum)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetMobileTelNum()"));
+	
+	iTelNum.Copy(aTelNum.Left(iTelNum.MaxLength()));
+	}
+
+const TDesC8& TLtsyCallInformation::GetMobileTelNum() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetMobileTelNum()"));
+	
+	return iTelNum;
+	}
+
+void TLtsyCallInformation::SetAddressType(TInt aAddressType)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetAddressType()"));
+	
+	iAddressType = aAddressType;
+	}
+
+TInt TLtsyCallInformation::GetAddressType() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetAddressType()"));
+	
+	return iAddressType;
+	}
+
+void TLtsyCallInformation::SetMobileName(const TDesC8& aMobileName)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::SetMobileName()"));
+	
+	iMobileName.Copy(aMobileName.Left(iMobileName.MaxLength()));
+	}
+
+const TDesC8& TLtsyCallInformation::GetMobileName() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting TLtsyCallInformation::GetMobileName()"));
+	
+	return iMobileName;
+	}
+
+void TLtsyCallInformation::SetEmergencyCallFlag(TBool aIsEmergency)
+	{
+	iIsEmergencyCall = aIsEmergency;
+	}
+
+TBool TLtsyCallInformation::GetEmergencyCallFlag() const
+	{
+	return iIsEmergencyCall;
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/ltsycallinformationmanager.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,211 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CLtsyCallInformationManager which manager call information
+// 
+
+//system include
+
+//user include
+#include "ltsycallinformationmanager.h"
+#include "ltsycommondefine.h"
+#include "athangupcommandrecords.h"
+#include "mslogger.h"
+
+CLtsyCallInformationManager* CLtsyCallInformationManager::NewL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::NewL()"));
+	
+	CLtsyCallInformationManager* self = CLtsyCallInformationManager::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CLtsyCallInformationManager* CLtsyCallInformationManager::NewLC()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::NewLC()"));
+	
+	CLtsyCallInformationManager* self = new (ELeave) CLtsyCallInformationManager;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CLtsyCallInformationManager::~CLtsyCallInformationManager()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::~CLtsyCallInformationManager()"));
+	
+	delete iHangupCommandRecords;
+	}
+
+CLtsyCallInformationManager::CLtsyCallInformationManager()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::CLtsyCallInformationManager()"));
+	//Init call id
+	iCallInfo[1].SetCallId(1);
+	iCallInfo[2].SetCallId(2);
+	iCallInfo[3].SetCallId(3);
+	iCallInfo[4].SetCallId(4);
+	iCallInfo[5].SetCallId(5);
+	iCallInfo[6].SetCallId(6);
+	iCallInfo[7].SetCallId(7);
+	
+	//Init incoming call flag
+	iIncomingCallFlag = EFalse;
+	}
+
+void CLtsyCallInformationManager::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::ConstructL()"));
+	
+	//Create hang up call command records
+	iHangupCommandRecords = CATHangupCommandRecords::NewL();	
+	}
+
+void CLtsyCallInformationManager::ResetCallInformationByCallId(TInt aCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::ResetCallInformationByCallId()"));
+	
+	ASSERT((aCallId >= KLtsyMinCallId) && (aCallId <= KLtsyMaxCallId));
+	
+	iCallInfo[aCallId].SetCallIdIsUsedInfo(TLtsyCallInformation::ENotUsed);
+	iCallInfo[aCallId].SetCallDirection(TLtsyCallInformation::EUnknownDirection);
+	iCallInfo[aCallId].SetCallState(TLtsyCallInformation::EUnknownState);
+	iCallInfo[aCallId].SetCallMode(TLtsyCallInformation::EUnKnowCall);
+	iCallInfo[aCallId].SetConferenceCall(TLtsyCallInformation::EUnknownIsConference);
+	iCallInfo[aCallId].SetMobileTelNum(KNullDesC8);
+	iCallInfo[aCallId].SetAddressType(-1);
+	iCallInfo[aCallId].SetMobileName(KNullDesC8);
+	iCallInfo[aCallId].SetEmergencyCallFlag(EFalse);
+	}
+
+void CLtsyCallInformationManager::ResetAllCalInformation()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::ResetAllCalInformation()"));
+	
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		ResetCallInformationByCallId(n);
+		}	
+	}
+
+TLtsyCallInformation& CLtsyCallInformationManager::GetCallInformationByCallId(TInt aCallId)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::GetCallInformationByCallId()"));
+	
+	ASSERT((aCallId >= KLtsyMinCallId) && (aCallId <= KLtsyMaxCallId));
+	
+	return iCallInfo[aCallId];
+	}
+
+TInt CLtsyCallInformationManager::FindUnUesedCallId() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::FindUnUesedCallId()"));
+	
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::ENotUsed)
+			{
+			return n;
+			}
+		}
+	return KErrNotFound;
+	}
+
+TBool CLtsyCallInformationManager::IsHaveUsedCallId() const
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CLtsyCallInformationManager::FindIsHaveUsedCallId()"));
+	
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;	
+	}
+
+void CLtsyCallInformationManager::SetIncomingCallFlag(TBool aIncomingCallFlag)
+	{
+	iIncomingCallFlag = aIncomingCallFlag;
+	}
+
+TBool CLtsyCallInformationManager::GetIncomingCallFlag() const
+	{
+	return iIncomingCallFlag;
+	}
+
+TInt CLtsyCallInformationManager::FindIncomingCallId() const
+	{
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+			iCallInfo[n].GetCallState() == TLtsyCallInformation::EInComingCall)
+			{
+			return n;
+			}
+		}
+	return KErrNotFound;
+	}
+
+TInt CLtsyCallInformationManager::FindEmergencyCallId() const
+	{
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if ((iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed) &&
+			iCallInfo[n].GetEmergencyCallFlag())
+			{
+			return n;
+			}
+		}
+	return KErrNotFound;	
+	}
+
+TInt CLtsyCallInformationManager::FindDialingOrAlertingCallId() const
+	{
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+			((iCallInfo[n].GetCallState() == TLtsyCallInformation::EDialingCall) ||
+			 (iCallInfo[n].GetCallState() == TLtsyCallInformation::EAlertingCall)))
+			{
+			return n;
+			}
+		}
+	return KErrNotFound;	
+	}
+
+TInt CLtsyCallInformationManager::FindWaitingCallId() const
+	{
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (iCallInfo[n].GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+			iCallInfo[n].GetCallState() == TLtsyCallInformation::EWaitingCall)
+			{
+			return n;
+			}
+		}
+	return KErrNotFound;	
+	}
+
+// ---------------------------------------------------------------------------
+// CLtsyCallInformationManager::GetHangupCommandRecords
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATHangupCommandRecords& CLtsyCallInformationManager::GetHangupCommandRecords()
+	{
+	return (*iHangupCommandRecords);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/mslogger.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,80 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TSYLogger
+
+// system inlcude
+#include <flogger.h>		// for FLogger
+
+// user include
+#include "mslogger.h"		// Header file for this source file
+
+// const defination
+_LIT(KLogFolder,"etel");
+_LIT(KLogFileName,"PhoneTsy.txt");
+_LIT8(KTimeFormat,"%02d:%02d:%02d.%03d ");
+
+const TInt KTSYLogBufferSize=400;
+
+void TSYLogger::Write(const TDesC8& aText)
+	{
+	//
+	// Assemble time stamp and callers text into one string
+	TBuf8<KTSYLogBufferSize> buf;
+	TTime now;
+	now.UniversalTime();
+	TDateTime t(now.DateTime());
+	buf.Format(KTimeFormat,t.Hour(),t.Minute(),t.Second(),t.MicroSecond());
+	buf.Append(aText);
+
+	//
+	// Open log, write text to log and close log
+	RFileLogger log;
+	if(KErrNone==log.Connect())
+		{
+		log.CreateLog(KLogFolder,KLogFileName,EFileLoggingModeAppend);
+		log.SetDateAndTime(EFalse,EFalse);
+		log.Write(buf);
+		log.CloseLog();
+		log.Close();
+		}
+	}
+
+
+void TSYLogger::WriteFormat(TRefByValue<const TDesC8> aFmt,...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+
+	//
+	// Assemble time stamp and callers text into one string
+	TBuf8<KTSYLogBufferSize> buf;
+	TTime now;
+	now.UniversalTime();
+	TDateTime t(now.DateTime());
+	buf.Format(KTimeFormat,t.Hour(),t.Minute(),t.Second(),t.MicroSecond());
+	buf.AppendFormatList(aFmt,list);
+
+	//
+	// Open log, write text to log and close log
+	RFileLogger log;
+	if(KErrNone==log.Connect())
+		{
+		log.CreateLog(KLogFolder,KLogFileName,EFileLoggingModeAppend);
+		log.SetDateAndTime(EFalse,EFalse);
+		log.Write(buf);
+		log.CloseLog();
+		log.Close();
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/panic.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file panic.cpp
+// Panic codes and panic function. This header should be kept private and not exported to
+// /epoc32/include/
+
+#include <e32std.h>		/// for GLDEF_C and User::
+#include "panic.h"		/// Header for this file
+
+//
+// Panic Function
+//
+GLDEF_C void Panic(TTSYPanic aPanicNumber)
+	{
+	_LIT(panicText,"PhoneTsy");
+	_LIT(extension,".TSY");
+
+	TName myTsyName(panicText);
+
+	#ifdef TSY_INSTANCE
+		TBuf16<16> tgt;
+		tgt.Num(TSY_INSTANCE);
+		myTsyName.Append(tgt);
+	#endif
+	myTsyName.Append(extension);
+
+	User::Panic(myTsyName,aPanicNumber);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/requestbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,74 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CRequestBase which act as an interface with dispater to handle a single passed IPC request
+
+#include "requestbase.h"
+#include "mslogger.h"
+#include "globalphonemanager.h"
+
+// ---------------------------------------------------------------------------
+// CRequestBase::~CRequestBase
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CRequestBase::~CRequestBase()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CRequestBase::~CRequestBase()"));
+	iIpcCompleteObserver = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CRequestBase::CRequestBase
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CRequestBase::CRequestBase(CGlobalPhonemanager& aPhoneGlobals)
+							:iPhoneGlobals(aPhoneGlobals)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CRequestBase::CRequestBase()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CRequestBase::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CRequestBase::StartRequest()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CRequestBase::SetIpcRequestCompleteObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CRequestBase::SetIpcRequestCompleteObserver(MIpcRequestCompleteObserver* aIpcCompleteObserver)
+    {
+    iIpcCompleteObserver = aIpcCompleteObserver;
+    }
+
+// ---------------------------------------------------------------------------
+// CRequestBase::SetIpcId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CRequestBase::SetIpcId(TInt aIpcId)
+    {
+    iIpcId = aIpcId;
+    }
+
+// ---------------------------------------------------------------------------
+// CRequestBase::SetIpcId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CRequestBase::IpcId()
+    {
+    return iIpcId;
+    }
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/respondbufparser.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,141 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CRespondBufParser which provide an algorithm to analize the passed data from baseband
+//
+
+#include "respondbufparser.h"
+#include "mslogger.h"
+
+_LIT8(KSpace, " ");
+
+CRespondBufParser::CRespondBufParser() 
+	{	
+	}
+
+CRespondBufParser::~CRespondBufParser()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CRespondBufParser::ParseRespondedBuffer
+// other items were commented in a header
+// ---------------------------------------------------------------------------		
+void CRespondBufParser::ParseRespondedBuffer(RArray<TPtrC8>& aArray, const TDesC8& aBuf)
+	{
+	aArray.Reset();
+	
+	TBool firstDoubleQuoteFound = EFalse;
+	TBool endByComma = EFalse;
+	TBool Marked = EFalse;
+	TLex8 tmpLex(aBuf);
+	
+	//Move cursor past any spaces or open brackets
+	while(!tmpLex.Eos())
+		{
+		TChar peek=tmpLex.Peek();
+		switch(peek)
+			{
+			//Skip the '(','[', and '{' in end
+			case '(':
+			case '[':
+			case '{':
+				break;
+			//Skip the '(','[', and '{' in end
+			case ')':
+			case ']':
+			case '}':
+				break;
+			case '"': 
+				//Skip first '"'
+				if(!firstDoubleQuoteFound)
+					{
+					firstDoubleQuoteFound = ETrue;
+					}
+				else
+					{
+					//Extracts the marked token(No include the '"' in end)
+					firstDoubleQuoteFound = EFalse;
+					TPtrC8 temp = tmpLex.MarkedToken();
+					aArray.Append(temp);
+					LOGTEXT2(_L8("normal parameter >%S<"),&(temp));
+					Marked = EFalse;
+					endByComma = EFalse;
+					}
+				break;
+			case ',':
+				if(!firstDoubleQuoteFound)
+					{
+					if(Marked)
+						{
+						//Extracts the marked token
+						TPtrC8 temp = tmpLex.MarkedToken();
+						aArray.Append(temp);
+						LOGTEXT2(_L8("normal parameter >%S<"),&(temp));
+						Marked = EFalse;
+						}
+					else if(endByComma)
+						{
+						//Add a space between two camma
+						aArray.Append(KSpace());
+						LOGTEXT2(_L8("normal parameter >%S<"),&(KSpace()));
+						}
+					endByComma = ETrue;
+					}
+				break;
+			case ';':
+			case ' ': 
+			case '\r': 
+			case '\n': 
+				if(!firstDoubleQuoteFound&&Marked)
+					{
+					//Extracts the marked token
+					TPtrC8 temp = tmpLex.MarkedToken();
+					aArray.Append(temp);
+					LOGTEXT2(_L8("normal parameter >%S<"),&(temp));
+					Marked = EFalse;	
+					endByComma = EFalse;
+					}
+				break;
+			case ':': 
+				if(!firstDoubleQuoteFound&&Marked)
+					{
+					//Extracts the marked token(Include ':')
+					tmpLex.Inc();
+					TPtrC8 temp = tmpLex.MarkedToken();
+					aArray.Append(temp);
+					LOGTEXT2(_L8("normal parameter >%S<"),&(temp));
+					//back one char because add it in end 
+					tmpLex.Inc(-1);
+					Marked = EFalse;
+					endByComma = EFalse;
+					}
+				break;
+			default:
+				if(!Marked)
+					{
+					tmpLex.Mark();
+					Marked = ETrue;	
+					}
+				break;
+			}
+		tmpLex.Inc();
+		}
+	if(Marked)
+		{
+		//Extracts the marked token which haven't 
+		TPtrC8 temp = tmpLex.MarkedToken();
+		aArray.Append(temp);
+		LOGTEXT2(_L8("normal parameter >%S<"),&(temp));
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/tsyconfg.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,487 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file tsyconfig.cpp
+// This contains CTsyConfig which manage access to CommDB configuration.
+// 
+
+// system include
+#include <commsdattypesv1_1.h>
+#include <commsdat_partner.h>
+using namespace CommsDat;
+
+// user include
+#include "tsyconfg.h"
+#include "mslogger.h"
+
+#ifdef __LOGDEB__
+_LIT8(KLogEntry,"CTsyConfig::%S\t%S");
+#define LOCAL_LOGTEXT(function,text) {_LIT8(F,function);_LIT8(T,text);LOGTEXT3(KLogEntry,&F,&T);}
+#else
+#define LOCAL_LOGTEXT(function,text)
+#endif
+
+// const defination
+const TInt KDefaultLocationInternalPref = 0;
+const RCall::TMonitorSpeakerControl KDefaultModemSpeakerSetting = RCall::EMonitorSpeakerControlOnUntilCarrier;
+const RCall::TMonitorSpeakerVolume KDefaultMonitorSpeakerVolume = RCall::EMonitorSpeakerVolumeOff;
+const RCall::TWaitForDialTone KDefaultWaitForDialTone = RCall::EDialToneNoWait;
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig* CTsyConfig::NewL() 
+	{
+	CTsyConfig* self = new(ELeave) CTsyConfig();
+	CleanupStack::PushL(self);
+	self->ConstructL(); 
+	CleanupStack::Pop();
+	return (self);
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::CTsyConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig::CTsyConfig()
+	{	
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::ConstructL()
+	{
+	iLocationId = 0;
+	iModemBearer = 0;
+	SetCurrentTableViewL();
+	GetLocationModemSettingsL();
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::SetCurrentTableViewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::SetCurrentTableViewL()
+	{
+	TInt r = KErrNone;
+
+	for (TInt i = 0; i < 10; i++)
+		{
+		TRAP(r, GetCurrentTableViewsL()); // Place a cursor on the default modem record in comms database server
+		if (r == KErrAccessDenied)        // if we get access denied from DBMS, which is a timing thing, just re-post
+			{
+			User::After(1000000);
+			continue;
+			}
+		else
+			{
+			break;
+			}
+		}
+	
+	if(r)
+		{
+		LOGTEXT(_L8("CommDB values seem to be corrupt"));
+		User::Leave(KErrEtelModemSettingsCorrupt);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetLocationModemSettingsL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetLocationModemSettingsL()
+	{
+	ASSERT(iModemBearer != 0);
+	
+	iSpeakerSetting = KDefaultModemSpeakerSetting;
+	iSpeakerVolume = KDefaultMonitorSpeakerVolume;
+	
+	if(iLocationId == 0)
+		{
+		iInterval = KDefaultLocationInternalPref;
+		iWaitForDialTonePref = KDefaultWaitForDialTone;
+		}
+	else
+		{
+		TBool value(EFalse);
+		CMDBField<TUint32>* intervalField = new(ELeave) CMDBField<TUint32>(KCDTIdPauseAfterDialOut);
+		CleanupStack::PushL(intervalField);
+		intervalField->SetRecordId(iLocationId);
+		intervalField->LoadL(*iDbSession);
+		iInterval = *intervalField;
+		CleanupStack::PopAndDestroy(intervalField);
+		
+		CMDBField<TUint32>* valueField = new(ELeave) CMDBField<TUint32>(KCDTIdWaitForDialTone);		
+		CleanupStack::PushL(valueField);
+		valueField->SetRecordId(iLocationId);
+		valueField->LoadL(*iDbSession);
+		value = *valueField;
+		CleanupStack::PopAndDestroy(valueField);
+		
+		if (value)
+			{
+			iWaitForDialTonePref = RCall::EDialToneWait;
+			}
+		else
+			{
+			iWaitForDialTonePref = RCall::EDialToneNoWait;
+			}
+		}
+
+    // read speaker preferences
+	CMDBField<TUint32>* speakerPrefField = new(ELeave) CMDBField<TUint32>(KCDTIdSpeakerPref);
+	CleanupStack::PushL(speakerPrefField);
+	speakerPrefField->SetRecordId(iModemBearer);
+	speakerPrefField->LoadL(*iDbSession);
+	iSpeakerSetting = static_cast<RCall::TMonitorSpeakerControl>(static_cast<TUint32>(*speakerPrefField));
+	CleanupStack::PopAndDestroy(speakerPrefField);
+	
+	// read speaker volume preferences
+	CMDBField<TUint32>* speakerVolPrefField = new(ELeave) CMDBField<TUint32>(KCDTIdSpeakerVolPref);
+	CleanupStack::PushL(speakerVolPrefField);
+	speakerVolPrefField->SetRecordId(iModemBearer);
+	speakerVolPrefField->LoadL(*iDbSession);
+	iSpeakerVolume = static_cast<RCall::TMonitorSpeakerVolume>(static_cast<TUint32>(*speakerVolPrefField));			
+	CleanupStack::PopAndDestroy(speakerVolPrefField);
+
+    // read modem rate
+	CMDBField<TUint32>* rateField = new(ELeave) CMDBField<TUint32>(KCDTIdRate);
+	CleanupStack::PushL(rateField);
+	rateField->SetRecordId(iModemBearer);
+	rateField->LoadL(*iDbSession);
+	TUint32 rate;
+	rate = *rateField;
+	CleanupStack::PopAndDestroy(rateField);
+	
+	// read data bits for modem
+	CMDBField<TUint32>* dataBitsField = new(ELeave) CMDBField<TUint32>(KCDTIdDataBits);
+	CleanupStack::PushL(dataBitsField);
+	dataBitsField->SetRecordId(iModemBearer);
+	dataBitsField->LoadL(*iDbSession);
+	TUint32 dataBits;
+	dataBits = *dataBitsField;
+	CleanupStack::PopAndDestroy(dataBitsField);
+    
+	// read stop bits for modem
+	CMDBField<TUint32>* stopBitsField = new(ELeave) CMDBField<TUint32>(KCDTIdStopBits);
+	CleanupStack::PushL(stopBitsField);
+	stopBitsField->SetRecordId(iModemBearer);
+	stopBitsField->LoadL(*iDbSession);
+	TUint32 stopBits;
+	stopBits = *stopBitsField;
+	CleanupStack::PopAndDestroy(stopBitsField);
+	
+	// read parity for modem
+	CMDBField<TUint32>* parityField = new(ELeave) CMDBField<TUint32>(KCDTIdParity);
+	CleanupStack::PushL(parityField);
+	parityField->SetRecordId(iModemBearer);
+	parityField->LoadL(*iDbSession);
+	TUint32 parity;
+	parity = *parityField;
+	CleanupStack::PopAndDestroy(parityField);
+	
+	// read handshake for modem
+	CMDBField<TUint32>* handshakeField = new(ELeave) CMDBField<TUint32>(KCDTIdHandshaking);
+	CleanupStack::PushL(handshakeField);
+	handshakeField->SetRecordId(iModemBearer);
+	handshakeField->LoadL(*iDbSession);
+	TUint32 handshake;
+	handshake = *handshakeField;
+	CleanupStack::PopAndDestroy(handshakeField);
+    
+	// set the modem configuration
+	iConfig.iRate = (TBps)rate;
+	iConfig.iDataBits = (TDataBits)dataBits;
+	iConfig.iStopBits = (TStopBits)stopBits;
+	iConfig.iParity = (TParity)parity;
+	iConfig.iHandshake = handshake;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::~CTsyConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig::~CTsyConfig()
+	{
+	delete iDbSession;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConfigModemStringL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::ConfigModemStringL(const TDesC& aStringTag, TDes8& aString)
+	{
+	ASSERT(iDbSession != 0);
+	CCDModemBearerRecord* modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+	CleanupStack::PushL(modemRecord);
+	modemRecord->SetRecordId(iModemBearer);
+	modemRecord->LoadL(*iDbSession);
+	
+	TInt ret;
+	TInt type(0);
+	CMDBElement* baseField = NULL;
+	TRAP(ret, baseField = modemRecord->GetFieldByNameL(aStringTag, type));
+	if (ret == KErrNone)
+		{
+		// check for type
+		switch(type)
+			{
+			case EMedText:
+			case EText:
+				{
+				CMDBField<TDesC>* field16 = static_cast<CMDBField<TDesC>*>(baseField);
+				const TDesC& refField = *field16;
+				aString.Copy(refField);
+				ret = KErrNone;
+				}
+				break;
+			case EDesC8:
+				{
+				CMDBField<TDesC8>* field = static_cast<CMDBField<TDesC8>*>(baseField);
+				aString = *field;
+				ret = KErrNone;
+				}
+				break;
+			default:
+				ret = KErrNotFound;
+			}
+    	}
+	CleanupStack::PopAndDestroy(modemRecord);
+
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConfigModemStringL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::ConfigModemStringL(const TDesC& aStringTag, TDes16& aString)
+	{
+	ASSERT(iDbSession != 0);
+	// get the table record
+	CCDModemBearerRecord* modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+	CleanupStack::PushL(modemRecord);
+	modemRecord->SetRecordId(iModemBearer);
+	modemRecord->LoadL(*iDbSession);
+	
+	TInt ret;
+	TInt type(0);
+	CMDBElement* baseField = NULL;
+	TRAP(ret, baseField = modemRecord->GetFieldByNameL(aStringTag, type));
+	if (ret == KErrNone)
+		{
+		// check for type
+		switch(type)
+			{
+			case EMedText:
+			case EText:
+				{
+				CMDBField<TDesC>* field = static_cast<CMDBField<TDesC>*>(baseField);
+				aString = *field;
+				ret = KErrNone;
+				}
+				break;
+			case EDesC8:
+				{
+				// des16 needs to be cast to des8
+				CMDBField<TDesC8>* field8 = static_cast<CMDBField<TDesC8>*>(baseField);
+				const TDesC8& refField = *field8;
+				aString.Copy(refField);
+				ret = KErrNone;
+				}
+				break;
+			default:
+				ret = KErrNotFound;
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(modemRecord);
+
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetSpeakerSettingPref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetSpeakerSettingPref(RCall::TMonitorSpeakerControl& aSpeakerSetting)
+	{
+	aSpeakerSetting = iSpeakerSetting;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetSpeakerVolumePref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetSpeakerVolumePref(RCall::TMonitorSpeakerVolume& aSpeakerVolume)
+	{
+	aSpeakerVolume = iSpeakerVolume;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetWaitForDialTonePref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetWaitForDialTonePref(RCall::TWaitForDialTone& aWaitForDialTonePref)
+	{
+	aWaitForDialTonePref = iWaitForDialTonePref;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::PortConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::PortConfig(TCommConfig& aConfigPckg, TConfigType aConfigType)
+	{
+	TCommConfig configDummyPckg;
+	TCommConfigV01& config = configDummyPckg();
+	config = iConfig;
+	
+	if (aConfigType==EConfigTypeHangUp ||
+		aConfigType==EConfigTypeQuickInit)
+		{
+		config.iHandshake = 0;//&= (~(KConfigFailDCD | KConfigObeyDCD | KConfigFailDSR));
+		}
+	else
+		{
+		switch (aConfigType)
+			{
+		case EConfigTypePreInit:
+			config.iHandshake &= (~(KConfigObeyCTS | KConfigFailCTS | KConfigObeyDCD | KConfigFailDCD | KConfigFailDSR));
+			break;
+		case EConfigTypeInit:
+			config.iHandshake &= (~(KConfigObeyCTS | KConfigFailCTS | KConfigObeyDCD | KConfigFailDCD));
+			break;
+		case EConfigTypeConnect:
+			config.iHandshake &= (~(KConfigFailCTS | KConfigFailDCD));	// fail DCD masked out, as should get NO CARRIER anyway
+			break;
+		case EConfigTypeFull:
+			break;
+		case EConfigTypeDDBugWorkAroundStart:
+			if (config.iRate!=EBps300)	// ensure that something other than handshaking has changed
+				config.iRate=EBps300;	// to work around the bug in the ARM device driver
+			else
+				config.iRate=EBps2400;
+			config.iHandshake=0;
+			break;
+		case EConfigTypeDDBugWorkAroundEnd:
+			config.iHandshake=0;
+			break;
+		default:
+			break;
+			}
+		}
+	
+	aConfigPckg=configDummyPckg;
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetCurrentTableViewsL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetCurrentTableViewsL() 
+	{
+	ResetCurrentTableViews();
+	
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	iDbSession = CMDBSession::NewL(KCDVersion1_2);
+#else
+	iDbSession = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	iModemBearer = 0;
+	iLocationId = 0;
+	// Search the bearer tables for records using the Phonetsy.TSY
+	GetModemBearerIdL(iModemBearer);
+
+	// Get the associated locationId
+	GetLocationIdL(iModemBearer,iLocationId);
+	
+	//Check if the selected bearer is an MMTSY bearer with a valid location
+	if(!iModemBearer || !iLocationId) 
+		{
+		//
+		// Selected bearer does not mention the MMTSY
+		LOCAL_LOGTEXT("GetCurrentSettingsL","PhoneTSY not mentioned in the selected bearer");
+		User::Leave(KErrNotFound);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ResetCurrentTableViews
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::ResetCurrentTableViews()
+	{
+	delete iDbSession;
+	iDbSession = NULL;		
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetLocationIdL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetLocationIdL(const TUint32& aBearerId, TUint32& aLocationId) 
+ 	{
+    CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+  	CleanupStack::PushL(iapRecord);
+  	
+  	iapRecord->iBearer = aBearerId;
+  	TBool err = iapRecord->FindL(*iDbSession);
+  	if (err)
+  		{
+  		aLocationId = iapRecord->iLocation;
+  		}
+  	else
+  		{
+  		aLocationId = static_cast<TUint32>(KErrNotFound);
+  		}
+  	
+    CleanupStack::PopAndDestroy(iapRecord);
+    
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetModemBearerIdL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetModemBearerIdL(TUint32& aBearerId)
+	{
+    CCDModemBearerRecord *modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+    CleanupStack::PushL(modemRecord);
+    
+    _LIT(KTsyName,"PhoneTsyWithDispatcher");
+    modemRecord->iTsyName.SetMaxLengthL(KMaxTextLength);
+    modemRecord->iTsyName = KTsyName;
+    
+    TBool searchResult = modemRecord->FindL(*iDbSession);
+    
+    if (searchResult)
+	    {
+		aBearerId = modemRecord->RecordId();	
+	    }
+	else
+		{
+		aBearerId = static_cast<TUint32>(KErrNotFound);
+		}
+    
+    CleanupStack::PopAndDestroy(modemRecord);
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/unsolicitedeventmonitor.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,237 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains CUnsolicitedEventMonitor which mornitor the arriving unsocilited event and then notify this to all observers.
+// 
+
+//user include
+#include "unsolicitedeventmonitor.h"
+#include "atunsolicited.h"
+#include "mslogger.h"
+#include "atmanager.h"
+#include "activecommandstore.h"
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CUnsolicitedEventMonitor* CUnsolicitedEventMonitor::NewL(CGlobalPhonemanager& aPhoneglobals,
+										    CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::NewL()"));
+	CUnsolicitedEventMonitor* self = CUnsolicitedEventMonitor::NewLC(aPhoneglobals, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CUnsolicitedEventMonitor* CUnsolicitedEventMonitor::NewLC(CGlobalPhonemanager& aPhoneglobals,
+											CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::NewLC()"));
+	CUnsolicitedEventMonitor* self = new (ELeave) CUnsolicitedEventMonitor(aPhoneglobals, 
+																 aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::~CUnsolicitedEventMonitor
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CUnsolicitedEventMonitor::~CUnsolicitedEventMonitor()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::~CUnsolicitedEventMonitor()"));
+	iArray.Close();
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::CUnsolicitedEventMonitor
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CUnsolicitedEventMonitor::CUnsolicitedEventMonitor(CGlobalPhonemanager& aPhoneglobals,
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+						             :CATCommandControlBase(aPhoneglobals, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::CUnsolicitedEventMonitor()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::ConstructL()"));
+	
+	CATUnsolicited* command = CATUnsolicited::NewL(iPhoneGlobals, iCtsyDispatcherCallback);
+	command->SetAtCommandObserver(this);
+	AddAtCommand(command);
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::AddUnsolicitedObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::AddUnsolicitedObserver(const MLtsyUnsolicitedCommandObserver* aObserver)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::AddUnsolicitedObserver()"));
+	
+	if (aObserver != NULL)
+		{
+		TInt nRes = iArray.Append(aObserver);
+		if (nRes == KErrNone)
+			{
+			LOGTEXT(_L8("[Ltsy] Append unsolicited Observer Success"));
+			}
+		else
+			{
+			LOGTEXT2(_L8("[Ltsy] Append unsolicited Observer fail Because result code = %d"), nRes);
+			}
+		}
+	else
+		{
+		LOGTEXT(_L8("[Ltsy] Unsolicited observer is NULL"));
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::RemoveUnsolicitedObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::RemoveUnsolicitedObserver(const MLtsyUnsolicitedCommandObserver* aObserver)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::RemoveUnsolicitedObserver()"));
+	if (aObserver != NULL)
+		{
+		TInt nFound = iArray.Find(aObserver);
+		if (KErrNotFound != nFound)
+			{
+			LOGTEXT(_L8("[Ltsy] Array have removed observer"));
+			iArray.Remove(nFound);
+			}
+		else
+			{
+			LOGTEXT(_L8("[Ltsy] Array not found observer"));
+			}
+		}
+	else
+		{
+		LOGTEXT(_L8("[Ltsy] Wind Observer is NULL"));
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::NotifyEveryObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::NotifyEveryObserver()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::NotifyEveryObserver()"));
+	
+	CAtCommandBase *cAtBase(NULL);
+	TRAPD(err, cAtBase = &GetAtCommandByAtTypeL(ELtsyAT_General_WIND));
+	if (err == KErrNoMemory)
+		{
+		return;
+		}
+	
+	CATUnsolicited*  unsolicited = dynamic_cast<CATUnsolicited*>(cAtBase);
+	if (unsolicited == NULL)
+		{
+		LOGTEXT(_L8("[Ltsy] Dynamic cast class CAtCommandBase to class CATUnsolicited failing"));
+		return;
+		}
+	
+	if (unsolicited->GetParserResult() != KErrNone)
+		{
+		LOGTEXT(_L8("[Ltsy] parse unsolicited command error"));
+		return;
+		}
+	
+	TUnsolicitedParams::TUnsolicitedParamsPckgBuf* pckg = (TUnsolicitedParams::TUnsolicitedParamsPckgBuf*)(&(unsolicited->GetUnsolicitedParams()));
+	TInt nEvent = (*pckg)().iEvent;
+	
+	TInt count = iArray.Count();
+	for (TInt n = 0; n < count;  n++)
+		{
+		MLtsyUnsolicitedCommandObserver* observer = iArray[n];
+		observer->UnsolicitedCommandArriving(nEvent, (*pckg));
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::StartUnsolicitedObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::StartUnsolicitedObserver()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::NotifyEveryObserver()"));
+	
+	CAtCommandBase *cAtBase(NULL);
+	TRAPD(err, cAtBase = &GetAtCommandByAtTypeL(ELtsyAT_General_WIND));
+	if (err == KErrNoMemory)
+		{
+		return;
+		}
+	
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->AddUnsolicitedAtCommand(cAtBase);
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::StopUnsolicitedObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::StopUnsolicitedObserver()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::StopUnsolicitedObserver()"));
+	
+	CAtCommandBase *cAtBase(NULL);
+	TRAPD(err, cAtBase = &GetAtCommandByAtTypeL(ELtsyAT_General_WIND));
+	if (err == KErrNoMemory)
+		{
+		return;
+		}
+	
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->RemoveActiveAtCommand(cAtBase);
+	}
+
+// ---------------------------------------------------------------------------
+// CUnsolicitedEventMonitor::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CUnsolicitedEventMonitor::AtCommandExecuteComplete(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CUnsolicitedEventMonitor::AtCommandExecuteComplete()"));
+	if (aStatus == KErrNone)
+		{
+		NotifyEveryObserver();
+		}
+	
+	CAtCommandBase *cAtBase(NULL);
+	TRAPD(err, cAtBase = &GetAtCommandByAtTypeL(ELtsyAT_General_WIND));
+	if (err == KErrNoMemory)
+		{
+		return;
+		}
+	
+	cAtBase->ClearCurrentLine();
+	
+	LOGTEXT(_L8("[Ltsy] End CUnsolicitedEventMonitor::AtCommandExecuteComplete()"));
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/generic/src/unsolicitedparams.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,32 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This define the unsolicted event data
+// 
+
+//user include
+#include "unsolicitedparams.h"
+
+TUnsolicitedParams::TUnsolicitedParams()
+	{
+	iEvent = -1;
+	iIdx = 0;
+	}
+
+void TUnsolicitedParams::InitParams()
+	{
+	iEvent = -1;
+	iIdx = 0;	
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atdetectnetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,102 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atdetectnetwork.h
+// This contains CATDetectNetwork which is describes the GSM Network & Operator information.
+// 
+#ifndef __ATDETECTNETWORK_H__
+#define __ATDETECTNETWORK_H__
+
+#include <mmlist.h>
+//User include
+#include "atcommandbase.h"
+
+
+/**
+ * CATDetectNetwork inherits from the CAtCommandBase class. 
+ * brief Determines the Operators present in the GSM Network.
+ * This class transmits the AT+COPS=? Command in order to determine all the Operators 
+ * present in the GSM Network.
+ *
+ */
+class CATDetectNetwork : public CAtCommandBase
+{
+public:
+	static CATDetectNetwork* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATDetectNetwork();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Cancel the AT Command execution
+	 */
+	virtual void CancelCommand();
+    /**
+     * Start the request 
+     */
+	virtual void StartRequest();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATDetectNetwork(CGlobalPhonemanager& aGloblePhone, 
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+public:
+	/**
+	 * Detect Network Command is running? or not
+	 */
+	TBool iCommandRunning;
+	/**
+	 * Detect Network Cancel Command is running? or not
+	 */
+	TBool iCommandCancel;
+private:
+	/*
+	 * Returned all the Operators which present in the GSM Network.
+	 */
+	CMobilePhoneNetworkListV2* iList;
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetbatteryinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,107 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetbatteryinfo.h
+// This contains CATGetBattery which is defines the AT command for Getting Battery status
+// 
+
+#ifndef __CBATTERY_H__
+#define __CBATTERY_H__
+
+//system include
+#include <etelmm.h>
+#include <cmmutility.h>
+//user include
+#include "atcommandbase.h"
+
+
+/**
+ * class CATGetBattery 
+ *
+ * CATGetBattery inherits from the CAtCommandBase class. 
+ * This class transmits the AT+COPS=? Command in order to get 
+ * Battery status in this phone
+ */
+class CATGetBattery : public CAtCommandBase
+{
+public:
+	static CATGetBattery* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetBattery();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the battery infomation returned by executing AT Command
+	 */
+	RMobilePhone::TMobilePhoneBatteryInfoV1 GetBatteryinfo();
+	/**
+	 * Get RF state information
+	 */
+	TRfStateInfo GetRfStateInfo();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt GetErrorValue();
+    /**
+     * Start the request 
+     */
+	virtual void StartRequest();
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetBattery(CGlobalPhonemanager& aGloblePhone, 
+		          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return battery infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneBatteryInfoV1 iBatteryInfo; 
+	/*
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	/**
+	 * The RF state information
+	 */
+	TRfStateInfo iRfStateInfo;
+	
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetcellinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,89 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetcellinfo.h
+//  
+
+#ifndef __ATGETCELLINFO_H__
+#define __ATGETCELLINFO_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+// forward class
+
+/**
+ * class CATGetCellInfo 
+ * brief Determines the Cell infomation present in the GSM Network.
+ *
+ * CATGetCellInfo inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CCED=0,7\r Command in order to get 
+ * Cell infomation
+ */
+class CATGetCellInfo : public CAtCommandBase
+{
+public:
+	static CATGetCellInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetCellInfo();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetCellInfo(CGlobalPhonemanager& aGloblePhone, 
+		           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return Cell infomation  of AT command executed 
+	 */
+	RMmCustomAPI::TMmCellInfo::TGSMCellInfo iCellInfo; 
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;	
+};
+#endif //__ATGETCELLINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetfdnstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,90 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetfdnstatus.h
+// 
+
+#ifndef __ATGETFDNSTATUS_H__
+#define __ATGETFDNSTATUS_H__
+
+//system include
+#include <etelmm.h>
+#include <cmmutility.h>
+//user include
+#include "atcommandbase.h"
+
+
+/**
+ * class CATGetFdnStatus 
+ *
+ * CATGetFdnStatus inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CPBS? Command in order to get 
+ * FDN status
+ */
+class CATGetFdnStatus : public CAtCommandBase
+{
+public:
+	static CATGetFdnStatus* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetFdnStatus();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get 
+	 */
+	TBool GetFdnStatus();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt GetErrorValue();
+
+	virtual void StartRequest();
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetFdnStatus(CGlobalPhonemanager& aGloblePhone, 
+		          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * iFdnStatus is ETrue if FDN was activing
+	 */
+	TBool iFdnStatus; 
+	/*
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	
+	
+};
+#endif //__ATGETFDNSTATUS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetfdnsupport.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,87 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetfdnsupport.h
+// 
+
+#ifndef __ATGETFDNSUPPORT_H__
+#define __ATGETFDNSUPPORT_H__
+
+//user include
+#include "atcommandbase.h"
+
+
+/**
+ * class CATGetFdnSupport 
+ *
+ * CATGetFdnSupport inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CPBS=? Command in order to get 
+ * FDN support
+ */
+class CATGetFdnSupport : public CAtCommandBase
+{
+public:
+	static CATGetFdnSupport* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetFdnSupport();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get 
+	 */
+	TBool GetFdnSupport();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt GetErrorValue();
+
+	virtual void StartRequest();
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetFdnSupport(CGlobalPhonemanager& aGloblePhone, 
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * iFdnSupport is ETrue if FDN was supported
+	 */
+	TBool iFdnSupport; 
+	/*
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	
+};
+#endif //__ATGETFDNSUPPORT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetimei.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,98 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetimei.h
+// This contains CATGetImei which is defines the AT command for Getting Serial Numuber
+// 
+
+
+#ifndef ATGETIMEI_H__
+#define ATGETIMEI_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+/**
+ * \class CATGetImei 
+ * \brief get the phone Serial Numuber in the GSM Network.
+ *
+ * CATGetImei inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CGSN Command in order to get Serial Numuber 
+ * in the phone.
+ */
+class CATGetImei : public CAtCommandBase
+{
+public:
+	static CATGetImei* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetImei();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 GetPhoneImei();
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetImei(CGlobalPhonemanager& aGloblePhone, 
+		       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return infomation is  multi-word?
+	 */
+	TBool iMoreInfoFlag;
+	/**
+	 * The return phone infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+};
+
+#endif // ATGETIMEI_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmanufacturer.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetmanufacturer.h
+// This contains CATGetManufacturer which is defines the AT command for Getting manufacturer
+// 
+
+#ifndef ATGETMANUFACTURER_H__
+#define ATGETMANUFACTURER_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+/**
+ * \class CATGetManufacturer 
+ * \brief get the phone manufacturer in the GSM Network.
+ *
+ * CATGetManufacturer inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CGMI Command in order to get manufacturer 
+ * in the phone.
+ */
+class CATGetManufacturer : public CAtCommandBase
+{
+public:
+	static CATGetManufacturer* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetManufacturer();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 GetPhoneManufacturer();
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetManufacturer(CGlobalPhonemanager& aGloblePhone, 
+		               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return infomation is  multi-word?
+	 */
+	TBool iMoreInfoFlag;
+	/**
+	 * The return phone infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+};
+#endif // ATGETMANUFACTURER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmodel.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,95 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetmodel.h
+// This contains CATGetModel which is defines the AT command for Getting Model
+// 
+
+#ifndef ATGETMODEL_H__
+#define ATGETMODEL_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+/**
+ * \class CATGetModel 
+ * \brief get the phone Model in the GSM Network.
+ *
+ * CATGetModel inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CGMM Command in order to get Serial Numuber 
+ * in the phone
+ */
+class CATGetModel : public CAtCommandBase
+{
+public:
+	static CATGetModel* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetModel();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 GetPhoneModel();
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetModel(CGlobalPhonemanager& aGloblePhone, 
+		        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return infomation is  multi-word?
+	 */
+	TBool iMoreInfoFlag;
+	/**
+	 * The return phone infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+};
+
+#endif // ATGETMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetmodemstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,105 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetmodemstatus.h
+// This contains CATGetModemStatus which is defines the AT command for Getting modem staus
+// 
+
+/**
+ * @file
+ *
+ * AT command definition
+ * This file defines the AT command for Getting Modem status
+ * This queries the ME (Mobile Equipment) Modem,
+ * using a standard (ETSI GSM 07.07 April 1997) AT command : AT
+ * 
+ */
+
+#ifndef __CMODEMSTATUS_H__
+#define __CMODEMSTATUS_H__
+
+//user include
+#include "atcommandbase.h"
+
+
+/**
+ * \class CATGetModemStatus 
+ * \brief get Modem status.
+ *
+ * CATGetModemStatus inherits from the CAtCommandBase class. 
+ * This class transmits the AT Command in order to get Modem status 
+ * in the phone, using a standard AT command : AT+CGSN
+ */
+class CATGetModemStatus : public CAtCommandBase
+{
+public:
+	static CATGetModemStatus* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetModemStatus();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+	/**
+	 * Start this request
+	 */
+	void Complete(TInt aError);
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetModemStatus(CGlobalPhonemanager& aGloblePhone, 
+		              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetnetworkinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetnetworkinfo.h
+ /**
+ * @file
+ * Network Header file.
+ * AT command definition
+ * This file defines the AT command for Getting GSM Networ info
+ * Describes the GSM Network & Operator information.
+ * Using a standard (ETSI GSM 07.07 April 1997) AT command : AT
+ * 
+ */
+#ifndef __CNETWORK_H__
+#define __CNETWORK_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+
+/**
+ * Determines GSM Network and Operator Information.
+ *
+ * CATNetworkInfo inherits from the CAtCommandBase class. 
+ * This class transmits the Set Network Operator Command (AT+COPS=x,x) in numeric, short 
+ * alphanumeric and long alphanumeric formats. It also determines the current operator 
+ * using the operator query command (AT+COPS?).
+ */
+class CATNetworkInfo : public CAtCommandBase
+{
+public:
+	static CATNetworkInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATNetworkInfo();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneNetworkInfoV5 GetNetWorkInfo();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	
+	void SetToGetHomeNwk();
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+	enum TPortAccess
+		{
+		EPortAccessAllowed,
+		EPortAccessDenied
+		};
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATNetworkInfo(CGlobalPhonemanager& aGloblePhone, 
+		           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/**
+	 * The return phone infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneNetworkInfoV5 iNetworkInfo; 
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+	
+	TInt iNameFormat;
+	
+	TBool iGetHomeNwk;
+	
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetnetworkregistrationstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetnetworkregistrationstatus.h
+// This contains CATNetworkRegistration which is defines the AT command for Getting
+// network registration status
+// 
+
+#ifndef __CNETWORKREGISTRATION_H__
+#define __CNETWORKREGISTRATION_H__
+
+//user include
+#include "atcommandbase.h"
+
+// forward class
+class CATNetworkRegStatusChange;
+/**
+ * class CATNetworkRegistration 
+ *
+ * CATNetworkRegistration inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CREG=? Command in order to get 
+ * network registration status
+ */
+class CATNetworkRegistration : public CAtCommandBase
+{
+public:
+	static CATNetworkRegistration* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATNetworkRegistration();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATNetworkRegistration(CGlobalPhonemanager& aGloblePhone, 
+		                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:	
+	/*
+	 * The return network registration status infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneRegistrationStatus iRegistrationStatus;
+	/*
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetphonecellinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,97 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetphonecellinfo.h
+// This contains CATGetPhoneCellInfo which is defines the AT command for Getting Battery status
+// 
+
+#ifndef __ATGETPHONECELLINFO_H__
+#define __ATGETPHONECELLINFO_H__
+
+//system include
+#include <etelmm.h>
+
+//user include
+#include "atcommandbase.h"
+
+// forward class
+
+/**
+ * class CATGetPhoneCellInfo 
+ * brief Determines the Operators present in the GSM Network.
+ *
+ * CATGetPhoneCellInfo inherits from the CAtCommandBase class. 
+ * This class transmits the AT+COPS=? Command in order to get 
+ * Battery status in this phone
+ */
+class CATGetPhoneCellInfo : public CAtCommandBase
+{
+public:
+	static CATGetPhoneCellInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetPhoneCellInfo();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetPhoneCellInfo(CGlobalPhonemanager& aGloblePhone, 
+		                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	/*
+	 * The return battery infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneCellInfoV9 iCellInfo;
+	
+	/**
+	 * Store the error code
+	 */
+	TInt iError;
+};
+#endif //__ATGETPHONECELLINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetrevision.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetrevision.h
+// This contains CATGprsAttach which is defines the AT command for retrieving the
+// protocol stack revision being used.
+
+
+#ifndef ATGETREVISION_H__
+#define ATGETREVISION_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+/**
+ * \class CATGetRevision 
+ * \brief retrieving the protocol stack revision being used.
+ *
+ * CATGetRevision inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CGMR Command in order to the protocol 
+ * stack revision being used 
+ * 
+ */
+class CATGetRevision : public CAtCommandBase
+{
+public:
+	static CATGetRevision* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetRevision();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 GetPhoneRevision();
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetRevision(CGlobalPhonemanager& aGloblePhone, 
+		           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * The return infomation is  multi-word?
+	 */
+	TBool iMoreInfoFlag;
+	/**
+	 * The return phone infomation  of AT command executed 
+	 */
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt iError;
+};
+
+#endif // ATGETREVISION_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetsignalstrength.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,105 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetsignalstrength.h
+// 
+
+/**
+ * @file
+ *
+ * AT command definition
+ * This file defines the AT command for Getting Signal level
+ * This queries the ME (Mobile Equipment) Signal level,
+ * using a standard (ETSI GSM 07.07 April 1997) AT command : AT+CSQ?
+ * 
+ */
+
+#ifndef __CSIGNAL_H__
+#define __CSIGNAL_H__
+
+//system include
+#include <etelmm.h>
+//user include
+#include "atcommandbase.h"
+
+// forward class
+class MCallBackPhoneHander;
+/**
+ * \class CATGetSignal 
+ * \brief get Modem status.
+ *
+ * CATGetSignal inherits from the CAtCommandBase class. 
+ * This class transmits the AT Command in order to get  Getting Signal level
+ * in the phone, using a standard AT command : AT+CSQ?
+ */	
+class CATGetSignal : public CAtCommandBase
+{
+public:
+	static CATGetSignal* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGetSignal();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+    /**
+     * Get network signal information of phone
+     */ 
+	TTsySignalInfo getSignalInfo();
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGetSignal(CGlobalPhonemanager& aGloblePhone, 
+		         CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	TTsySignalInfo iSignalInfo; 
+	TInt iError;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atgetsimstatusready.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,91 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgetsimstatusready.h
+// 
+/**
+ * @file
+ *
+ * AT command definition
+ * This file defines the AT command for Getting SIM card status
+ * 
+ */
+
+#ifndef __CATSIMCARD_H__
+#define __CATSIMCARD_H__
+
+//user include
+#include "atcommandbase.h"
+
+// forward class
+class MCallBackPhoneHander;
+/**
+ * \class CATSIMCard 
+ *
+ * CATSIMCard inherits from the CAtCommandBase class. 
+ * This class transmits the AT Command in order to get SIM card status 
+ * in the phone, using a standard AT command : AT+CCID=?
+ */
+class CATSIMCard : public CAtCommandBase
+{
+public:
+	static CATSIMCard* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATSIMCard();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	/**
+	 * Start this request
+	 */
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATSIMCard(CGlobalPhonemanager& aGloblePhone, 
+		       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	TInt iError;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atnetworkregstatuschange.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,108 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atnetworkregstatuschange.h
+// AT command definition
+// This file defines the AT command used to Notify the phones current network
+//registration status..
+//
+#ifndef __ATNETWORKREGSTATUSCHANGE_H__
+#define __ATNETWORKREGSTATUSCHANGE_H__
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+/**
+ * CATNetworkRegStatusChange inherits from the CAtCommandBase class. 
+ * AT command to Notify the phones current network
+ * registration status.
+ * This class transmits the following commands: +CREG:
+ */
+class CATNetworkRegStatusChange : public CAtCommandBase
+	{
+public:
+	static CATNetworkRegStatusChange* NewL(CGlobalPhonemanager& aGloblePhone,
+			                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CATNetworkRegStatusChange* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	virtual ~CATNetworkRegStatusChange();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand(){};
+	/**
+	 * Parses the +CGREG unsolicited string from the modem.
+	 * An example response would be '+CREG: 2' where the value denotes the
+	 * current registration status.
+	 * If parsing succeeds then aRegStatus is updated.
+	 * 
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * 
+	 * 
+	 */
+	void Enable();
+	/**
+	 * 
+	 * 
+	 */
+	void Disable();
+	
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATNetworkRegStatusChange(CGlobalPhonemanager& aGloblePhone,
+				   CCtsyDispatcherCallback& aCtsyDispatcherCallback);	
+	/**
+	 * 2nd Constructor
+	 * This function must be called in his subtype class for 
+	 * creating instance of class CRespondBufParser
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * 
+	 * 
+	 */
+	RMobilePhone::TMobilePhoneRegistrationStatus iRegistrationStatus;
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	
+	};
+
+#endif //__ATNETWORKREGSTATUSCHANGE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atnotifycellinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,106 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atnotifycellinfo.h
+// AT command definition
+// This file defines the AT command used to Notify Cell infomation
+
+#ifndef __ATNODIFYCELLINFO_H__
+#define __ATNODIFYCELLINFO_H__
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+
+/**
+ * CATNotifyCellInfo inherits from the CAtCommandBase class. 
+ * AT command to Notify the phones current network
+ * registration status.
+ * This class transmits the following commands: +CCED:
+ */
+class CATNotifyCellInfo : public CAtCommandBase
+	{
+public:
+	static CATNotifyCellInfo* NewL(CGlobalPhonemanager& aGloblePhone,
+			                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CATNotifyCellInfo* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	virtual ~CATNotifyCellInfo();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand(){};
+	/**
+	 * Parses the +CGREG unsolicited string from the modem.
+	 * An example response would be '+CREG: 2' where the value denotes the
+	 * current registration status.
+	 * If parsing succeeds then aRegStatus is updated.
+	 * 
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * 
+	 * 
+	 */
+	void Enable();
+	/**
+	 * 
+	 * 
+	 */
+	void Disable();
+	
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATNotifyCellInfo(CGlobalPhonemanager& aGloblePhone,
+				   CCtsyDispatcherCallback& aCtsyDispatcherCallback);	
+	/**
+	 * 2nd Constructor
+	 * This function must be called in his subtype class for 
+	 * creating instance of class CRespondBufParser
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * The return Cell infomation  of AT command executed 
+	 */
+	RMmCustomAPI::TMmCellInfo::TGSMCellInfo iCellInfo; 
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	
+	};
+
+#endif //__ATNODIFYCELLINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atselectnetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atselectnetwork.h
+//This file defines the AT command for Selecting Network
+
+#ifndef __CATSELECTNETWORK_H__
+#define __CATSELECTNETWORK_H__
+
+//user include
+#include "atcommandbase.h"
+
+/**
+ * class CATSelectNetwork 
+ *
+ * CATSelectNetwork inherits from the CAtCommandBase class. 
+ * This class transmits the AT+COPS=1,2,x Command in order to  
+ * Select Network
+ */
+class CATSelectNetwork : public CAtCommandBase
+{
+public:
+	static CATSelectNetwork* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATSelectNetwork();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Cancel the AT Command execution
+	 */
+	virtual void CancelCommand();
+	
+	virtual void StartRequest();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	void SetNetworkSelection(const RMobilePhone::TMobilePhoneNetworkManualSelection& aNetworkManualSelection);
+public:
+	TBool iCommandRunning;
+	TBool iCommandCancel;
+	TBool iCommandSetBack;
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATSelectNetwork(CGlobalPhonemanager& aGloblePhone, 
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	/**
+	 * 
+	 */
+	void ExecuteSetBackCommand();
+
+private:
+	TInt iError;
+	RMobilePhone::TMobilePhoneNetworkManualSelection iNetworkManualSelection;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atselectnetworkmode.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,81 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atselectnetworkmode.h
+//This file defines the AT command for Selecting Network Mode
+
+
+#ifndef __CATSELECTNETWORKMODE_H__
+#define __CATSELECTNETWORKMODE_H__
+
+//user include
+#include "atcommandbase.h"
+
+/**
+ * class CATSelectNetworkMode 
+ *
+ * CATSelectNetworkMode inherits from the CAtCommandBase class. 
+ * This class transmits the AT+COPS=x Command in order to  
+ * Select Network Mode
+ */
+class CATSelectNetworkMode : public CAtCommandBase
+{
+public:
+	static CATSelectNetworkMode* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATSelectNetworkMode();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	
+	virtual void StartRequest();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	void SetNetworkSelection(const TInt aNetworkSelection);
+
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATSelectNetworkMode(CGlobalPhonemanager& aGloblePhone, 
+		                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);	
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	TInt iError;
+	TInt iNetworkSelection;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/atsetnotifycell.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,88 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsetnotifycell.h
+//
+
+
+#ifndef __ATSETNOTIFYCELL_H__
+#define __ATSETNOTIFYCELL_H__
+
+//system include
+#include "atcommandbase.h"
+
+class CATGetPhoneCellInfo;
+class CATNotifyCellInfo;
+/**
+ * class CATSetNotifyCellInfo 
+ *
+ * CATSetNotifyCellInfo inherits from the CAtCommandBase class. 
+ * This class transmits the AT+CCED=1,1 Command in order to set 
+ * Notify Cell infomation
+ */
+class CATSetNotifyCellInfo : public CAtCommandBase
+{
+public:
+	static CATSetNotifyCellInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATSetNotifyCellInfo();
+
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * The return error value of AT command executed 
+	 */
+	TInt GetErrorValue();
+	
+	/**
+	 * Start the request
+	 */
+	virtual void StartRequest();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATSetNotifyCellInfo(CGlobalPhonemanager& aGloblePhone, 
+		                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	TInt iError;
+};
+#endif //__ATSETNOTIFYCELL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/getcurrentnetworkinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,180 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file getcurrentnetworkinfo.h
+// 
+
+#ifndef __GETCURRENTNETWORKINFO_H__
+#define __GETCURRENTNETWORKINFO_H__
+
+//user include
+#include "atcommandcontrolbase.h"
+#include "athelpercommand.h"
+
+// forward class
+class CATNetworkInfo;
+class CATHelperCommand;
+
+/**
+ * CGetCurrentNetworkInfo inherits from the CATCommandControlBase class. 
+ *
+ */
+class CGetCurrentNetworkInfo : public CATCommandControlBase
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+     */ 
+	static CGetCurrentNetworkInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CGetCurrentNetworkInfo();
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	void StartRequest();
+	/**
+	 * Get the return value executed AT Command
+	 */
+	RMobilePhone::TMobilePhoneNetworkInfoV5 GetNetWorkInfo();
+	/**
+	 * Get error value executed AT Command
+	 */
+	TInt GetErrorValue();
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CGetCurrentNetworkInfo(CGlobalPhonemanager& aGloblePhone, 
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+    /**
+     * Start the AT command
+     */
+	void StartATCommand(CAtCommandBase* aAtCommand);
+	
+	/**
+	 * Complete AT command
+	 */
+	void CompeteATCommand(CAtCommandBase* aAtCommand);
+	
+	/**
+	 * Set long name format for modem
+	 */
+	void SetLongNameFormat();
+	
+	/**
+	 * Get the long name from modem
+	 */
+	void GetNetworkLongName();
+	
+	/**
+	 * Set short name format for modem
+	 */
+	void SetShortNameFormat();
+	
+	/**
+	 * Get the short name from modem
+	 */
+	void GetNetworkShortName();
+	
+	/**
+	 * Set numberic format
+	 */
+	void SetNumbericFormat();
+	
+	/**
+	 * Get the country code and network Id
+	 */
+	void GetCountryCodeAndNetworkId();
+	
+	/**
+	 * Handle the error
+	 */
+	void HandleGetCurNetworkError(TInt aError);
+	
+	/**
+	 * Handle the completion of geting current network information
+	 */
+	void HandleGetCurNetworkComplete();
+private:
+    /**
+     * The AT command to get the network info
+     */
+	CATNetworkInfo* iATNetworkInfo;
+	
+	/**
+	 * The Helper AT command @see CATHelperCommand
+	 */
+	CATHelperCommand* iATHelperCommand;
+	
+	/**
+	 * The network info
+	 */
+	RMobilePhone::TMobilePhoneNetworkInfoV5 iNetworkInfo;
+    
+	/**
+	 * Define the states for retrieving the network information
+	 */
+	enum TGetCurNetworkState
+		{
+		/**
+		 * The state is unknown
+		 */
+		EATUnknown,
+		
+		/**
+		 * The state of seting long format
+		 */
+		EATSetLongFormat,
+		
+		/**
+		 * The state of getting long name 
+		 */
+		EATGetLongName,
+		
+		/**
+		 * The state of seting short name format 
+		 */
+		EATSetShortFormat,
+		
+		/**
+		 * The state of getting short name
+		 */
+		EATGetShortName,
+		
+		/**
+		 * The state of Seting the numberic format
+		 */
+		EATSetNumbericFormat,
+		
+		/**
+		 * The state of geting country code and network Id
+		 */
+		EATGetCountryCodeAndNetwrokId
+		} iState;
+
+};
+#endif //__GETCURRENTNETWORKINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/getfdnstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,83 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file getfdnstatus.h
+// 
+// 
+
+#ifndef __GETFDNSTATUS_H__
+#define __GETFDNSTATUS_H__
+
+//user include
+#include "atcommandcontrolbase.h"
+
+// forward class
+class CATGetFdnStatus;
+class CATGetFdnSupport;
+
+/**
+ * CGetFdnStatus inherits from the CATCommandControlBase class. 
+ *
+ */
+class CGetFdnStatus : public CATCommandControlBase
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+     */ 
+	static CGetFdnStatus* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CGetFdnStatus();
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	void StartRequest();	
+
+protected: 
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CGetFdnStatus(CGlobalPhonemanager& aGloblePhone, 
+		          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	void StartATCommand(CAtCommandBase* iAtCommand);
+	void EndATCommand(CAtCommandBase* aAtCommand);
+	void FdnSupportComplete(const TInt aError);
+	void FdnStatusComplete(const TInt aError);
+private:
+	CATGetFdnSupport* iATGetFdnSupport;
+	CATGetFdnStatus* iATGetFdnStatus;
+	TLtsyATCommandType iATType;
+	/**
+	 *
+	 */
+	enum 
+		{
+		EATNone,
+		EATGetFdnStatus,
+		EATGetFdnSupport
+		} iATCommandName;
+
+};
+#endif //__GETFDNSTATUS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/getoperatorname.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,85 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file getoperatorname.h
+// 
+
+#ifndef __GETOPERATORNAME_H__
+#define __GETOPERATORNAME_H__
+
+//user include
+#include "atcommandcontrolbase.h"
+#include "athelpercommand.h"
+
+// forward class
+class CATNetworkInfo;
+class CATHelperCommand;
+
+/**
+ * CGetOperatorNmae inherits from the CATCommandControlBase class. 
+ *
+ */
+class CGetOperatorNmae : public CATCommandControlBase
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+     */ 
+	static CGetOperatorNmae* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CGetOperatorNmae();
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	void StartRequest();
+	void SetRequestTypeL(TInt aIpc);
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CGetOperatorNmae(CGlobalPhonemanager& aGloblePhone, 
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	void StartATCommand(CAtCommandBase* aAtCommand);
+	void EndATCommand(CAtCommandBase* aAtCommand);
+	void SetOperFormatComplete(const TInt aError);
+	void CtsyDispatcherCallBack(const TInt aError);
+private:
+	CATNetworkInfo* iATNetworkInfo;
+	CATHelperCommand* iATHelperCommand;
+	RMobilePhone::TMobilePhoneNetworkInfoV5 iNetworkInfo;
+	TInt iError;
+	TInt iRequestIpc;
+	TLtsyATCommandType iATType;
+	enum 
+		{
+		EATNone,
+		EATNetworkInfo,
+		EATSimpleCommand
+		} iATCommandName;
+
+};
+#endif //__GETOPERATORNAME_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/getphoneid.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file getphoneid.h
+// 
+
+#ifndef __GETPHONEID_H__
+#define __GETPHONEID_H__
+
+//user include
+#include "atcommandcontrolbase.h"
+
+// forward class
+class CATGetImei;
+class CATGetManufacturer;
+class CATGetModel;
+class CATGetRevision;
+
+/**
+ * CGetPhoneID inherits from the CATCommandControlBase class. 
+ *
+ */
+class CGetPhoneID : public CATCommandControlBase
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+     */ 
+	static CGetPhoneID* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CGetPhoneID();
+
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	void StartRequest();
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CGetPhoneID(CGlobalPhonemanager& aGloblePhone, 
+		        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	void StartATCommand(CAtCommandBase* aAtCommand);
+	void EndATCommand(CAtCommandBase* aAtCommand);
+	void GetImeiComplete(const TInt aError);
+	void GetManufacturerComplete(const TInt aError);
+	void GetModelComplete(const TInt aError);
+private:
+	RMobilePhone::TMobilePhoneIdentityV1 iPhoneId;
+	CATGetImei* iATGetImei;
+	CATGetManufacturer* iATGetManufacturer;
+	CATGetModel* iATGetModel;
+	CATGetRevision* iATGetRevision;
+	TLtsyATCommandType iATType;
+
+};
+#endif //__GETPHONEID_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/initializephone.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,226 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file initializephone.h
+// 
+
+#ifndef __INITIALIZEPHONE_H__
+#define __INITIALIZEPHONE_H__
+
+//user include
+#include "atcommandcontrolbase.h"
+#include "globalphonemanager.h"
+#include "atipcrequestcompleteobserver.h"
+
+// forward class
+class CATGetModemStatus;
+class CATNetworkRegistration;
+class CATSIMCard;
+class CATNetworkInfo;
+class CATGetSignal;
+class CATGetBattery;
+class CATHelperCommand;
+class CATNetworkRegStatusChange;
+class CNotifyBatteryAndSignal;
+class CGetCurrentNetworkInfo;
+
+/**
+ * CInitializePhone inherits from the CATCommandControlBase class. 
+ *
+ */
+class CInitializePhone : public CATCommandControlBase, public MIpcRequestCompleteObserver
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 * @param aNtwkRegStatusChange
+	 * @param aNotifyBatteryAndSignal
+     */
+	static CInitializePhone* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                           CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+		                           CATNetworkRegStatusChange& aNtwkRegStatusChange,
+		                           CNotifyBatteryAndSignal& aNotifyBatteryAndSignal);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CInitializePhone();
+
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	 * Start this request 
+	 */
+	void StartRequest();
+    
+	/**
+     * Execute next request stored in request list
+     */
+	void ExecutePendingRequest();
+	
+	/**
+	 * Get the notification when one of the IPC request was complete
+	 */
+	virtual void NotifyIpcRequestComplete(TInt aIpcId);
+	
+	/**
+	 * Append the IPC request to pending request list
+	 */
+	void AppendIpcRequestToPendingListL(TInt aIpc);
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 * @param aNtwkRegStatusChange
+	 * @param aNotifyBatteryAndSignal
+	 */
+	CInitializePhone(CGlobalPhonemanager& aGloblePhone, 
+		              CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+		              CATNetworkRegStatusChange& aNtwkRegStatusChange,
+		              CNotifyBatteryAndSignal& aNotifyBatteryAndSignal);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+    /**
+     * Execute next AT commane 
+     * 
+     * @param aATString The context of excuting aommand
+     * @param aATType Identify the Type of AT Command
+     */
+	void ExecuteNextATHelpCommand(const TDesC8& aATString,TLtsyATCommandType aATType);
+	/**
+	 * Start an AT Command
+	 * @param  aAtCommand the AT Command class 
+	 */
+	void StartATCommand(CAtCommandBase* aAtCommand);
+	/**
+	 * End an AT Command
+	 * @param  aAtCommand  the AT Command class 
+	 */
+	void CompleteATCommand(CAtCommandBase* aAtCommand);
+	/**
+	 * Get modem status command finished
+	 */
+	void ModemStatusComplete(TInt aError);
+	/**
+	 * Set oper format command finished
+	 */
+	void SetOperFormatComplete(const TInt aError);
+	/**
+	 * Get network infomation command finished
+	 */
+	void NetworkInfoComplete();
+	/**
+	 * Get phone's signal infomation command finished
+	 */
+	void GetSignalComplete(TInt aError);
+	/**
+	 * Get phone's battery infomation command finished
+	 */
+	void GetBatteryComplete(TInt aError);
+	
+private:
+    /**
+     * AT type is used to identify AT command
+     */
+    TInt iATType;
+    
+    /**
+     * Check if the current executed pending request is still running
+     */
+    TBool iIsPendingRequestStillRunning;
+    
+    /**
+     * Get the current modem status
+     * Own
+     */
+	CATGetModemStatus* iATGetModemStatus;
+	
+	/**
+	 * Get the current network registration status
+	 * Own
+	 */
+	CATNetworkRegistration* iNetworkRegStatus;
+	
+	/**
+	 * Get the current SIM card status
+	 * Own
+	 */
+	CATSIMCard* iATSIMCard;
+	
+	/**
+	 * Get the current signal level
+	 * Own
+	 */
+	CATGetSignal* iATGetSignal;
+	
+	/**
+	 * Get the current battery level
+	 * Own
+	 */
+	CATGetBattery* iATGetBattery;
+	
+	/**
+	 * Helper command for get a set of phone info
+	 * Own
+	 */
+	CATHelperCommand* iATHelperCommand;
+	
+	/**
+	 * Get the current netwok info
+	 * Own
+	 */
+	CGetCurrentNetworkInfo* iATGetCurNetworkInfo;
+	
+	/**
+	 * Notify the regisration status change
+	 * Not Own
+	 */
+	CATNetworkRegStatusChange& iNtwkRegStatusChange;
+	
+	/**
+	 * Not Own
+	 */
+	CNotifyBatteryAndSignal& iNotifyBatteryAndSignal;
+	
+	/**
+	 * Network infomation
+	 */
+	RMobilePhone::TMobilePhoneNetworkInfoV5 iNetworkInfo; 
+	
+	/**
+	 * Battery infomation
+	 */
+	RMobilePhone::TMobilePhoneBatteryInfoV1 iBatteryInfo; 
+	
+	/**
+	 * Signal infomation
+	 */
+	TTsySignalInfo iSignalInfo;
+	
+	/**
+     * This store the IPC request which should be handled specially as those IPC requests would be coming together.
+     * So we should store one or another before one of those special IPC requests was complete and then execute next request 
+     * retrived from this store.
+     */
+	RArray<TInt> iPendingRequestList;
+};
+#endif //__INITIALIZEPHONE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/inc/notifybatteryandsignal.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,89 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file notifybatteryandsignal.h
+// 
+// 
+
+#ifndef __NOTIFYBATTERYANDSIGNAL_H__
+#define __NOTIFYBATTERYANDSIGNAL_H__
+
+//user include
+#include <callbacktimer.h>
+#include "atcommandcontrolbase.h"
+#include "globalphonemanager.h"
+
+// forward class
+class CATGetBattery;
+class CATGetSignal;
+
+/**
+ * CNotifyBatteryAndSignal inherits from the CATCommandControlBase class. 
+ *
+ */
+class CNotifyBatteryAndSignal : public CATCommandControlBase,
+                                public MTimerObserver
+{
+public:
+    /**
+     * Two-phased constructor.
+     * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+     */
+	static CNotifyBatteryAndSignal* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	 * Destructor
+	 *
+	 */
+	~CNotifyBatteryAndSignal();
+
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	void StartRequest();	
+	void StartTimer(TInt aSecond);
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CNotifyBatteryAndSignal(CGlobalPhonemanager& aGloblePhone, 
+		                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	//From MTimerObserver
+    virtual void TimerRun(TInt aError);
+    
+private:
+	RMobilePhone::TMobilePhoneBatteryInfoV1 iBatteryInfo; 
+	TTsySignalInfo iSignalInfo; 
+	CATGetBattery* iATGetBattery;
+	CATGetSignal* iATGetSignal;
+	/**
+	 *
+	 */
+	CCallbackTimer* iCallbackTimer;	
+	enum 
+		{
+		EATNone,
+		EATGetBattery,
+		EATGetSignal
+		} iATCommandName;
+
+};
+#endif //__NOTIFYBATTERYANDSIGNAL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atdetectnetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,230 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Get the detected network
+
+#include "atdetectnetwork.h"
+#include "mslogger.h"
+
+_LIT8(KDetectNetworkCommand,"AT+COPS=?\r");
+_LIT8(KGetDetectNetworkRepondStr,"+COPS:");
+const TInt KLtsyDetectNetworkReadTimeOut = 80;
+
+// ---------------------------------------------------------------------------
+// NetworkIdL
+// Utility function to translate the 5 digit ASCII network identification 
+// returned by the ME into Mobile Country Code (aCountryCode) and a Mobile 
+// Network Code (aNetworkIdentity) strings. Tbe format returned by the ME is 
+// XXXYY, where XXX represents the Mobile Country Code and YY represents the 
+// Mobile Network Code.
+// ---------------------------------------------------------------------------
+static TInt NetworkIdL(const TDesC8& aCode,
+					   RMobilePhone::TMobilePhoneNetworkCountryCode& aCountryCode, 
+					   RMobilePhone::TMobilePhoneNetworkIdentity& aNetworkIdentity)
+	{
+	if (aCode.Length()!=5)
+		{
+		return KErrGeneral;
+		}
+	
+	aCountryCode.SetLength(3);
+	aCountryCode[0] = aCode[0];
+	aCountryCode[1] = aCode[1];
+	aCountryCode[2] = aCode[2];
+
+	aNetworkIdentity.SetLength(2);
+	aNetworkIdentity[0] = aCode[3];
+	aNetworkIdentity[1] = aCode[4];
+	return KErrNone;
+	}
+// Class CATDetectNetwork
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork* CATDetectNetwork::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATDetectNetwork* self = new(ELeave) CATDetectNetwork(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::CATDetectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork::CATDetectNetwork(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	iReadTimeOut = KLtsyDetectNetworkReadTimeOut;
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iList= NULL;
+	iCommandRunning = EFalse;
+	iCommandCancel = EFalse;
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::~CATDetectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork::~CATDetectNetwork()
+	{
+	if(iList)
+		{
+		delete iList;
+		iList = NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::StartRequest()
+	{
+	iCommandRunning = ETrue;
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KDetectNetworkCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::CancelCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::CancelCommand()
+	{	
+	iCommandCancel = ETrue;
+	}
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ParseResponseL
+// should be
+// +COPS: (status,"longname","shortname",code),... ,,(list),(list)
+// +COPS: [list of supported (<stat>,long alphanumeric <oper>,short alphanumeric 
+// <oper>,numeric <oper>)s]
+// <stat>:
+// 0 unknown
+// 1 available
+// 2 current
+// 3 forbidden
+// <oper>: string type; <format> indicates if the format is alphanumeric or numeric;
+// long alphanumeric format can be upto 16 characters long and short format up to 8 
+// characters (refer GSM MoU SE.13 [9]); numeric format is the GSM Location Area 
+// Identification number (refer GSM 04.08 [8] subclause 10.5.1.3) which consists of
+// a three BCD digit country code coded as in ITU-T E.212 Annex A [10], plus a two 
+// BCD digit network code, which is administration specific; returned <oper> shall 
+// not be in BCD format, but in IRA characters converted from BCD; hence the number 
+// has structure: (country code digit 3)(country code digit 2)(country code digit 1)
+// (network code digit 2)(network code digit 1)
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+    if(iList)
+    	{
+    	delete iList;
+    	iList = NULL;
+    	}
+	iList=CMobilePhoneNetworkListV2::NewL();
+	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	if( array[0].MatchF(KGetDetectNetworkRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	TInt count = array.Count() - 1;
+	for (TInt i = 1;i < count;i++)
+		{
+		RMobilePhone::TMobilePhoneNetworkInfoV2 info;	
+		// This TSY only supports GSM mode so we can hardcode this
+		info.iMode=RMobilePhone::ENetworkModeGsm;
+		TInt val;
+		TLex8 lex(array[i]);
+		lex.Val(val);
+		info.iStatus = RMobilePhone::TMobilePhoneNetworkStatus(val);
+		i++;
+		info.iLongName.Copy(array[i]);		
+		i++;
+		if(array[i].Length() > info.iShortName.MaxLength())
+			info.iShortName.Copy(array[i].Mid(0,info.iShortName.MaxLength()));			
+		else
+			info.iShortName.Copy(array[i]);
+		i++;
+		User::LeaveIfError(NetworkIdL(array[i],info.iCountryCode, info.iNetworkId));  // MNC and MCC	
+		
+		iList->AddEntryL(info); 
+		}
+	CleanupStack::PopAndDestroy();
+	} //ParseResponseL
+// ---------------------------------------------------------------------------
+// ATDetectNetwork::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	if(iCommandCancel)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetDetectedNetworksCancelComp(0);
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetDetectedNetworksComp(aStatus,*iList);
+		}
+	iCommandRunning = EFalse;
+	iCommandCancel = EFalse;
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetbatteryinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,193 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Queries the ME battery. Retrieves charge level and battery status
+
+#include "atgetbatteryinfo.h"
+#include "mslogger.h"
+#include "requestbase.h"
+
+
+_LIT8(KGetBatteryCommand,"AT+CIND?\r");
+_LIT8(KGetBatteryCmdRepondStr,"+CIND:");
+// Class CATGetBattery
+// ---------------------------------------------------------------------------
+// CATGetBattery::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetBattery* CATGetBattery::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetBattery* self = new(ELeave) CATGetBattery(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::CATGetBattery
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetBattery::CATGetBattery(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetBattery::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetBattery;
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::~CATGetBattery
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetBattery::~CATGetBattery()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetBattery::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetBattery::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetBatteryCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::CATGetBattery
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneBatteryInfoV1 CATGetBattery::GetBatteryinfo()
+	{
+	return iBatteryInfo;
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::CATGetBattery
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TRfStateInfo CATGetBattery::GetRfStateInfo()
+	{
+	return iRfStateInfo;
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetBattery::GetErrorValue()
+	{
+	return iError;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetBattery::ParseResponseL
+// This method parses the modems response to the 'AT+CIND?' command.
+// +CIND: <ind>[,<ind>[,...]]
+// An example response is '+CIND: 3,3,1,1,1,1,1,1,1' where first value 
+// denotes the current battery charge level.
+// "battchg" battery charge level (0-5)
+// "signal" signal quality (0-5)
+// "service" service availability (0-1)
+// "sounder" sounder activity (0-1)
+// "message" message received (0-1)
+// "call" call in progress (0-1)
+// "vox" transmit activated by voice activity (0-1)
+// "roam" roaming indicator (0-1)
+// "smsfull" a short message memory storage in the MT has become full (1), or memory locations are available (0);
+// i.e. the range is (0-1)
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetBattery::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KGetBatteryCmdRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	TInt val = 0;
+	TLex8 lex(array[1]);
+	lex.Val(val);
+	if (val < 0) 
+		{
+		iBatteryInfo.iStatus = RMobilePhone::EPowerStatusUnknown;
+		iBatteryInfo.iChargeLevel = 0;
+		}
+	else	
+		{
+		iBatteryInfo.iStatus = RMobilePhone::EPoweredByBattery;
+		iBatteryInfo.iChargeLevel = val;
+		}
+	TLex8 lexRf(array[3]);
+	lexRf.Val(val);
+	if(val == 1)
+		{
+		iRfStateInfo = ERfsStateInfoNormal;
+		}
+	else
+		{
+		iRfStateInfo = ERfsStateInfoInactive;
+		}
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATGetBattery::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetBattery::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhoneGetBatteryInfoComp(aStatus,iBatteryInfo);
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetcellinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,171 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetCellInfo
+
+//user include
+#include "atgetcellinfo.h"
+#include "mslogger.h"
+
+_LIT8(KGetCellInfoCommand,"AT+CCED=0,7\r");
+_LIT8(KGetCellInfoCmdRepondStr,"+CCED:");
+// Class CATGetCellInfo
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetCellInfo* CATGetCellInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetCellInfo* self = new(ELeave) CATGetCellInfo(aGloblePhone,
+			                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::CATGetCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetCellInfo::CATGetCellInfo(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetCellInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::~CATGetCellInfo(
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetCellInfo::~CATGetCellInfo()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetCellInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetCellInfo::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetCellInfoCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetCellInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KGetCellInfoCmdRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	TInt number = 0;
+	TInt val = 0;
+	TLex8 lexBasic(array[5]);
+	lexBasic.Val(val);
+	iCellInfo.iNmr[number].iBSIC = val;
+	TLex8 lexArfcn(array[6]);
+	lexArfcn.Val(val);
+	iCellInfo.iNmr[number].iARFCN = val;
+	TLex8 lexRxlev(array[7]);
+	lexRxlev.Val(val);
+	iCellInfo.iNmr[number].iRxLEV = val;
+	
+	
+    for(TInt i = 14;i < Count-2;i++ )
+    	{
+    	number++;
+    	i = i + 4;
+    	TInt val = 0;
+    	TLex8 lexBasic(array[i]);
+    	lexBasic.Val(val);
+    	i++;
+    	iCellInfo.iNmr[number].iBSIC = val;
+    	TLex8 lexArfcn(array[i]);
+    	lexArfcn.Val(val);
+    	iCellInfo.iNmr[number].iARFCN = val;
+    	i++;
+    	TLex8 lexRxlev(array[i]);
+    	lexRxlev.Val(val);
+    	iCellInfo.iNmr[number].iRxLEV = val;
+    	}
+	TLex8 lexTa(array[Count-2]);
+	lexTa.Val(val);
+    iCellInfo.iTA = val;
+	
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATGetCellInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetCellInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else if(aEventSource == EWriteCompletion)
+		    {
+		    return;
+		    }
+		}
+	
+	// complete this request
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhoneGetCellInfoComp(aStatus,iCellInfo);
+	if(iIpcCompleteObserver)
+	    {
+	    iIpcCompleteObserver->NotifyIpcRequestComplete(iIpcId);
+	    }
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetfdnstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,136 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetFdnStatus
+
+//user include
+#include "atgetfdnstatus.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetFdnStatusCommand,"AT+CPBS?\r");
+_LIT8(KGetFdnStatusCmdRepondStr,"+CPBS:");
+_LIT8(KFdnString,"FD");
+// Class CATGetFdnStatus
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnStatus* CATGetFdnStatus::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetFdnStatus* self = new(ELeave) CATGetFdnStatus(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::CATGetFdnStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnStatus::CATGetFdnStatus(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnStatus::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iFdnStatus = EFalse;
+	iAtType = ELtsyAT_Phone_GetFdnStatus;
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::~CATGetFdnStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnStatus::~CATGetFdnStatus()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnStatus::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnStatus::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetFdnStatusCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::CATGetFdnStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool CATGetFdnStatus::GetFdnStatus()
+	{
+	return iFdnStatus;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetFdnStatus::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnStatus::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnStatus::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KGetFdnStatusCmdRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	if( array[1].MatchF(KFdnString)!=KErrNotFound)
+		{
+		iFdnStatus = ETrue;
+		}
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetfdnsupport.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,155 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetFdnSupport
+
+//user include
+#include "atgetfdnsupport.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetFdnSupportCommand,"AT+CPBS=?\r");
+_LIT8(KGetFdnSupportCmdRepondStr,"+CPBS:");
+_LIT8(KFdnString,"FD");
+// Class CATGetFdnSupport
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnSupport* CATGetFdnSupport::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetFdnSupport* self = new(ELeave) CATGetFdnSupport(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::CATGetFdnSupport
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnSupport::CATGetFdnSupport(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnSupport::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iFdnSupport = EFalse;
+	iAtType = ELtsyAT_Phone_CheckFdnSupport; 
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::~CATGetFdnSupport
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetFdnSupport::~CATGetFdnSupport()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnSupport::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnSupport::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetFdnSupportCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::CATGetFdnSupport
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool CATGetFdnSupport::GetFdnSupport()
+	{
+	return iFdnSupport;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetFdnSupport::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetFdnSupport::ParseResponseL
+// This method parses the modems response to the 'AT+CPBS=?' command.
+// +CPBS: <pb>
+// <pb> values reserved by this TS:
+// "SM" SIM phonebook
+// "FD" SIM fixdialling-phonebook
+// "ON" SIM (or ME) own numbers (MSISDNs) list (reading of this storage may be 
+// available through +CNUM also) 
+// "EN" SIM (or ME) emergency number (+CPBW is not be applicable for this storage) 
+// "LD" SIM last-dialling-phonebook
+// "MC" ME missed (unanswered received) calls list (+CPBW may not be applicable for 
+// this storage)
+// "ME" ME phonebook
+// "MT" combined ME and SIM phonebook
+// "RC" ME received calls list (+CPBW may not be applicable for this storage)
+// "SN" SDN  (service dailing phonebook)
+// An example response is '+CPBS: "SM","FD","ON","EN" 
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetFdnSupport::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KGetFdnSupportCmdRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	for(TInt i = 1; i < Count; i++)
+		{
+		if( array[i].MatchF(KFdnString)!=KErrNotFound)
+			{
+			iFdnSupport = ETrue;
+			break;
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetimei.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,155 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetImei
+
+#include "atgetimei.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetSerialNumCommand,"AT+CGSN\r");
+_LIT(KSpaceSeparator," ");
+// Class CATGetImei
+// ---------------------------------------------------------------------------
+// CATGetImei::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetImei* CATGetImei::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetImei* self = new(ELeave) CATGetImei(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::CATGetImei
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetImei::CATGetImei(CGlobalPhonemanager& aGloblePhone, 
+	                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetImei::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetImei;
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::~CATGetImei
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetImei::~CATGetImei()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetImei::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetImei::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetSerialNumCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::CATGetImei
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneIdentityV1 CATGetImei::GetPhoneImei()
+	{
+	return iPhoneId;
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetImei::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetImei::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetImei::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	iMoreInfoFlag = EFalse;
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	for(TInt i = 0; i < Count ; i++)
+		{
+		//lex.Assign(array[2]);
+		
+		if  (iMoreInfoFlag)
+			{
+			TBuf<RMobilePhone::KPhoneSerialNumberSize> Data;
+			Data.Zero();
+			TInt remainingBufferSize = RMobilePhone::KPhoneSerialNumberSize - 
+			                           iPhoneId.iSerialNumber.Length() - 1;
+			if(array[i].Length() > remainingBufferSize)
+				{
+				Data.Copy(array[i].Mid(0,remainingBufferSize));
+				}
+			else
+				{
+				Data.Copy(array[i]);
+				}
+			iPhoneId.iSerialNumber.Append(KSpaceSeparator);
+			iPhoneId.iSerialNumber.Append(Data);
+			}
+		else
+			{
+			if(array[i].Length() > RMobilePhone::KPhoneSerialNumberSize)
+				{
+				iPhoneId.iSerialNumber.Copy(array[i].Mid(0,RMobilePhone::KPhoneSerialNumberSize));
+				}
+			else
+				{
+				iPhoneId.iSerialNumber.Copy(array[i]);
+				}
+			iMoreInfoFlag = ETrue;
+			}
+		}
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmanufacturer.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,165 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetManufacturer
+
+#include "atgetmanufacturer.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetManufacturerCommand,"AT+CGMI\r");
+_LIT(KSpaceSeparator," ");
+// Class CATGetManufacturer
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetManufacturer* CATGetManufacturer::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetManufacturer* self = new(ELeave) CATGetManufacturer(aGloblePhone,
+			                                                  aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::CATGetManufacturer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetManufacturer::CATGetManufacturer(CGlobalPhonemanager& aGloblePhone, 
+	                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetManufacturer::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetManufacturer;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::~CATGetManufacturer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetManufacturer::~CATGetManufacturer()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetManufacturer::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetManufacturer::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetManufacturerCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::GetPhoneManufacturer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneIdentityV1 CATGetManufacturer::GetPhoneManufacturer()
+	{
+	return iPhoneId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetManufacturer::GetErrorValue()
+	{
+	return iError;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetManufacturer::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetManufacturer::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	iMoreInfoFlag = EFalse;
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	for(TInt i = 0; i < Count; i++)
+		{
+		//lex.Assign(array[2]);
+		
+		if  (iMoreInfoFlag)
+			{
+			TBuf<RMobilePhone::KPhoneSerialNumberSize> Data;
+			Data.Zero();
+			TInt remainingBufferSize = RMobilePhone::KPhoneSerialNumberSize - 
+			                           iPhoneId.iManufacturer.Length() - 1;
+			if(array[i].Length() > remainingBufferSize)
+				{
+				Data.Copy(array[i].Mid(0,remainingBufferSize));
+				}
+			else
+				{
+				Data.Copy(array[i]);
+				}
+			iPhoneId.iManufacturer.Append(KSpaceSeparator);
+			iPhoneId.iManufacturer.Append(Data);
+			}
+		else
+			{
+			if(array[i].Length() > RMobilePhone::KPhoneSerialNumberSize)
+				{
+				iPhoneId.iManufacturer.Copy(array[i].Mid(0,RMobilePhone::KPhoneSerialNumberSize));
+				}
+			else
+				{
+				iPhoneId.iManufacturer.Copy(array[i]);
+				}
+			iMoreInfoFlag = ETrue;
+			}
+		}
+	iMoreInfoFlag = EFalse;
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmodel.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,156 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModel
+
+#include "atgetmodel.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetModelCommand,"AT+CGMM\r");
+_LIT(KSpaceSeparator," ");
+// Class CATGetModel
+// ---------------------------------------------------------------------------
+// CATGetModel::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModel* CATGetModel::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetModel* self = new(ELeave) CATGetModel(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::CATGetModel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModel::CATGetModel(CGlobalPhonemanager& aGloblePhone, 
+	                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModel::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetModel;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::CATGetModel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModel::~CATGetModel()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModel::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModel::ExecuteCommand( )
+	{
+	iTxBuffer.Copy(KGetModelCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::GetPhoneModel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneIdentityV1 CATGetModel::GetPhoneModel()
+	{
+	return iPhoneId;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetModel::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModel::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModel::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	iMoreInfoFlag = EFalse;
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	for(TInt i = 0; i < Count; i++)
+		{
+		//lex.Assign(array[2]);
+		
+		if  (iMoreInfoFlag)
+			{
+			TBuf<RMobilePhone::KPhoneModelIdSize> Data;
+			Data.Zero();
+			TInt remainingBufferSize = RMobilePhone::KPhoneModelIdSize - 
+									   iPhoneId.iModel.Length() - 1;
+			if(array[i].Length() > remainingBufferSize)
+				{
+				Data.Copy(array[i].Mid(0,remainingBufferSize));
+				}
+			else
+				{
+				Data.Copy(array[i]);
+				}
+			iPhoneId.iModel.Append(KSpaceSeparator);
+			iPhoneId.iModel.Append(Data);
+			}
+		else
+			{
+			if(array[i].Length() > RMobilePhone::KPhoneModelIdSize)
+				{
+				iPhoneId.iModel.Copy(array[i].Mid(0,RMobilePhone::KPhoneModelIdSize));
+				}
+			else
+				{
+				iPhoneId.iModel.Copy(array[i]);
+				}
+			iMoreInfoFlag = ETrue;
+			}
+		}
+	iMoreInfoFlag = EFalse;
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetmodemstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,126 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+
+#include "atgetmodemstatus.h"
+#include "mslogger.h"
+
+
+_LIT8(KATCommand, "AT\r");
+// Class CATGetModemStatus
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModemStatus* CATGetModemStatus::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetModemStatus* self = new(ELeave) CATGetModemStatus(aGloblePhone,
+			                                                aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::CATGetModemStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModemStatus::CATGetModemStatus(CGlobalPhonemanager& aGloblePhone, 
+	                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModemStatus::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_ModemStatus;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::~CATGetModemStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetModemStatus::~CATGetModemStatus()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModemStatus::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModemStatus::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KATCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModemStatus::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetModemStatus::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetModemStatus::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetModemStatus::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone !=aStatus)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(aStatus,ERfsStateInfoInactive);
+		}
+	else 
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(iError,ERfsStateInfoNormal);
+			}
+		else
+			{
+			return;
+			}
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,250 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// Basic GSM Network and Operator information Implementation file.
+// 
+// This file contains the implementation of the CATNetworkInfo, CATDetectNetwork,
+// CNotifyNetworkRegistrationStatusChange and CCurrentNetworkChangedNotify classes.
+// Find the current Network Operator in Numeric, Long and Short formats.
+// NB - Some phones do not fully support all the formats, if any. The commands are 
+// supported implement this command. Valid responses are set in the TMobilePhoneLocationAreaV1
+// and the TMobilePhoneNetworkInfoV1 structures and the Network's status is set to Current.
+
+
+
+#include <etelmm.h>
+#include "atgetnetworkinfo.h"
+#include "mslogger.h"
+
+_LIT8(KGetCurrentNetworkInfoCommand, "AT+COPS?\r");
+_LIT8(KGetCurrentNetworkInfoResponse,"+COPS:");
+/**
+ * Utility function to translate the 5 digit ASCII network identification returned by the ME
+ * into Mobile Country Code (aCountryCode) and a Mobile Network Code (aNetworkIdentity) strings.
+ * Tbe format returned by the ME is XXXYY, where XXX represents the Mobile Country Code and YY
+ * represents the Mobile Network Code.
+ */
+static TInt NetworkIdL(const TDesC8& aCode,
+					   RMobilePhone::TMobilePhoneNetworkCountryCode& aCountryCode, 
+					   RMobilePhone::TMobilePhoneNetworkIdentity& aNetworkIdentity)
+	{
+	if (aCode.Length()!=5)
+		{
+		return KErrGeneral;
+		}
+	
+	aCountryCode.SetLength(3);
+	aCountryCode[0] = aCode[0];
+	aCountryCode[1] = aCode[1];
+	aCountryCode[2] = aCode[2];
+
+	aNetworkIdentity.SetLength(2);
+	aNetworkIdentity[0] = aCode[3];
+	aNetworkIdentity[1] = aCode[4];
+	return KErrNone;
+	}
+// Class CATNetworkInfo
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkInfo* CATNetworkInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNetworkInfo* self = new(ELeave) CATNetworkInfo(aGloblePhone,
+			                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::CATNetworkInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkInfo::CATNetworkInfo(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iGetHomeNwk = EFalse;
+	iAtType = ELtsyAT_Phone_NwkInfo;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::~CATNetworkInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkInfo::~CATNetworkInfo()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::ExecuteCommand( )
+	{
+	iTxBuffer.Copy(KGetCurrentNetworkInfoCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::GetNetWorkInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneNetworkInfoV5 CATNetworkInfo:: GetNetWorkInfo()
+	{
+	return iNetworkInfo;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATNetworkInfo::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::SetToGetHomeNwk
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::SetToGetHomeNwk()
+	{
+	iGetHomeNwk = ETrue;
+	}
+/**
+ * This method parses the modems response to the 'AT+CGREG?' command.
+ * An example response is '+CGREG: 0,1' where second value denotes the
+ * current registration status.
+ */
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	
+	if( array[0].MatchF(KGetCurrentNetworkInfoResponse)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	TInt val = 0;
+	TLex8 lex(array[1]);
+	lex.Val(val);
+	iPhoneGlobals.iPhoneStatus.iLocalNetworkSel.iMethod = RMobilePhone::TMobilePhoneSelectionMethod(val);
+	if(Count > 2)
+		{
+		TLex8 lex1(array[2]);
+		lex1.Val(iNameFormat);
+		switch (iNameFormat)
+			{
+			case 0:
+				if(array[3].Length() > iNetworkInfo.iLongName.MaxLength())
+					iNetworkInfo.iLongName.Copy(array[3].Mid(0,iNetworkInfo.iLongName.MaxLength()));			
+				else
+					iNetworkInfo.iLongName.Copy(array[3]);
+				break;
+			case 1:
+				if(array[2].Length() > iNetworkInfo.iShortName.MaxLength())
+					iNetworkInfo.iShortName.Copy(array[3].Mid(0,iNetworkInfo.iShortName.MaxLength()));			
+				else 
+					iNetworkInfo.iShortName.Copy(array[3]);	
+				break;
+			case 2:
+				/*if(array[2].Length() > iNetworkInfo.iShortName.MaxLength())
+					iNetworkInfo.iShortName.Copy(array[3].Mid(0,iNetworkInfo.iShortName.MaxLength()));			
+				else 
+					iNetworkInfo.iShortName.Copy(array[3]);*/	
+				User::LeaveIfError(NetworkIdL(array[3],iNetworkInfo.iCountryCode, iNetworkInfo.iNetworkId));
+				break;
+			default:
+				User::Leave(KErrGeneral);
+				break;
+				}
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	iNetworkInfo.iStatus=RMobilePhone::ENetworkStatusCurrent;
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	iPhoneGlobals.iPhoneStatus.iCurrentNetwork = iNetworkInfo;
+	if(iGetHomeNwk)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetHomeNetworkComp(aStatus,iNetworkInfo);
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetCurrentNetworkInfoComp(aStatus,
+								iNetworkInfo, 
+								iPhoneGlobals.iPhoneStatus.iLocationArea);
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+//
+// End of file
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkregistrationstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,182 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATNetworkRegistration
+
+#include <et_phone.h>
+
+#include "atgetnetworkregistrationstatus.h"
+#include "mslogger.h"
+#include "atnetworkregstatuschange.h"
+
+
+_LIT8(KATGetNetworkRegCommand, "AT+CREG?\r");
+_LIT8(KATGetNetworkRegResponse,"+CREG:");
+// Class CATNetworkRegistration
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegistration* CATNetworkRegistration::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNetworkRegistration* self = new(ELeave) CATNetworkRegistration(aGloblePhone,
+			                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegistration::CATNetworkRegistration(CGlobalPhonemanager& aGloblePhone, 
+	                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegistration::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_NwkRegStatus;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::~CATNetworkRegistration
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegistration::~CATNetworkRegistration()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegistration::StartRequest()
+	{
+	ExecuteCommand();	
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegistration::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KATGetNetworkRegCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATNetworkRegistration::GetErrorValue()
+	{
+	return iError;
+	}
+/**
+ * This method parses the modems response to the 'AT+CGREG?' command.
+ * An example response is '+CGREG: 0,1' where second value denotes the
+ * current registration status.
+ */
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegistration::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+		{
+		if (CurrentLine().Match(KLtsyOkString) != 0)
+			{
+			iError = KErrGeneral;
+			return ;
+			}
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,PrecedingLine());
+		TInt Count = array.Count();
+		if (Count < 1)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return ;
+			}
+		if( array[0].MatchF(KATGetNetworkRegResponse)==KErrNotFound)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return ;
+			}
+		// Skip over one parameter
+		
+		TInt val = 0;
+		TLex8 lex(array[2]);
+		lex.Val(val);
+		// Convert scond value to equivalent EtelMM enum
+		switch(val)
+			{
+			case 0:		
+				iRegistrationStatus = RMobilePhone::ENotRegisteredNoService;
+				break;
+			case 1:		
+				iRegistrationStatus = RMobilePhone::ERegisteredOnHomeNetwork;
+				break;
+			case 2:		
+				iRegistrationStatus = RMobilePhone::ENotRegisteredSearching;
+				break;
+			case 3:		
+				iRegistrationStatus = RMobilePhone::ERegistrationDenied;
+				break;
+			case 4:		
+				iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
+				break;
+			case 5:		
+				iRegistrationStatus = RMobilePhone::ERegisteredRoaming;
+				break;
+			default:
+				iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
+				break;
+			}
+		iPhoneGlobals.iPhoneStatus.iRegistrationStatus = iRegistrationStatus;
+		CleanupStack::PopAndDestroy(&array);
+		iError = KErrNone;
+	} //ParseResponseL
+// ---------------------------------------------------------------------------
+// CATNetworkRegistration::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegistration::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhoneGetNetworkRegistrationStatusComp(aStatus,iRegistrationStatus);
+	if(iIpcCompleteObserver)
+        {
+        iIpcCompleteObserver->NotifyIpcRequestComplete(iIpcId);
+        }
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetphonecellinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,149 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATGetPhoneCellInfo
+
+#include "atgetphonecellinfo.h"
+#include "mslogger.h"
+
+_LIT8(KGetPhoneCellInfoCommand,"AT+CCED=0,5\r");
+_LIT8(KGetPhoneCellInfoCmdRepondStr,"+CCED:");
+// Class CATGetPhoneCellInfo
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::NewL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetPhoneCellInfo* CATGetPhoneCellInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetPhoneCellInfo* self = new(ELeave) CATGetPhoneCellInfo(aGloblePhone,
+			                                                    aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::CATGetPhoneCellInfo
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetPhoneCellInfo::CATGetPhoneCellInfo(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::ConstructL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetPhoneCellInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::~CATGetPhoneCellInfo
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetPhoneCellInfo::~CATGetPhoneCellInfo()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::StartRequestL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetPhoneCellInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::ExecuteCommand
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetPhoneCellInfo::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KGetPhoneCellInfoCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::ParseResponseL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetPhoneCellInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KGetPhoneCellInfoCmdRepondStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	iCellInfo.iMode = RMobilePhone::ECellModeGsm;
+	TInt val = 0;
+	TLex8 lex(array[4]);
+	lex.Val(val);
+	iCellInfo.iCellId = val;
+	TLex8 lex1(array[14]);
+	lex1.Val(val);
+	iCellInfo.iTimingAdvance = val;
+	
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATGetPhoneCellInfo::EventSignal
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetPhoneCellInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	// handle IO error
+	if(aStatus != KErrNone)
+	    {
+	    iPhoneGlobals.iEventSignalActive = EFalse;
+        iCtsyDispatcherCallback.CallbackPhoneGetPhoneCellInfoComp(aStatus,iCellInfo);
+        CAtCommandBase::Complete();
+        if(iIpcCompleteObserver)
+            {
+            iIpcCompleteObserver->NotifyIpcRequestComplete(iIpcId);
+            }
+	    }
+	else if(aEventSource == EReadCompletion)
+	    {
+        iPhoneGlobals.iEventSignalActive = EFalse;
+        iCtsyDispatcherCallback.CallbackPhoneGetPhoneCellInfoComp(iError,iCellInfo);
+        CAtCommandBase::Complete();
+        if(iIpcCompleteObserver)
+            {
+            iIpcCompleteObserver->NotifyIpcRequestComplete(iIpcId);
+            }
+	    }
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetrevision.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,157 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATGetRevision
+
+#include "atgetrevision.h"
+#include "mslogger.h"
+
+_LIT8(KGetRevisionCommand,"AT+CGMR\r");
+_LIT(KSpaceSeparator," ");
+// CATGetRevision
+// ---------------------------------------------------------------------------
+// CATGetRevision::NewL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetRevision* CATGetRevision::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetRevision* self = new(ELeave) CATGetRevision(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::CATGetRevision
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetRevision::CATGetRevision(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::ConstructL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetRevision::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetRevision;
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::~CATGetRevision
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+CATGetRevision::~CATGetRevision()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::StartRequest
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetRevision::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::ExecuteCommand
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetRevision::ExecuteCommand( )
+	{
+	iTxBuffer.Copy(KGetRevisionCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::GetPhoneRevision
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobilePhoneIdentityV1 CATGetRevision::GetPhoneRevision()
+	{
+	return iPhoneId;
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::GetErrorValue
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetRevision::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetRevision::ParseResponseL
+// other CATGetPhoneCellInfo were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetRevision::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	iMoreInfoFlag = EFalse;
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	for(TInt i = 0; i < Count; i++)
+		{
+		//lex.Assign(array[2]);
+		
+		if  (iMoreInfoFlag)
+			{
+			TBuf<RMobilePhone::KPhoneSerialNumberSize> Data;
+			Data.Zero();
+			TInt remainingBufferSize = RMobilePhone::KPhoneSerialNumberSize - 
+			                           iPhoneId.iRevision.Length() - 1;
+			if(array[i].Length() > remainingBufferSize)
+				{
+				Data.Copy(array[i].Mid(0,remainingBufferSize));
+				}
+			else
+				{
+				Data.Copy(array[i]);
+				}
+			iPhoneId.iRevision.Append(KSpaceSeparator);
+			iPhoneId.iRevision.Append(Data);
+			}
+		else
+			{
+			if(array[i].Length() > RMobilePhone::KPhoneSerialNumberSize)
+				{
+				iPhoneId.iRevision.Copy(array[i].Mid(0,RMobilePhone::KPhoneSerialNumberSize));
+				}
+			else
+				{
+				iPhoneId.iRevision.Copy(array[i]);
+				}
+			iMoreInfoFlag = ETrue;
+			}
+		}
+	iMoreInfoFlag = EFalse;
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetsignalstrength.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,172 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATGetSignal
+
+#include "atgetsignalstrength.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetSignalQualityCommand,"AT+CSQ\r");
+_LIT8(KGetSingalCommandRepStr,"+CSQ:");
+// Class CATGetSignal
+// ---------------------------------------------------------------------------
+// CATGetSignal::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetSignal* CATGetSignal::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGetSignal* self = new(ELeave) CATGetSignal(aGloblePhone,
+			                                      aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::CATGetSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetSignal::CATGetSignal(CGlobalPhonemanager& aGloblePhone, 
+	                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetSignal::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_GetSignal;
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::~CATGetSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGetSignal::~CATGetSignal()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetSignal::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetSignal::ExecuteCommand( )
+	{
+	iTxBuffer.Copy(KGetSignalQualityCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::getSignalInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TTsySignalInfo CATGetSignal::getSignalInfo()
+	{
+	return iSignalInfo;
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGetSignal::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetSignal::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return ;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count <= 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	if( array[0].MatchF(KGetSingalCommandRepStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	TInt val = 0;
+	TLex8 lex(array[1]);
+	lex.Val(val);
+	if (val < 0) 
+		{
+		iSignalInfo.iSignalStrength = 0;
+		}
+	else	
+		{
+		iSignalInfo.iSignalStrength = val;
+		}
+	TLex8 lex1(array[2]);
+	lex1.Val(val);
+	if (val < 0) 
+		{
+		iSignalInfo.iBar = 0;
+		}
+	else	
+		{
+		iSignalInfo.iBar = val;
+		}
+
+	CleanupStack::PopAndDestroy();
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATGetSignal::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGetSignal::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhoneGetSignalStrengthComp(aStatus,
+							                                   iSignalInfo.iSignalStrength,
+							                                   iSignalInfo.iBar);
+	}
+//
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetsimstatusready.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,123 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATSIMCard
+
+#include "atgetsimstatusready.h"
+#include "mslogger.h"
+
+
+_LIT8(KGetSIMCardCommand, "AT+CCID=?;\r");
+// Class CATSIMCard
+// ---------------------------------------------------------------------------
+// CATSIMCard::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSIMCard* CATSIMCard::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATSIMCard* self = new(ELeave) CATSIMCard(aGloblePhone,
+			                                  aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::CATSIMCard
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSIMCard::CATSIMCard(CGlobalPhonemanager& aGloblePhone, 
+	                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSIMCard::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Phone_SimCardStatus;
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::~CATSIMCard(
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSIMCard::~CATSIMCard()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSIMCard::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSIMCard::ExecuteCommand( )
+	{
+	iTxBuffer.Copy(KGetSIMCardCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSIMCard::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATSIMCard::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATSIMCard::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSIMCard::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhoneBootNotifySimStatusReadyComp(aStatus);
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atnetworkregstatuschange.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,160 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATNetworkRegStatusChange
+
+//user include
+#include "atnetworkregstatuschange.h"
+
+_LIT8(KATGetNetworkRegResponse,"+CREG:*");
+
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegStatusChange* CATNetworkRegStatusChange::NewL(CGlobalPhonemanager& aGloblePhone,
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNetworkRegStatusChange* self = CATNetworkRegStatusChange::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegStatusChange* CATNetworkRegStatusChange::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNetworkRegStatusChange* self = new (ELeave) CATNetworkRegStatusChange(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::~CATNetworkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegStatusChange::~CATNetworkRegStatusChange()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegStatusChange::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	RemoveAllExpectString();
+	AddExpectStringL(KATGetNetworkRegResponse);
+	Enable();
+	}
+
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::CATNetworkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNetworkRegStatusChange::CATNetworkRegStatusChange(CGlobalPhonemanager& aGloblePhone,
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+							   :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::CATNetworkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegStatusChange::Enable()
+	{
+	AddUnsolicitedAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::CATNetworkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegStatusChange::Disable()
+	{
+	RemoveAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegStatusChange::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,CurrentLine());
+	ClearCurrentLine();
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	if( array[0].MatchF(KATGetNetworkRegResponse)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	// Skip over one parameter
+	
+	TInt val = 0;
+	TLex8 lex(array[1]);
+	lex.Val(val);
+	// Convert scond value to equivalent EtelMM enum
+	switch(val)
+		{
+		case 0:		
+			iRegistrationStatus = RMobilePhone::ENotRegisteredNoService;
+			break;
+		case 1:		
+			iRegistrationStatus = RMobilePhone::ERegisteredOnHomeNetwork;
+			break;
+		case 2:		
+			iRegistrationStatus = RMobilePhone::ENotRegisteredSearching;
+			break;
+		case 3:		
+			iRegistrationStatus = RMobilePhone::ERegistrationDenied;
+			break;
+		case 4:		
+			iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
+			break;
+		case 5:		
+			iRegistrationStatus = RMobilePhone::ERegisteredRoaming;
+			break;
+		default:
+			iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
+			break;
+		}
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATNetworkRegStatusChange::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNetworkRegStatusChange::EventSignal(TAtEventSource /*aEventSource*/, TInt /*aStatus*/)
+	{
+	iCtsyDispatcherCallback.CallbackPhoneNotifyNetworkRegistrationStatusChangeInd(iError,
+				            iRegistrationStatus);
+	}
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atnotifycellinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,164 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATNotifyCellInfo
+
+//user include
+#include "atnotifycellinfo.h"
+
+_LIT8(KATNotifyCellInfo,"+CCED:*");
+
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNotifyCellInfo* CATNotifyCellInfo::NewL(CGlobalPhonemanager& aGloblePhone,
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNotifyCellInfo* self = CATNotifyCellInfo::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNotifyCellInfo* CATNotifyCellInfo::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATNotifyCellInfo* self = new (ELeave) CATNotifyCellInfo(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::~CATNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNotifyCellInfo::~CATNotifyCellInfo()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNotifyCellInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	RemoveAllExpectString();
+	AddExpectStringL(KATNotifyCellInfo);
+	Enable();
+	}
+
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::CATNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATNotifyCellInfo::CATNotifyCellInfo(CGlobalPhonemanager& aGloblePhone,
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+							   :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::CATNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNotifyCellInfo::Enable()
+	{
+	AddUnsolicitedAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::CATNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNotifyCellInfo::Disable()
+	{
+	RemoveAtCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNotifyCellInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,CurrentLine());
+	ClearCurrentLine();
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if( array[0].MatchF(KATNotifyCellInfo)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	TInt number = 0;
+	TInt val = 0;
+	TLex8 lexBasic(array[5]);
+	lexBasic.Val(val);
+	iCellInfo.iNmr[number].iBSIC = val;
+	TLex8 lexArfcn(array[6]);
+	lexArfcn.Val(val);
+	iCellInfo.iNmr[number].iARFCN = val;
+	TLex8 lexRxlev(array[7]);
+	lexRxlev.Val(val);
+	iCellInfo.iNmr[number].iRxLEV = val;
+	
+	
+    for(TInt i = 14;i < Count-2;i++ )
+    	{
+    	number++;
+    	i = i + 4;
+    	TInt val = 0;
+    	TLex8 lexBasic(array[i]);
+    	lexBasic.Val(val);
+    	i++;
+    	iCellInfo.iNmr[number].iBSIC = val;
+    	TLex8 lexArfcn(array[i]);
+    	lexArfcn.Val(val);
+    	iCellInfo.iNmr[number].iARFCN = val;
+    	i++;
+    	TLex8 lexRxlev(array[i]);
+    	lexRxlev.Val(val);
+    	iCellInfo.iNmr[number].iRxLEV = val;
+    	}
+	TLex8 lexTa(array[Count-2]);
+	lexTa.Val(val);
+    iCellInfo.iTA = val;
+	
+	
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+// ---------------------------------------------------------------------------
+// CATNotifyCellInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATNotifyCellInfo::EventSignal(TAtEventSource /*aEventSource*/, TInt /*aStatus*/)
+	{
+	iCtsyDispatcherCallback.CallbackPhoneNotifyCellInfoChangedInd(iError,iCellInfo);
+	}
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atselectnetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,190 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATSelectNetwork
+
+#include "atselectnetwork.h"
+#include "mslogger.h"
+
+_LIT8(KSelectNetworkCommand,"AT+COPS=1,2,%d\r");
+// Class CATSelectNetwork
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetwork* CATSelectNetwork::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATSelectNetwork* self = new(ELeave) CATSelectNetwork(aGloblePhone,
+			                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::CATSelectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetwork::CATSelectNetwork(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iCommandRunning = EFalse;
+	iCommandCancel = EFalse;
+	iCommandSetBack = EFalse;
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::~CATSelectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetwork::~CATSelectNetwork()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::StartRequest()
+	{
+	iCommandRunning = ETrue;
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CATSelectNetwork::ExecuteCommand called"));
+	TBuf<5> tmpbuf;
+	tmpbuf.Append(iNetworkManualSelection.iCountry);
+	tmpbuf.Append(iNetworkManualSelection.iNetwork);
+    TLex lex(tmpbuf);
+    TInt tmpNum;
+    lex.Val( tmpNum );
+	LOGTEXT2(_L8("tmpNum=%d"),tmpNum);
+	iTxBuffer.Format(KSelectNetworkCommand,tmpNum);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::CancelCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::CancelCommand()
+	{	
+	iCommandCancel = ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::ExecuteSetBackCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::ExecuteSetBackCommand()
+	{
+	LOGTEXT(_L8("CATSelectNetwork::ExecuteSetBackCommand called"));
+	TBuf<5> tmpbuf;
+	tmpbuf.Append(iPhoneGlobals.iPhoneStatus.iCurrentNetwork.iCountryCode);
+	tmpbuf.Append(iPhoneGlobals.iPhoneStatus.iCurrentNetwork.iNetworkId);
+    TLex lex(tmpbuf);
+    TInt tmpNum;
+    lex.Val( tmpNum );
+	LOGTEXT2(_L8("tmpNum=%d"),tmpNum);
+	iTxBuffer.Format(KSelectNetworkCommand,tmpNum);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::SetNetworkSelection
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::SetNetworkSelection(const RMobilePhone::TMobilePhoneNetworkManualSelection& aNetworkManualSelection)
+	{
+	iNetworkManualSelection = aNetworkManualSelection;
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetwork::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetwork::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	if(iCommandCancel) //User runing cancel cmd
+		{
+		//We should set back network when selected network success
+		if((KErrNone ==aStatus)&&(!iCommandSetBack))
+			{
+			iCommandSetBack = ETrue;
+			//Set parameter
+			ExecuteSetBackCommand();
+			return;
+			}
+		if((iCommandSetBack)&&(KErrNone !=aStatus))
+			{
+			//Cancel fail because set back fail 
+			//Current Network Changed
+			iCtsyDispatcherCallback.CallbackPhoneSelectNetworkCancelComp(aStatus);
+			}
+		else
+			{
+			//First selectrd fail or set back success
+			//Cancel OK
+			iCtsyDispatcherCallback.CallbackPhoneSelectNetworkCancelComp(KErrNone);
+			}
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackPhoneSelectNetworkComp(aStatus);
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCommandRunning = EFalse;
+	iCommandCancel = EFalse;
+	iCommandSetBack = EFalse;
+	}
+//
+// End of file
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atselectnetworkmode.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,143 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATSelectNetworkMode
+
+
+#include "atselectnetworkmode.h"
+#include "mslogger.h"
+
+
+_LIT8(KATSelectNetworkMode,"AT+COPS=%d\r");
+// Class CATSelectNetworkMode
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetworkMode* CATSelectNetworkMode::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATSelectNetworkMode* self = new(ELeave) CATSelectNetworkMode(aGloblePhone,
+			                                                      aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::CATSelectNetworkMode
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetworkMode::CATSelectNetworkMode(CGlobalPhonemanager& aGloblePhone, 
+	                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::~CATSelectNetworkMode
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSelectNetworkMode::~CATSelectNetworkMode()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CATSelectNetworkMode::ExecuteCommand called"));
+	iTxBuffer.Format(KATSelectNetworkMode,iNetworkSelection);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::SetNetworkSelection
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::SetNetworkSelection(const TInt aNetworkSelection)
+	{
+	iNetworkSelection = aNetworkSelection;
+	}
+// ---------------------------------------------------------------------------
+// CATSelectNetworkMode::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSelectNetworkMode::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	switch (iNetworkSelection)
+		{
+	case 0:
+		iCtsyDispatcherCallback.CallbackPhoneSetNetworkSelectionSettingComp(aStatus, 
+				                RMobilePhone::ENetworkSelectionAutomatic);
+		break;
+	case 1:
+		iCtsyDispatcherCallback.CallbackPhoneSetNetworkSelectionSettingComp(aStatus, 
+				                RMobilePhone::ENetworkSelectionManual);
+		break;
+	default:
+		iCtsyDispatcherCallback.CallbackPhoneSetNetworkSelectionSettingComp(aStatus, 
+				                RMobilePhone::ENetworkSelectionUnknown);
+		break;
+		}
+	}
+//
+// End of file
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atsetnotifycell.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,130 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CATSetNotifyCellInfo
+
+#include "atsetnotifycell.h"
+#include "mslogger.h"
+#include "atgetphonecellinfo.h"
+#include "atnotifycellinfo.h"
+
+
+_LIT8(KATSetCellCommand, "AT+CCED=0,1\r");
+// Class CATSetNotifyCellInfo
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSetNotifyCellInfo* CATSetNotifyCellInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATSetNotifyCellInfo* self = new(ELeave) CATSetNotifyCellInfo(aGloblePhone,
+			                                                      aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::CATSetNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSetNotifyCellInfo::CATSetNotifyCellInfo(CGlobalPhonemanager& aGloblePhone, 
+	                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSetNotifyCellInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::~CATSetNotifyCellInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATSetNotifyCellInfo::~CATSetNotifyCellInfo()
+	{
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSetNotifyCellInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSetNotifyCellInfo::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KATSetCellCommand);
+	Write();
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSetNotifyCellInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+//// ---------------------------------------------------------------------------
+//// CATSetNotifyCellInfo::GetErrorValue
+//// other items were commented in a header
+//// ---------------------------------------------------------------------------
+TInt CATSetNotifyCellInfo::GetErrorValue()
+	{
+	return iError;
+	}
+// ---------------------------------------------------------------------------
+// CATSetNotifyCellInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATSetNotifyCellInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone == aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+		    {
+		    return;
+		    }
+		}
+	
+	CAtCommandBase::Complete();
+	iCtsyDispatcherCallback.CallbackPhoneRegisterCellInfoChangeNotificationComp(aStatus);
+	if(iIpcCompleteObserver)
+	    {
+	    iIpcCompleteObserver->NotifyIpcRequestComplete(iIpcId);
+	    }
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/getcurrentnetworkinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,347 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CGetCurrentNetworkInfo
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "getcurrentnetworkinfo.h"
+#include "mslogger.h"
+#include "atgetnetworkinfo.h"
+
+// define the AT command format
+_LIT8(KATSetFormatForLongName,  "AT+COPS=3,0\r");
+_LIT8(KATSetFormatForShortName, "AT+COPS=3,1\r");
+_LIT8(KATSetNumbericFormat,     "AT+COPS=3,2\r");
+
+// Class CGetCurrentNetworkInfo
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetCurrentNetworkInfo* CGetCurrentNetworkInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CGetCurrentNetworkInfo* self = new(ELeave) CGetCurrentNetworkInfo(aGloblePhone,
+			                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::CGetCurrentNetworkInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetCurrentNetworkInfo::CGetCurrentNetworkInfo(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy Phone Control] Starting CATAnswer::ConstructL"));
+	iState = EATUnknown;
+	iATNetworkInfo = CATNetworkInfo::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATHelperCommand = CATHelperCommand::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::~CGetCurrentNetworkInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetCurrentNetworkInfo::~CGetCurrentNetworkInfo()
+	{
+	LOGTEXT(_L8("[Ltsy Phone Control] Starting CATAnswer::~CGetCurrentNetworkInfo()"));
+	delete iATHelperCommand;
+	iATHelperCommand = NULL;
+	delete iATNetworkInfo;
+	iATNetworkInfo = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	
+	switch(iState)
+		{
+		case EATSetLongFormat:
+		    LOGTEXT(_L8("[Ltsy Phone Control] complete EATSetLongFormat"));
+		    CompeteATCommand(iATHelperCommand);
+		    if(aStatus != KErrNone)
+		        {
+		        HandleGetCurNetworkError(aStatus);
+		        }
+		    else 
+		        {
+		        aStatus = iATHelperCommand->GetErrorValue();
+		        if(aStatus != KErrNone)
+		            {
+		            HandleGetCurNetworkError(aStatus);
+		            }
+		        else
+		            {
+		            iState = EATGetLongName;
+		            GetNetworkLongName();
+		            }
+		        }
+			break;
+			
+		case EATGetLongName:
+		    LOGTEXT(_L8("[Ltsy Phone Control] complete EATGetLongName"));
+		    CompeteATCommand(iATNetworkInfo);
+		    if(aStatus != KErrNone)
+		        {
+		        HandleGetCurNetworkError(aStatus);
+		        }
+		    else
+				{
+				TInt err = iATNetworkInfo->GetErrorValue();
+				if(err != KErrNone)
+				    {
+				    HandleGetCurNetworkError(err);
+				    }
+				else
+				    {
+				    iState = EATSetShortFormat;
+				    SetShortNameFormat();
+				    }
+				}
+			break;
+			
+		case EATSetShortFormat:
+		    LOGTEXT(_L8("[Ltsy Phone Control] complete EATSetShortFormat"));
+		    CompeteATCommand(iATHelperCommand);
+            if(aStatus != KErrNone)
+                {
+                HandleGetCurNetworkError(aStatus);
+                }
+            else 
+                {
+                aStatus = iATHelperCommand->GetErrorValue();
+                if(aStatus != KErrNone)
+                    {
+                    HandleGetCurNetworkError(aStatus);
+                    }
+                else
+                    {
+                    iState = EATGetShortName;
+                    GetNetworkShortName();
+                    }
+                }		    
+		    break;
+		    
+		case EATGetShortName:
+		    LOGTEXT(_L8("[Ltsy Phone Control] complete EATGetShortName"));
+            CompeteATCommand(iATNetworkInfo);
+            if(aStatus != KErrNone)
+                {
+                HandleGetCurNetworkError(aStatus);
+                }
+            else
+                {
+                TInt err = iATNetworkInfo->GetErrorValue();
+                if(err != KErrNone)
+                    {
+                    HandleGetCurNetworkError(err);
+                    }
+                else
+                    {
+                    iState = EATSetNumbericFormat;
+                    SetNumbericFormat();
+                    }
+                }
+		    break;
+		case EATSetNumbericFormat:
+		    LOGTEXT(_L8("[Ltsy Phone Control] complete EATSetNumbericFormat"));
+            CompeteATCommand(iATHelperCommand);
+            if(aStatus != KErrNone)
+                {
+                HandleGetCurNetworkError(aStatus);
+                }
+            else 
+                {
+                aStatus = iATHelperCommand->GetErrorValue();
+                if(aStatus != KErrNone)
+                    {
+                    HandleGetCurNetworkError(aStatus);
+                    }
+                else
+                    {
+                    iState = EATGetCountryCodeAndNetwrokId;
+                    GetCountryCodeAndNetworkId();
+                    }
+                }           
+            break;
+        case EATGetCountryCodeAndNetwrokId:
+            LOGTEXT(_L8("[Ltsy Phone Control] complete EATGetCountryCodeAndNetwrokId"));
+            CompeteATCommand(iATNetworkInfo);
+            if(aStatus != KErrNone)
+                {
+                HandleGetCurNetworkError(aStatus);
+                }
+            else
+                {
+                TInt err = iATNetworkInfo->GetErrorValue();
+                if(err != KErrNone)
+                    {
+                    HandleGetCurNetworkError(err);
+                    }
+                else
+                    {
+                    iState = EATUnknown;
+                    HandleGetCurNetworkComplete();
+                    }
+                }
+            break;
+            
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy Phone Control] Starting CATAnswer::StartRequest()"));
+	iState = EATSetLongFormat;
+	SetLongNameFormat();
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->SetAtCommandObserver(this);
+	aAtCommand->StartRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::EndATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::CompeteATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	}
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::SetLongNameFormat
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::SetLongNameFormat()
+    {
+    iATHelperCommand->SetAtCommandString(KATSetFormatForLongName);
+    StartATCommand(iATHelperCommand);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::SetLongNameFormat
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::GetNetworkLongName()
+    {
+    StartATCommand(iATNetworkInfo);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::SetLongNameFormat
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::SetShortNameFormat()
+    {
+    iATHelperCommand->SetAtCommandString(KATSetFormatForShortName);
+    StartATCommand(iATHelperCommand);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::GetNetworkShortName
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::GetNetworkShortName()
+    {
+    StartATCommand(iATNetworkInfo);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::SetShortNumbericFormat
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::SetNumbericFormat()
+    {
+    iATHelperCommand->SetAtCommandString(KATSetNumbericFormat);
+    StartATCommand(iATHelperCommand);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::SetShortNumbericFormat
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::GetCountryCodeAndNetworkId()
+    {
+    StartATCommand(iATNetworkInfo);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::HandleGetCurNetworkError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::HandleGetCurNetworkError(TInt aError)
+    {
+    iCtsyDispatcherCallback.CallbackPhoneGetCurrentNetworkInfoComp(aError,
+                                    iNetworkInfo, 
+                                    iPhoneGlobals.iPhoneStatus.iLocationArea);
+    }
+
+// ---------------------------------------------------------------------------
+// CGetCurrentNetworkInfo::HandleGetCurNetworkComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetCurrentNetworkInfo::HandleGetCurNetworkComplete()
+    {
+    LOGTEXT(_L8("[Ltsy Phone Control] CGetCurrentNetworkInfo::HandleGetCurNetworkComplete()"));
+    iNetworkInfo = iATNetworkInfo->GetNetWorkInfo();
+    iPhoneGlobals.iPhoneStatus.iCurrentNetwork = iNetworkInfo;
+    iPhoneGlobals.iEventSignalActive = EFalse;
+    iCtsyDispatcherCallback.CallbackPhoneGetCurrentNetworkInfoComp(KErrNone,
+                            iNetworkInfo, 
+                            iPhoneGlobals.iPhoneStatus.iLocationArea);
+    
+    if(iIpcCompleteObserver)
+        {
+        iIpcCompleteObserver->NotifyIpcRequestComplete(MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId);
+        }
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/getfdnstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,165 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CGetFdnStatus
+
+#include "getfdnstatus.h"
+#include "mslogger.h"
+#include "atgetfdnsupport.h"
+#include "atgetfdnstatus.h"
+
+// Class CGetFdnStatus
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetFdnStatus* CGetFdnStatus::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CGetFdnStatus* self = new(ELeave) CGetFdnStatus(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::CGetFdnStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetFdnStatus::CGetFdnStatus(CGlobalPhonemanager& aGloblePhone, 
+	                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::ConstructL()
+	{
+	iATCommandName = EATNone;
+	iATGetFdnStatus = CATGetFdnStatus::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetFdnSupport = CATGetFdnSupport::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::~CGetFdnStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetFdnStatus::~CGetFdnStatus()
+	{
+	delete iATGetFdnStatus;
+	iATGetFdnStatus = NULL;
+	delete iATGetFdnSupport;
+	iATGetFdnSupport = NULL;
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	switch(iATType)
+		{
+		case ELtsyAT_Phone_CheckFdnSupport:
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetFdnSupport->GetErrorValue();
+				}
+			iATGetFdnSupport->RemoveAtCommandObserver();
+			FdnSupportComplete(aStatus);
+			break;
+		case ELtsyAT_Phone_GetFdnStatus: 
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetFdnStatus->GetErrorValue();
+				}
+			FdnStatusComplete(aStatus);
+			EndATCommand(iATGetFdnStatus);
+			delete iATGetFdnStatus;
+			iATGetFdnStatus = NULL;
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			break;
+		default:
+			break;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::StartRequest()
+	{
+	StartATCommand(iATGetFdnSupport);
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::HandleFdnSupport
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::FdnSupportComplete(const TInt aError)
+	{
+	if((KErrNone == aError)&&(iATGetFdnSupport->GetFdnSupport()))
+		{	
+		EndATCommand(iATGetFdnSupport);
+		StartATCommand(iATGetFdnStatus);
+		}
+	else
+		{
+		EndATCommand(iATGetFdnSupport);
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhoneGetFdnStatusComp(aError,RMobilePhone::EFdnUnknown);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::FdnStatusComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::FdnStatusComplete(const TInt aError)
+	{
+	if((KErrNone == aError)&&(iATGetFdnStatus->GetFdnStatus()))
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetFdnStatusComp(aError,RMobilePhone::EFdnActive);
+		}
+	else
+		{
+		iCtsyDispatcherCallback.CallbackPhoneGetFdnStatusComp(aError,RMobilePhone::EFdnNotActive);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->SetAtCommandObserver(this);
+	iATType = aAtCommand->AtType();
+	aAtCommand->StartRequest();
+	}
+// ---------------------------------------------------------------------------
+// CGetFdnStatus::EndATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetFdnStatus::EndATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/getoperatorname.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,195 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CGetOperatorNmae
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "getoperatorname.h"
+#include "mslogger.h"
+#include "atgetnetworkinfo.h"
+
+
+_LIT8(KATSetFormatForOperater, "AT+COPS=3,0\r");
+// Class CGetOperatorNmae
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetOperatorNmae* CGetOperatorNmae::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CGetOperatorNmae* self = new(ELeave) CGetOperatorNmae(aGloblePhone,
+			                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::CGetOperatorNmae
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetOperatorNmae::CGetOperatorNmae(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::ConstructL()
+	{
+	iATCommandName = EATNone;
+	iRequestIpc = 0;
+	iATHelperCommand = CATHelperCommand::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATNetworkInfo = CATNetworkInfo::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::~CGetOperatorNmae
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetOperatorNmae::~CGetOperatorNmae()
+	{
+	delete iATHelperCommand;
+	iATHelperCommand = NULL;
+	delete iATNetworkInfo;
+	iATNetworkInfo = NULL;
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	switch(iATType)
+		{
+		case ELtsyAT_Phone_SetOperFormat: 
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATHelperCommand->GetErrorValue();
+				}
+			SetOperFormatComplete(aStatus);
+			break;
+		case ELtsyAT_Phone_NwkInfo:
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATNetworkInfo->GetErrorValue();
+				if(KErrNone == aStatus)
+					{
+					iNetworkInfo = iATNetworkInfo->GetNetWorkInfo();
+					}
+				}
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			iATNetworkInfo->RemoveAtCommandObserver();
+			EndATCommand(iATNetworkInfo);
+			CtsyDispatcherCallBack(aStatus);
+			break;
+		default:
+			break;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::StartRequest()
+	{
+	iATHelperCommand->SetAtCommandObserver(this);
+	iATHelperCommand->SetAtCommandString(KATSetFormatForOperater);
+	iATHelperCommand->ExecuteCommand();
+	iATType = ELtsyAT_Phone_SetOperFormat;
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::SetRequestTypeL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::SetRequestTypeL(TInt aIpc)
+	{
+	iRequestIpc = aIpc;
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::SetOperFormatComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::SetOperFormatComplete(const TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		EndATCommand(iATHelperCommand);
+		StartATCommand(iATNetworkInfo);
+		}
+	else
+		{
+		EndATCommand(iATHelperCommand);
+		CtsyDispatcherCallBack(aError);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::CtsyDispatcherCallBackL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::CtsyDispatcherCallBack(const TInt aError)
+	{
+	switch(iRequestIpc)
+		{
+		case MLtsyDispatchPhoneGetOperatorName::KLtsyDispatchPhoneGetOperatorNameApiId:
+			iCtsyDispatcherCallback.CallbackPhoneGetOperatorNameComp(aError,  
+					                RMmCustomAPI::EOperatorNameProgrammableLatin, 
+					                iNetworkInfo.iLongName);
+			break;
+		case MLtsyDispatchPhoneGetNetworkProviderName::KLtsyDispatchPhoneGetNetworkProviderNameApiId:
+			iCtsyDispatcherCallback.CallbackPhoneGetNetworkProviderNameComp(aError,  
+					                iNetworkInfo.iLongName);
+			break;
+		case MLtsyDispatchPhoneGetServiceProviderName::KLtsyDispatchPhoneGetServiceProviderNameApiId:
+			{
+			RMobilePhone::TMobilePhoneServiceProviderNameV2 ServiceProvider;
+			ServiceProvider.iSPName = iNetworkInfo.iLongName;
+			iCtsyDispatcherCallback.CallbackPhoneGetServiceProviderNameComp(aError,ServiceProvider);
+			}
+			//CallbackPhoneGetServiceProviderNameComp(TInt aError, const RMobilePhone::TMobilePhoneServiceProviderNameV2& aServiceProvider);
+			break;
+		default:
+			break;
+			
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->SetAtCommandObserver(this);
+	iATType = aAtCommand->AtType();
+	aAtCommand->StartRequest();
+	}
+// ---------------------------------------------------------------------------
+// CGetOperatorNmae::EndATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetOperatorNmae::EndATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/getphoneid.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,221 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CGetPhoneID
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "getphoneid.h"
+#include "mslogger.h"
+#include "atgetimei.h"
+#include "atgetmanufacturer.h"
+#include "atgetmodel.h"
+#include "atgetrevision.h"
+
+
+// Class CGetPhoneID
+// ---------------------------------------------------------------------------
+// CGetPhoneID::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetPhoneID* CGetPhoneID::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CGetPhoneID* self = new(ELeave) CGetPhoneID(aGloblePhone,
+			                                    aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::CGetPhoneID
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetPhoneID::CGetPhoneID(CGlobalPhonemanager& aGloblePhone, 
+	                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::ConstructL()
+	{
+	iATGetImei = CATGetImei::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetManufacturer = CATGetManufacturer::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetModel = CATGetModel::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetRevision = CATGetRevision::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::~CGetPhoneID
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CGetPhoneID::~CGetPhoneID()
+	{
+	delete iATGetImei;
+	iATGetImei = NULL;
+	delete iATGetManufacturer;
+	iATGetManufacturer = NULL;
+	delete iATGetModel;
+	iATGetModel = NULL;
+	delete iATGetRevision;
+	iATGetRevision = NULL;
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	switch(iATType)
+		{
+		case ELtsyAT_Phone_GetImei:
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetImei->GetErrorValue();
+				}
+			GetImeiComplete(aStatus);
+			break;
+		case ELtsyAT_Phone_GetManufacturer: 
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetManufacturer->GetErrorValue();
+				}
+			GetManufacturerComplete(aStatus);
+			break;
+		case ELtsyAT_Phone_GetModel:
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetModel->GetErrorValue();
+				}
+			GetModelComplete(aStatus);
+			break;
+		case ELtsyAT_Phone_GetRevision:
+			if((KErrNone == aStatus)&&(aEventSource == EReadCompletion))
+				{
+				aStatus = iATGetRevision->GetErrorValue();
+				if(KErrNone == aStatus)
+					{
+					RMobilePhone::TMobilePhoneIdentityV1 PhoneId;
+					PhoneId = iATGetRevision->GetPhoneRevision();
+					iPhoneId.iRevision = PhoneId.iRevision;
+					}
+				}
+			iCtsyDispatcherCallback.CallbackPhoneGetPhoneIdComp(aStatus,iPhoneId);
+			EndATCommand(iATGetRevision);
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			break;
+		default:
+			break;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::StartRequest()
+	{	
+	StartATCommand(iATGetImei);
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::GetImeiComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::GetImeiComplete(const TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		RMobilePhone::TMobilePhoneIdentityV1 PhoneId;
+		PhoneId = iATGetImei->GetPhoneImei();
+		iPhoneId.iSerialNumber = PhoneId.iSerialNumber;
+		EndATCommand(iATGetImei);
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		StartATCommand(iATGetManufacturer);
+		}
+	else
+		{
+		EndATCommand(iATGetImei);
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhoneGetPhoneIdComp(aError,iPhoneId);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::GetManufacturerComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::GetManufacturerComplete(const TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		RMobilePhone::TMobilePhoneIdentityV1 PhoneId;
+		PhoneId = iATGetManufacturer->GetPhoneManufacturer();
+		iPhoneId.iManufacturer = PhoneId.iManufacturer;
+		EndATCommand(iATGetManufacturer);
+		StartATCommand(iATGetModel);
+		}
+	else
+		{
+		EndATCommand(iATGetManufacturer);
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhoneGetPhoneIdComp(aError,iPhoneId);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::GetModelComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::GetModelComplete(const TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		RMobilePhone::TMobilePhoneIdentityV1 PhoneId;
+		PhoneId = iATGetModel->GetPhoneModel();
+		iPhoneId.iModel = PhoneId.iModel;
+		EndATCommand(iATGetModel);
+		StartATCommand(iATGetRevision);
+		}
+	else
+		{
+		EndATCommand(iATGetModel);
+		iCtsyDispatcherCallback.CallbackPhoneGetPhoneIdComp(aError,iPhoneId);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->SetAtCommandObserver(this);
+	iATType = aAtCommand->AtType();
+	aAtCommand->StartRequest();
+	}
+// ---------------------------------------------------------------------------
+// CGetPhoneID::EndATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CGetPhoneID::EndATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/initializephone.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,427 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CInitializePhone
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "initializephone.h"
+#include "mslogger.h"
+#include "atgetmodemstatus.h"
+#include "atgetnetworkregistrationstatus.h"
+#include "atgetsimstatusready.h"
+#include "getcurrentnetworkinfo.h"
+#include "atgetnetworkinfo.h"
+#include "atgetsignalstrength.h"
+#include "atgetbatteryinfo.h"
+#include "athelpercommand.h"
+#include "notifybatteryandsignal.h"
+#include "commengine.h"
+#include "atnetworkregstatuschange.h"
+
+_LIT8(KATSMSSetting1,              "AT+CMGF=0\r");
+_LIT8(KATSMSSetting2,              "AT+CNMI=2,2\r");
+_LIT8(KATNwkRegistration,          "AT+CREG=1\r");
+_LIT8(KATGprsNwkRegistration,      "AT+CGREG=1\r");
+_LIT8(KATUnsolicitedWind,          "AT+WIND=16383\r");
+_LIT8(KATSetTDRSingal,             "AT&D1\r");
+// Class CInitializePhone
+// ---------------------------------------------------------------------------
+// CInitializePhone::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitializePhone* CInitializePhone::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+	                                     CATNetworkRegStatusChange& aNtwkRegStatusChange,
+	                                     CNotifyBatteryAndSignal& aNotifyBatteryAndSignal)
+	{
+	CInitializePhone* self = new(ELeave) CInitializePhone(aGloblePhone,
+			                                              aCtsyDispatcherCallback,
+			                                              aNtwkRegStatusChange,
+			                                              aNotifyBatteryAndSignal);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::CInitializePhone
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitializePhone::CInitializePhone(CGlobalPhonemanager& aGloblePhone, 
+	                               CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+	                               CATNetworkRegStatusChange& aNtwkRegStatusChange,
+	                               CNotifyBatteryAndSignal& aNotifyBatteryAndSignal)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback),
+		iNtwkRegStatusChange(aNtwkRegStatusChange),
+		iNotifyBatteryAndSignal(aNotifyBatteryAndSignal)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::ConstructL()
+	{
+	iATGetCurNetworkInfo = CGetCurrentNetworkInfo::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetCurNetworkInfo->SetIpcRequestCompleteObserver(this);
+	
+	iATHelperCommand = CATHelperCommand::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iATGetModemStatus = CATGetModemStatus::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iATSIMCard = CATSIMCard::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iNetworkRegStatus = CATNetworkRegistration::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iNetworkRegStatus->SetIpcRequestCompleteObserver(this);
+	iNetworkRegStatus->SetIpcId(MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId);
+	
+	iATGetSignal = CATGetSignal::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iATGetBattery = CATGetBattery::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iPendingRequestList.Reset();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::~CInitializePhone
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitializePhone::~CInitializePhone()
+	{
+	delete iATGetModemStatus;
+	iATGetModemStatus = NULL;
+
+	delete iNetworkRegStatus;
+	iNetworkRegStatus = NULL;
+
+	delete iATSIMCard;
+	iATSIMCard = NULL;
+
+	delete iATGetCurNetworkInfo;
+    
+	delete iATGetSignal;
+	iATGetSignal = NULL;
+
+	delete iATGetBattery;
+	iATGetBattery = NULL;
+
+	delete iATHelperCommand;
+	iATHelperCommand = NULL;
+	
+	iPendingRequestList.Close();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus)
+	{
+	// we are not going to handle the event of EWriteCompletion if no error was returned
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	
+	TInt err = aStatus;
+	switch(iATType)
+		{
+		case ELtsyAT_Phone_ModemStatus:
+		    if(aStatus == KErrNone)
+		        {
+		        err = iATGetModemStatus->GetErrorValue();
+		        }
+		    
+            ModemStatusComplete(err);
+            CompleteATCommand(iATGetModemStatus);
+			break;
+			
+		case ELtsyAT_Phone_NwkRegStatus: 
+			if(KErrNone == aStatus)
+				{
+				err = iNetworkRegStatus->GetErrorValue();
+				}
+			iCtsyDispatcherCallback.CallbackPhoneGetNetworkRegistrationStatusComp(err,
+								    iPhoneGlobals.iPhoneStatus.iRegistrationStatus);
+			CompleteATCommand(iNetworkRegStatus);
+			break;
+			
+		case ELtsyAT_Phone_SimCardStatus: 
+			if(KErrNone == aStatus)
+				{
+				err = iATSIMCard->GetErrorValue();
+				}
+			iCtsyDispatcherCallback.CallbackPhoneBootNotifySimStatusReadyComp(err);
+			CompleteATCommand(iATSIMCard);
+			break;
+			
+		case ELtsyAT_Phone_GetSignal: 
+			if(KErrNone == aStatus)
+				{
+				err = iATGetSignal->GetErrorValue();
+				}
+			GetSignalComplete(err);
+			CompleteATCommand(iATGetSignal);
+			break;
+			
+		case ELtsyAT_Phone_GetBattery:
+			if(KErrNone == aStatus)
+				{
+				err = iATGetBattery->GetErrorValue();
+				}
+			GetBatteryComplete(err);
+			CompleteATCommand(iATGetBattery);
+			break;
+			
+		case ELtsyAT_Phone_SMSSetting1:
+			ExecuteNextATHelpCommand(KATSMSSetting2,ELtsyAT_Phone_SMSSetting2);
+			break;
+			
+		case ELtsyAT_Phone_SMSSetting2:
+			ExecuteNextATHelpCommand(KATNwkRegistration,ELtsyAT_Phone_RegistNwk);
+			break;
+		case ELtsyAT_Phone_RegistNwk:
+			ExecuteNextATHelpCommand(KATGprsNwkRegistration,ELtsyAT_Phone_GPRSRegNwk);
+			break;
+			
+		case ELtsyAT_Phone_GPRSRegNwk:
+			ExecuteNextATHelpCommand(KATSetTDRSingal,ELtsyAT_Phone_SetTDRSingal);
+			break;
+			
+		case ELtsyAT_Phone_SetTDRSingal:
+			ExecuteNextATHelpCommand(KATUnsolicitedWind,ELtsyAT_Phone_SetWind);
+			break;
+			
+		case ELtsyAT_Phone_SetWind:
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			if(iPhoneGlobals.iPhoneStatus.iInitStatus == EPhoneInitialising)
+				{
+				iPhoneGlobals.iPhoneStatus.iInitStatus = EPhoneInitialised;
+				}
+			CompleteATCommand(iATHelperCommand);
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::StartRequest()
+	{
+	StartATCommand(iATGetModemStatus);
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::ExecuteNextRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::ExecutePendingRequest()
+	{
+	if(iPendingRequestList.Count() > 0 && !iIsPendingRequestStillRunning)
+		{
+		// Mark if the next pending request should be run immediately. 
+		// There is a case: If we have alreay known the passed-back results for a certain API, so when such API passed by, 
+		// what is going to to is to complete this IPC request immediately synchronously.
+		TBool nextPendingReqShouldBeExecutedImmediatley = EFalse;
+		
+		// get the IPC number
+		TInt ipc = iPendingRequestList[0];
+		
+		// remove this request from the pending request list
+		iPendingRequestList.Remove(0);
+		
+		switch(ipc)
+			{
+			case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId:				
+				StartATCommand(iATSIMCard);
+				break;
+				
+			case MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId:
+			    iNtwkRegStatusChange.Disable();
+				StartATCommand(iNetworkRegStatus);
+				break;
+				
+			case MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId: 
+				iATGetCurNetworkInfo->StartRequest();
+				break;
+				
+			case MLtsyDispatchPhoneGetNetworkMode::KLtsyDispatchPhoneGetNetworkModeApiId: 
+				iCtsyDispatcherCallback.CallbackPhoneGetNetworkModeComp(0,RMobilePhone::ENetworkModeGsm);
+				nextPendingReqShouldBeExecutedImmediatley = ETrue;
+				break;
+				
+			case MLtsyDispatchPhoneGetNitzInfo::KLtsyDispatchPhoneGetNitzInfoApiId:
+				iCtsyDispatcherCallback.CallbackPhoneGetNitzInfoComp(0,iPhoneGlobals.iPhoneStatus.iMobilePhoneNITZ);
+				nextPendingReqShouldBeExecutedImmediatley = ETrue;
+				break;
+				
+			case MLtsyDispatchPhoneGetSignalStrength::KLtsyDispatchPhoneGetSignalStrengthApiId: 
+				StartATCommand(iATGetSignal);
+				break;
+				
+			case MLtsyDispatchPhoneGetBatteryInfo::KLtsyDispatchPhoneGetBatteryInfoApiId: 
+				StartATCommand(iATGetBattery);
+				break;
+				
+			case MLtsyDispatchPhoneGetHomeNetwork::KLtsyDispatchPhoneGetHomeNetworkApiId: 
+				iCtsyDispatcherCallback.CallbackPhoneGetHomeNetworkComp(0,iNetworkInfo);
+				nextPendingReqShouldBeExecutedImmediatley = ETrue;
+				break;
+				
+			case MLtsyDispatchPhoneSimRefreshRegister::KLtsyDispatchPhoneSimRefreshRegisterApiId: 
+				iCtsyDispatcherCallback.CallbackPhoneSimRefreshRegisterComp(0);
+				iATHelperCommand->SetAtCommandObserver(this);
+				ExecuteNextATHelpCommand(KATSMSSetting1,ELtsyAT_Phone_SMSSetting1);
+				break;
+				
+			default:
+				break;
+			}
+		
+		// if the request was complete, we need to call ExecutePendingRequest() to execute next pending request again 
+        if(nextPendingReqShouldBeExecutedImmediatley)
+            {
+            ExecutePendingRequest();
+            }
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::NotifyIpcRequestComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::NotifyIpcRequestComplete(TInt aIpcId)
+    {
+    if(aIpcId == MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId)
+        {
+        NetworkInfoComplete();
+        }
+    else if(aIpcId == MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId)
+        {
+        iNtwkRegStatusChange.Enable();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::ExecuteNextATHelpCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::ExecuteNextATHelpCommand(const TDesC8& aATString,TLtsyATCommandType aATType)
+	{
+	iATHelperCommand->Complete();
+	iATHelperCommand->SetAtCommandString(aATString);
+	iATType = aATType;
+	iATHelperCommand->StartRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	iIsPendingRequestStillRunning = ETrue;
+	aAtCommand->SetAtCommandObserver(this);
+	iATType = aAtCommand->AtType();
+	aAtCommand->StartRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::CompleteATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::CompleteATCommand(CAtCommandBase* aAtCommand)
+	{
+	iIsPendingRequestStillRunning = EFalse;
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	ExecutePendingRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::ModemStatusComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::ModemStatusComplete(TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(aError,
+				                ERfsStateInfoNormal);
+		}
+	else
+		{
+		User::After(5000000);
+		iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(aError,
+							    ERfsStateInfoNormal);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::NetworkInfoComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::NetworkInfoComplete()
+	{
+	ExecutePendingRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::GetSignalComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::GetSignalComplete(TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		iSignalInfo = iATGetSignal->getSignalInfo();
+		iPhoneGlobals.iPhoneStatus.iSignalInfo = iSignalInfo;
+		}
+	iCtsyDispatcherCallback.CallbackPhoneGetSignalStrengthComp(aError,
+							iSignalInfo.iSignalStrength,
+							iSignalInfo.iBar);
+	}
+// ---------------------------------------------------------------------------
+// CInitializePhone::GetBatteryComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::GetBatteryComplete(TInt aError)
+	{
+	if(KErrNone == aError)
+		{
+		iBatteryInfo = iATGetBattery->GetBatteryinfo();
+		iPhoneGlobals.iPhoneStatus.iBatteryInfo = iBatteryInfo;
+		iPhoneGlobals.iPhoneStatus.iRfStateInfo = iATGetBattery->GetRfStateInfo();
+		}
+	iCtsyDispatcherCallback.CallbackPhoneGetBatteryInfoComp(aError,iBatteryInfo);
+	}
+
+// ---------------------------------------------------------------------------
+// CInitializePhone::GetBatteryComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitializePhone::AppendIpcRequestToPendingListL(TInt aIpc)
+    {
+    iPendingRequestList.AppendL(aIpc);
+    }
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/notifybatteryandsignal.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,191 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGetModemStatus
+// Description:
+// CNotifyBatteryAndSignal
+
+#include "notifybatteryandsignal.h"
+#include "mslogger.h"
+#include "atgetbatteryinfo.h"
+#include "atgetsignalstrength.h"
+
+const TInt KLtsyOneSecond = 1000000;
+
+// Class CNotifyBatteryAndSignal
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CNotifyBatteryAndSignal* CNotifyBatteryAndSignal::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CNotifyBatteryAndSignal* self = new(ELeave) CNotifyBatteryAndSignal(aGloblePhone,
+			                                                            aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self ;
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::CNotifyBatteryAndSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CNotifyBatteryAndSignal::CNotifyBatteryAndSignal(CGlobalPhonemanager& aGloblePhone, 
+	                                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CNotifyBatteryAndSignal::ConstructL()
+	{
+	iATCommandName = EATNone;
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	iATGetBattery = CATGetBattery::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	iATGetSignal = CATGetSignal::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::~CNotifyBatteryAndSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CNotifyBatteryAndSignal::~CNotifyBatteryAndSignal()
+	{
+	if(iATGetBattery)
+		{
+		delete iATGetBattery;
+		iATGetBattery = NULL;
+		}
+	if(iATGetSignal)
+		{
+		delete iATGetSignal;
+		iATGetSignal = NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::AtCommandExecuteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CNotifyBatteryAndSignal::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt /*aStatus*/)
+	{
+	if(aEventSource == EWriteCompletion)
+		{
+		return;
+		}
+	TInt ret = KErrNone;
+	switch(iATCommandName)
+		{
+		case EATGetBattery:
+			iATGetBattery->RemoveAtCommandObserver();
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			if(aEventSource == EReadCompletion)
+				{
+				ret = iATGetBattery->GetErrorValue();
+				if(KErrNone == ret)
+					{
+					iBatteryInfo = iATGetBattery->GetBatteryinfo();
+					TRfStateInfo RfStateInfo;
+					RfStateInfo = iATGetBattery->GetRfStateInfo();
+					if(iPhoneGlobals.iPhoneStatus.iRfStateInfo!=RfStateInfo)
+						{
+						iPhoneGlobals.iPhoneStatus.iRfStateInfo = RfStateInfo;
+						iCtsyDispatcherCallback.CallbackPhoneNotifyRfStatusChangeInd(ret,RfStateInfo);
+						}
+					if(iPhoneGlobals.iPhoneStatus.iBatteryInfo.iChargeLevel != iBatteryInfo.iChargeLevel)
+						{
+						iPhoneGlobals.iPhoneStatus.iBatteryInfo.iChargeLevel = iBatteryInfo.iChargeLevel;
+						iCtsyDispatcherCallback.CallbackPhoneNotifyBatteryInfoChangeInd(ret,iBatteryInfo);
+						}
+					}
+				}
+			iATGetBattery->Complete();
+			iATCommandName = EATGetSignal;
+			break;
+		case EATGetSignal: 
+			iATGetSignal->RemoveAtCommandObserver();
+			iPhoneGlobals.iEventSignalActive = EFalse;
+			if(aEventSource == EReadCompletion)
+				{
+				ret = iATGetSignal->GetErrorValue();
+				if(KErrNone == ret)
+					{
+					iSignalInfo = iATGetSignal->getSignalInfo();
+					if(iPhoneGlobals.iPhoneStatus.iSignalInfo.iSignalStrength != iSignalInfo.iSignalStrength)
+						{
+						iCtsyDispatcherCallback.CallbackPhoneNotifySignalStrengthChangeInd(ret,
+								                iSignalInfo.iSignalStrength,
+								                iSignalInfo.iBar);
+						}
+					}
+				}
+			iATGetSignal->Complete();
+			iATCommandName = EATGetBattery;
+			break;
+		default:
+			break;
+		}
+	StartTimer(30);
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CNotifyBatteryAndSignal::StartRequest()
+	{
+	StartTimer(10);
+	iATCommandName = EATGetBattery;
+	}
+// ---------------------------------------------------------------------------
+// CNotifyBatteryAndSignal::TimerRun
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CNotifyBatteryAndSignal::TimerRun(TInt aError)
+    {
+	if((aError == KErrNone)&&
+	   (!iPhoneGlobals.iEventSignalActive)&&
+	   (iPhoneGlobals.iPhoneStatus.iMode==RPhone::EModeOnlineCommand))
+	    {
+		switch(iATCommandName)
+			{
+			case EATGetBattery:
+				iPhoneGlobals.iEventSignalActive = ETrue;
+				iATGetBattery->SetAtCommandObserver(this);
+				iATGetBattery->ExecuteCommand();
+				break;
+			case EATGetSignal:
+				iPhoneGlobals.iEventSignalActive = ETrue;
+				iATGetSignal->SetAtCommandObserver(this);
+				iATGetSignal->ExecuteCommand();
+				break;
+			default:
+				break;
+			}
+		}
+	else
+		{
+		StartTimer(30);
+		}
+	}
+
+/**
+ * 
+ * 
+ */
+void CNotifyBatteryAndSignal::StartTimer(TInt aSeconds)
+    {
+	iCallbackTimer->After(aSeconds*KLtsyOneSecond);
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkgetphonestoreinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,144 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkgetphonestoreinfo.h
+// This contains CAtPhbkGetPhoneStoreInfo which is used to get phonebook information
+// 
+
+#ifndef ATPHBKGETPHONESTOREINFO_H
+#define ATPHBKGETPHONESTOREINFO_H
+
+//system include 
+#include <etelmm.h>
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkGetPhoneStoreInfo
+ *
+ */
+class CAtPhbkGetPhoneStoreInfo : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkGetPhoneStoreInfo();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkGetPhoneStoreInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkGetPhoneStoreInfo* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set PhoneStoreParam by handler
+	* 
+	* @param aStoreName
+	*/
+	void SetPhoneStoreParam(const TDesC& aStoreName);
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkGetPhoneStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	*  Executer AT command for getting Phone Store Info
+	*/
+	void GetPhoneStoreInfo();
+private:
+	/**
+	*   save the iStoreName by SetPhoneStoreParam
+	*/
+	TBuf<8>  iStoreName;
+
+	/**
+	*  phonestoreinfo for callback
+	*/
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1 iPhoneStoreInfo;
+	
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetIccSmsStore,
+		ESetIccSmsStoreComplete,
+		ESetPhoneStore,
+		ESetPhoneStoreComplete,
+		EGetPhoneStoreInfo,
+		EGetPhoneStoreInfoComplete,
+		EATNotInProgress
+		}iState;
+		
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;			
+
+	}; // class CAtPhbkGetPhoneStoreInfo
+
+#endif //  ATPHBKGETPHONESTOREINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstorecache.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,155 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstorecache.h
+// This contains CAtPhbkStoreCache which is used to cache phonebook Entries
+// 
+
+#ifndef ATPHBKSTORECACHE_H
+#define ATPHBKSTORECACHE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkStoreCache
+ *
+ */
+class CAtPhbkStoreCache : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkStoreCache();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreCache* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreCache* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set Phonebook Type 
+	* 
+	* @param  aPhonebookType
+	*/
+	void SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CAtPhbkStoreCache(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for reading phonebook entries
+	*/	
+	void ReadEntry();
+	
+	/**
+	*  Generate TLV Data should be used by callback
+	*/
+	TInt GeneratePhbkDataL();
+private:	
+	/**
+	*  save PhoneBookType by SetPhonebookType
+	*/	
+	DispatcherPhonebook::TPhonebook iPhoneBookType;
+	
+	/**
+	*  state machine for EventSignal 
+	*/	
+	enum 
+		{
+		ESetStoreName,
+		ESetStoreNameComplete,
+		EReadEntry,
+		EReadEntryComplete,
+		EATNotInProgress
+		}iState;
+	
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;	
+
+	/**
+	*  This is used to generate TLV data by GeneratePhbkData 
+	*/
+	TPhonebookReadEntry  iReadEntry;
+	
+	/*
+	* Client reserved space for phonebook data
+	*/
+	TBuf8<800>   iPhbkData; 
+	
+	/*
+	*  indicate whether it is OK or ERROR string 
+	*/
+    TBool   iEndFlag;
+	
+	}; // class CAtPhbkStoreCache
+#endif // ATPHBKSTORECACHE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoredelete.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,157 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoredelete.h
+// This contains CAtPhbkStoreDelete which is used to delete a phonebook Entry
+// 
+
+#ifndef ATPHBKSTOREDELETE_H
+#define ATPHBKSTOREDELETE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkStoreDelete
+ *
+ */
+class CAtPhbkStoreDelete : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkStoreDelete();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreDelete* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreDelete* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set Phonebook Type 
+	* 
+	* @param  aPhonebookType
+	*/
+	void SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType);
+	
+	/**
+	* Set Phonebook Index should be deleted
+	* 
+	* @param  aIndex
+	*/
+	void SetDeleteIndex(TInt aIndex);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkStoreDelete(CGlobalPhonemanager& aGloblePhone, 
+                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for Deleting an Entry
+	*/
+	void DeleteEntry();
+	
+	/**
+	* Get the maximum number length for each phonebook store type
+	*/
+	void GetMaxNumberLen();
+private:	
+	/**
+	*  save PhoneBookType by SetPhonebookType
+	*/	
+	DispatcherPhonebook::TPhonebook iPhoneBookType;
+	
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetStoreName,
+		ESetStoreNameComplete,
+		EDeleteEntry,
+		EDeleteEntryComplete,
+		EATNotInProgress
+		}iState;
+		
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;	
+	
+	/**
+	*  The index phonebook Entry should be deleted
+	*/
+	TInt iIndex;
+	
+	/**
+	* the maximum number length 
+	*/
+	TInt iMaxLen;
+	
+	}; // class AtPhbkStoreDelete
+#endif // ATPHBKSTOREDELETE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoreinitialise.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,161 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoreinitialise.h
+// This contains CAtPhbkStoreInitialise which initialises all kinds of phonebook 
+// 
+
+#ifndef ATPHBKSTOREINITIALISE_H
+#define ATPHBKSTOREINITIALISE_H
+
+//system include  
+#include <etelmm.h>
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkStoreInitialise
+ *
+ */
+class CAtPhbkStoreInitialise : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkStoreInitialise();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreInitialise* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreInitialise* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkStoreInitialise(CGlobalPhonemanager& aGloblePhone, 
+                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	*  Executer AT command for getting Store Info
+	*/
+	void GetStoreInfo();
+	
+	/**
+	*  assign totalEntries,maxTextLen and maxNumberLen for each 
+	*  phonebook store type 
+	*/
+	void AssignPhbkType();
+private:
+	/**
+	*  the structure for callback
+	*/
+	DispatcherPhonebook::TPhonebookStoreInfoV1  iStoreInfo;
+
+	/**
+	*  state machine for EventSignal 
+	*/	
+	enum 
+		{
+		ESetStoreName,
+		ESetStoreNameComplete,
+		EGetStoreInfo,
+		EGetStoreInfoComplete,
+		EATNotInProgress
+		}iState;
+		
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;
+	
+	/**
+	*  the array stores phonebook type's string 
+	*/
+	RArray<TPtrC8>  iStoreArr;
+	
+    /**
+	*  phonebook store type's index 
+	*/
+	TInt  iStoreIndex;
+	
+	/**
+	*  total Entries for each store type
+	*/
+	TInt iTotalEntries;
+	
+	/**
+	*  maximum number Length
+	*/
+	TUint16 iValNumberLen;
+	
+	/**
+	*  maximum text Length
+	*/	
+	TUint16 iValTextLen;
+	
+	}; // class CAtPhbkStoreInitialise
+
+#endif // ATPHBKSTOREINITIALISE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstoreread.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,173 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoreread.h
+// This contains CAtPhbkStoreRead which is use to read a phonebook Entry
+// 
+
+#ifndef ATPHBKSTOREREAD_H
+#define ATPHBKSTOREREAD_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkStoreRead
+ *
+ */
+class CAtPhbkStoreRead : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkStoreRead();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreRead* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreRead* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set read phonebook parameters
+	* 
+	* @param  aIndex
+	* @param  aSlotNum
+	*/
+	void SetReadParam(TInt aIndex,TInt aSlotNum);
+
+	/**
+	* Set Phonebook Type 
+	* 
+	* @param  aPhonebookType
+	*/
+	void SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkStoreRead(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for reading a phonebook entry
+	*/	
+	void ReadEntry();
+	
+	/**
+	*  Generate TLV Data should be used by callback
+	*/
+	TInt GeneratePhbkDataL();
+private:
+	/**
+	*  save PhoneBookType by SetPhonebookType
+	*/	
+	DispatcherPhonebook::TPhonebook iPhoneBookType;
+	
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetStoreName,
+		ESetStoreNameComplete,
+		EReadEntry,
+		EReadEntryComplete,
+		EATNotInProgress
+		}iState;
+		
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;
+	
+	/*
+	* the first index should be read
+	*/
+	TInt iIndex;
+	
+	/*
+	* the phonebook item number want to read
+	*/
+	TInt iSlotNum;
+	
+	/**
+	*  This is used to generate TLV data by GeneratePhbkData 
+	*/
+	TPhonebookReadEntry  iReadEntry;
+	
+	/*
+	* Client reserved space for phonebook data
+	*/
+	TBuf8<800>   iPhbkData; 
+	
+	/*
+	*  indicate whether it is OK or ERROR string 
+	*/
+    TBool   iEndFlag;
+	
+	}; // class CAtPhbkStoreRead
+#endif // ATPHBKSTOREREAD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/inc/atphbkstorewrite.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,167 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstorewrite.h
+// This contains CAtPhbkStoreWrite which is use to write a phonebook Entry
+// 
+
+#ifndef ATPHBKSTOREWRITE_H
+#define ATPHBKSTOREWRITE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * TPhonebookEntry
+ *
+ */
+class TPhonebookEntry
+    {
+public:
+	TUint16     iIndex;
+    TBuf16<20>  iNumber;
+    TBuf16<14>  iText;	
+    };
+
+/**
+ * CAtPhbkStoreWrite
+ *
+ */
+class CAtPhbkStoreWrite : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkStoreWrite();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreWrite* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkStoreWrite* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+    /**
+	*   set PhoneEntry passed by handler
+	*/
+	void SetPhonebookEntryL(const TDesC8& aEntry);
+	
+	/**
+	* Set Phonebook Type 
+	* 
+	* @param  aPhonebookType
+	*/
+	void SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkStoreWrite(CGlobalPhonemanager& aGloblePhone, 
+                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for writing a phonebook entry
+	*/	
+	void WriteEntry();
+	
+	/**
+	* Get the maximum number length for each phonebook store type
+	*/
+	void GetMaxNumberLen();
+private:	
+	/**
+	*  save PhoneBookType by SetPhonebookType
+	*/	
+	DispatcherPhonebook::TPhonebook iPhoneBookType;
+
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetStoreName,
+		ESetStoreNameComplete,
+		EWriteEntry,
+		EWriteEntryComplete,
+		EATNotInProgress
+		}iState;
+	
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;	
+	
+	/**
+	*  The structure decoded for phonebook Entry 
+	*/
+	TPhonebookEntry iPhbkEntry;
+	
+	/**
+	* the maximum number length 
+	*/
+	TInt iMaxLen;
+	
+	}; // class CAtPhbkStoreWrite
+#endif // ATPHBKSTOREWRITE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkgetphonestoreinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,365 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkgetphonestoreinfo.cpp
+// This contains CAtPhbkGetPhoneStoreInfo which is used to get phonebook information
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <etelmm.h>
+
+//user include
+#include "atphbkgetphonestoreinfo.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+
+//constant defination
+_LIT8(KSetPhoneStore,"AT+CPBS=\"%S\"\r");
+_LIT8(KGetPhoneStoreInfo,"AT+CPBS?\r");
+_LIT8(KCPBSResponseString,"+CPBS:");
+_LIT8(KAdnPhonebook,"SM");
+_LIT8(KFdnPhonebook,"FD");
+_LIT8(KGetPrefMemCommand,"AT+CPMS?\r");
+_LIT8(KCPMSResponseString,"+CPMS:");
+
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::CAtPhbkGetPhoneStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkGetPhoneStoreInfo::CAtPhbkGetPhoneStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::CAtPhbkGetPhoneStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::~CAtPhbkGetPhoneStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkGetPhoneStoreInfo::~CAtPhbkGetPhoneStoreInfo()
+	{
+	LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::~CAtPhbkGetPhoneStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkGetPhoneStoreInfo* CAtPhbkGetPhoneStoreInfo::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkGetPhoneStoreInfo* self = new (ELeave)CAtPhbkGetPhoneStoreInfo(aGloblePhone, 
+			                                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkGetPhoneStoreInfo* CAtPhbkGetPhoneStoreInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkGetPhoneStoreInfo* self=CAtPhbkGetPhoneStoreInfo::NewLC(aGloblePhone, 
+                                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::SetPhoneStoreParam
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::SetPhoneStoreParam(const TDesC& aStoreName)
+	{
+	iStoreName = aStoreName;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::StartRequest()
+	{
+	if( iStoreName.CompareF(KETelIccSmsStore) == KErrNone)
+		{
+		iState = ESetIccSmsStore;
+		iTxBuffer.Zero();
+		iTxBuffer.Copy(KGetPrefMemCommand);
+		Write();
+		}
+	else
+		{
+	    ExecuteCommand();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::ExecuteCommand called"));
+	iState = ESetPhoneStore;
+	TPtrC8  storeName;
+	iTxBuffer.Zero();
+	if( iStoreName.CompareF(KETelIccFdnPhoneBook) == KErrNone )
+		{
+		storeName.Set(KFdnPhonebook);
+		}
+	else if( iStoreName.CompareF(KETelIccAdnPhoneBook) == KErrNone)
+		{
+		storeName.Set(KAdnPhonebook);
+		}
+	iTxBuffer.Format(KSetPhoneStore,&storeName);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkGetPhoneStoreInfo::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookGetPhoneStoreInfoComp(aStatus,iPhoneStoreInfo);
+		}
+	else
+		{
+		if( aEventSource == EWriteCompletion )
+			{
+			LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::EventSignal,EWriteCompletion!"));
+			if( iState == ESetPhoneStore )
+				{
+				iState = ESetPhoneStoreComplete;
+				}
+			else if( iState == EGetPhoneStoreInfo )
+				{
+				iState = EGetPhoneStoreInfoComplete;
+				}
+			else if( iState ==ESetIccSmsStore )
+				{
+				iState = ESetIccSmsStoreComplete;
+				}
+			}
+    	else 
+			{
+			LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::EventSignal,EReadCompletion!"));
+			if( iState == ESetPhoneStoreComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					iState = EGetPhoneStoreInfo;
+					GetPhoneStoreInfo();
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookGetPhoneStoreInfoComp(iError,iPhoneStoreInfo);
+					}
+				}
+			else if( iState == EGetPhoneStoreInfoComplete )
+				{
+				iPhoneStoreInfo.iName = iStoreName;
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iCtsyDispatcherCallback.CallbackPhonebookGetPhoneStoreInfoComp(iError,iPhoneStoreInfo);
+				}
+			else if( iState == ESetIccSmsStoreComplete)
+				{
+				iPhoneStoreInfo.iName = iStoreName;
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iCtsyDispatcherCallback.CallbackPhonebookGetPhoneStoreInfoComp(iError,iPhoneStoreInfo);
+				}
+			}
+		}
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::GetPhoneStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::GetPhoneStoreInfo()
+	{
+	LOGTEXT(_L8("CAtPhbkGetPhoneStoreInfo::GetPhoneStoreInfo callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Copy(KGetPhoneStoreInfo);
+	Write();   
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkGetPhoneStoreInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkGetPhoneStoreInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetPhoneStoreComplete )
+		{
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+		}
+	else if( iState == EGetPhoneStoreInfoComplete )
+		{
+		/**
+		* Here is an Example 
+		* +CPBS: "SM",6,250  
+        * ADN phonebook is selected,6 locations are used and 
+        * total 250 locations are available
+		*/
+		iError = KErrNone;
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		//remove AT+CPBS
+		if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG			
+		for( TInt i=0;i<count;i++ )
+			{
+		    LOGTEXT3(_L8("CAtPhbkGetPhoneStoreInfo::ParseResponseL\tarray[%d]=%S"),
+		    		      i,&array[i]);     
+			}
+#endif			
+		if (count <= 1)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		if(array[0].MatchF(KCPBSResponseString) == KErrNotFound)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+				
+		//parse used
+		TLex8 lex(array[2]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iPhoneStoreInfo.iUsedEntries = val;
+		
+		//parse total
+		TLex8 lex1(array[3]);
+		ret = lex1.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iPhoneStoreInfo.iTotalEntries = val;
+		iPhoneStoreInfo.iType = RMobilePhoneStore::EPhoneBookStore;
+	    LOGTEXT3(_L8("CAtPhbkGetPhoneStoreInfo::ParseResponseL\tPreferred store used=%d, total=%d"), 
+	    		                                iPhoneStoreInfo.iUsedEntries,iPhoneStoreInfo.iTotalEntries);
+		CleanupStack::PopAndDestroy(&array);
+		}
+	else 
+		{
+		/**
+		* Parse result of AT+CPMS? 
+		* Response:+CPMS:<mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>
+		* Here only the first mem is used. mem1 is SM
+		*/
+		iError = KErrNone;
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt Count = array.Count();
+		if (Count <= 1)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		if(array[0].MatchF(KCPMSResponseString) == KErrNotFound)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse name 
+		TPtrC8 name(array[1]);
+		
+		//parse used
+		TLex8 lex(array[2]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iPhoneStoreInfo.iUsedEntries = val;
+		
+		//parse total
+		TLex8 lex1(array[3]);
+		ret = lex1.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iPhoneStoreInfo.iTotalEntries = val;
+		iPhoneStoreInfo.iType = RMobilePhoneStore::EShortMessageStore;
+		LOGTEXT3(_L8("CAtPhbkGetPhoneStoreInfo::ParseResponseL\tPreferred store used=%d, total=%d"), 
+			    		                        iPhoneStoreInfo.iUsedEntries,iPhoneStoreInfo.iTotalEntries);
+		CleanupStack::PopAndDestroy(&array);
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstorecache.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,371 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstorecache.cpp
+// This contains CAtPhbkStoreCache which is used to cache phonebook Entries
+// 
+
+//system include 
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mpbutil.h>
+#include <cmmgsmphonestorageutility.h>
+
+//user include 
+#include "atphbkstorecache.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreRead,"AT+CPBR=%d,%d\r");
+_LIT8(KSelAdnPhonebook,"AT+CPBS=\"SM\"\r");
+_LIT8(KSelFdnPhonebook,"AT+CPBS=\"FD\"\r");
+_LIT8(KCPBRMatchString,"+CPBR:*");
+_LIT8(KCPBRSResponseString,"+CPBR:");
+const TInt KAdnStartIndex = 1;
+const TInt KFdnStartIndex = 1;
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::CAtPhbkStoreCache
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreCache::CAtPhbkStoreCache(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkStoreCache::CAtPhbkStoreCache called"));
+	iEndFlag = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::~CAtPhbkStoreCache
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreCache::~CAtPhbkStoreCache()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreCache::~CAtPhbkStoreCache called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreCache* CAtPhbkStoreCache::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreCache* self = new (ELeave)CAtPhbkStoreCache(aGloblePhone, 
+                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreCache* CAtPhbkStoreCache::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreCache* self=CAtPhbkStoreCache::NewLC(aGloblePhone, 
+                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyOkString);
+	AddExpectStringL(KLtsyErrorString);
+	AddExpectStringL(KCPBRMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::SetPhonebookType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType)
+	{
+	iPhoneBookType = aPhonebookType;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreCache::ExecuteCommand called"));
+	iState = ESetStoreName;
+	iTxBuffer.Zero();	
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iTxBuffer.Copy(KSelAdnPhonebook);
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iTxBuffer.Copy(KSelFdnPhonebook);
+		}
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::ReadEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::ReadEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreCache::ReadEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	TInt totalEntries(KErrNone);
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		totalEntries = iPhoneGlobals.iPhonebookStoreInfo.iAdnTotalEntries;
+		iTxBuffer.Format(KPhbkStoreRead,KAdnStartIndex,totalEntries);
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		totalEntries = iPhoneGlobals.iPhonebookStoreInfo.iFdnTotalEntries; 
+		iTxBuffer.Format(KPhbkStoreRead,KFdnStartIndex,totalEntries);
+		}
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkStoreCache::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookStoreCacheComp(aStatus,iPhoneBookType,iPhbkData);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetStoreName )
+				{
+				iState = ESetStoreNameComplete;
+				}
+			else if( iState==EReadEntry )
+				{
+				iState = EReadEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetStoreNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					ClearBuffer();
+					iState = EReadEntry;
+					ReadEntry();
+					}
+				else 
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreCacheComp(iError,iPhoneBookType,iPhbkData);
+					}
+				}
+			else if( iState==EReadEntryComplete )
+				{
+				//encounter OK or ERROR
+				if( iEndFlag )
+					{
+					ClearBuffer();
+					iPhbkData.Zero();
+					Complete();
+					iPhoneGlobals.iEventSignalActive = EFalse;
+					iCtsyDispatcherCallback.CallbackPhonebookStoreCacheComp(iError,iPhoneBookType,iPhbkData);
+					}
+				else 
+					{
+					if( iError==KErrNone )
+						{
+						TRAPD(err, GeneratePhbkDataL());
+						iCtsyDispatcherCallback.CallbackPhonebookStoreCacheComp(err,iPhoneBookType,iPhbkData);
+						ClearCurrentLine();
+						}
+					else 
+						{
+						iCtsyDispatcherCallback.CallbackPhonebookStoreCacheComp(iError,iPhoneBookType,iPhbkData);
+						ClearCurrentLine();
+						}
+					}
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreCache::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetStoreNameComplete )
+	    {
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+	    }
+	else if( iState == EReadEntryComplete )
+		{
+		/**
+		* Here is an Example 
+		* at+CPBR=1,250    
+		*+CPBR: 1,"1234001",129,""
+		*+CPBR: 2,"123456002",129,"TelNo 002"
+		*+CPBR: 3,"123456003",129,"TelNo 003"
+		*+CPBR: 4,"123456004",129,"TelNo 004"
+		*OK
+		*/
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		// remove the string of AT+CPBR=..
+		if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG		
+		for( TInt i=0;i<count;i++ )
+			{
+			LOGTEXT3(_L8("CAtPhbkStoreCache::ParseResponseL\tarray[%d]=%S"),i,&array[i]);  
+			}
+#endif		
+		if((array[1].Match(KLtsyOkString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNone;
+			iEndFlag = ETrue;
+			return; 
+			}
+		else if((array[1].Match(KLtsyErrorString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrGeneral;
+			iEndFlag = ETrue;
+			return; 
+			}
+	  
+		iError = KErrNone;
+		//remove number line if it has 
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			array.Remove(0);
+			}
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse index
+		TLex8 lex(array[1]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		//Index  
+		iReadEntry.iIndex = val;             
+		iReadEntry.iNumber.Copy(array[2]);   
+		//Parse TON/NPI
+		TLex8 lex1(array[3]);
+		TUint16 val1;
+		ret = lex1.Val(val1,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		 //TON/NPI
+		iReadEntry.iTon = (TUint8)val1;  
+		iReadEntry.iText.Copy(array[4]);
+		CleanupStack::PopAndDestroy();
+		} 
+  	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreCache::GeneratePhbkData
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CAtPhbkStoreCache::GeneratePhbkDataL()
+	{
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+	iPhbkData.Zero();
+	 // Set it to point to the Client buffer
+	pbBuffer->Set(&iPhbkData);
+	pbBuffer->AddNewEntryTag();
+	
+	TInt ret = pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBAdnIndex,iReadEntry.iIndex);
+	if( ret!=KErrNone )
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iReadEntry.iNumber);
+	if( ret!=KErrNone )
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, iReadEntry.iTon);
+	if(ret!=KErrNone)
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, iReadEntry.iText);
+	if(ret != KErrNone)
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	delete pbBuffer;
+	return KErrNone;
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoredelete.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,233 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoredelete.cpp
+// This contains CAtPhbkStoreDelete which is used to delete a phonebook Entry
+// 
+
+//system include 
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atphbkstoredelete.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreDelete,"AT+CPBW=%d\r");
+_LIT8(KSelAdnPhonebook,"AT+CPBS=\"SM\"\r");
+_LIT8(KSelFdnPhonebook,"AT+CPBS=\"FD\"\r");
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::CAtPhbkStoreDelete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreDelete::CAtPhbkStoreDelete(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                       :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkStoreDelete::CAtPhbkStoreDelete called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::~CAtPhbkStoreDelete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreDelete::~CAtPhbkStoreDelete()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreDelete::~CAtPhbkStoreDelete called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreDelete* CAtPhbkStoreDelete::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreDelete* self = new (ELeave)CAtPhbkStoreDelete(aGloblePhone, 
+                                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreDelete* CAtPhbkStoreDelete::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreDelete* self=CAtPhbkStoreDelete::NewLC(aGloblePhone, 
+                                                       aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::SetPhonebookType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType)
+	{
+	iPhoneBookType = aPhonebookType;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::SetDeleteIndex
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::SetDeleteIndex(TInt aIndex)
+	{
+	iIndex = aIndex;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::StartRequest()
+	{
+	GetMaxNumberLen();
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreDelete::ExecuteCommand called"));
+	iState = ESetStoreName;
+	iTxBuffer.Zero();	
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iTxBuffer.Copy(KSelAdnPhonebook);
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iTxBuffer.Copy(KSelFdnPhonebook);
+		}
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::DeleteEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::DeleteEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreDelete::DeleteEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KPhbkStoreDelete,iIndex);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkStoreDelete::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookStoreDeleteEntryComp(aStatus,iPhoneBookType,iMaxLen);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetStoreName )
+				{
+				iState = ESetStoreNameComplete;
+				}
+			else if( iState==EDeleteEntry )
+				{
+				iState = EDeleteEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetStoreNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if( iError == KErrNone )
+					{
+					iState = EDeleteEntry;
+					DeleteEntry();
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreDeleteEntryComp(iError,iPhoneBookType,iMaxLen);
+					}
+				}
+			else if( iState== EDeleteEntryComplete)
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iCtsyDispatcherCallback.CallbackPhonebookStoreDeleteEntryComp(iError,iPhoneBookType,iMaxLen);
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreDelete::GetMaxNumberLen
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreDelete::GetMaxNumberLen()
+	{
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iMaxLen = iPhoneGlobals.iPhonebookStoreInfo.iAdnMaximumNumberLength;
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iMaxLen = iPhoneGlobals.iPhonebookStoreInfo.iFdnMaximumNumberLength;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoreinitialise.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,339 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoreinitialise.cpp
+// This contains CAtPhbkStoreInitialise which initialises all kinds of phonebook 
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <etelmm.h>
+
+//user  include 
+#include "atphbkstoreinitialise.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+
+//constant defination
+_LIT8(KAdnStore,"AT+CPBS=\"SM\"\r");
+_LIT8(KFdnStore,"AT+CPBS=\"FD\"\r");
+_LIT8(KGetSotreInfo,"AT+CPBR=?\r");
+_LIT8(KCPBRResponseString,"+CPBR:");
+_LIT8(KSeparator,"-");
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::CAtPhbkStoreInitialise
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreInitialise::CAtPhbkStoreInitialise(CGlobalPhonemanager& aGloblePhone, 
+                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                               :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkStoreInitialise::CAtPhbkStoreInitialise called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::~CAtPhbkStoreInitialise
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreInitialise::~CAtPhbkStoreInitialise()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreInitialise::~CAtPhbkStoreInitialise called"));
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreInitialise* CAtPhbkStoreInitialise::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkStoreInitialise* self = new (ELeave)CAtPhbkStoreInitialise(aGloblePhone, 
+			                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreInitialise* CAtPhbkStoreInitialise::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkStoreInitialise* self=CAtPhbkStoreInitialise::NewLC(aGloblePhone, 
+                                                               aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	//first is ADN 
+	iStoreArr.Reset();
+	iStoreArr.Append(KAdnStore());
+//	//second is FDN
+	iStoreArr.Append(KFdnStore());
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreInitialise::ExecuteCommand called"));
+	iState = ESetStoreName;
+	iStoreIndex = 0;
+	iTxBuffer.Zero();	
+	iTxBuffer.Copy(iStoreArr[iStoreIndex]);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkStoreInitialise::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookStoreInitialiseComp(aStatus,iStoreInfo);
+		}
+	else
+		{
+		if( aEventSource == EWriteCompletion )
+			{
+			LOGTEXT(_L8("CAtPhbkStoreInitialise::EventSignal,EWriteCompletion!"));
+			if( iState==ESetStoreName )
+				{
+				iState = ESetStoreNameComplete;
+				}
+			else if( iState==EGetStoreInfo )
+				{
+				iState = EGetStoreInfoComplete;
+				}
+			 }
+		else 
+			{
+			LOGTEXT(_L8("CAtPhbkStoreInitialise::EventSignal,EReadCompletion!"));
+			if( iState==ESetStoreNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone )
+					{
+					iState = EGetStoreInfo;
+					GetStoreInfo();
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreInitialiseComp(iError,iStoreInfo);
+					}
+				}
+			else if( iState==EGetStoreInfoComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iStoreIndex++;
+				//stands for complete all phonebook store type's at+CPBR=?
+				if ( iStoreIndex > 1 )
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreInitialiseComp(iError,iStoreInfo);
+					}
+				else 
+					{
+					iState = ESetStoreName;
+					iTxBuffer.Zero();
+					//For this case,only two store type
+					iTxBuffer.Copy(iStoreArr[iStoreIndex]);   
+					Write();
+					}
+				}
+			}  
+		}
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::GetStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::GetStoreInfo()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreInitialise::GetPhoneStoreInfo callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Copy(KGetSotreInfo);
+	Write();   
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetStoreNameComplete )
+		{
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+		}
+	else if( iState == EGetStoreInfoComplete )
+		{
+		/**
+		* Parse result of AT+CPBR=? 
+		* Response:+CPMS:<(startIndex-endIndex>,<len1>,<len2>
+		* len1 is maximum length for phone number
+		* len2 is maximum length for text 
+		*/
+		iError = KErrNone;
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		// remove the string of AT+CPBR=?
+		if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG	
+		for( TInt i=0;i<count;i++ )
+			{
+		    LOGTEXT3(_L8("CAtPhbkStoreInitialise::ParseResponseL\tarray[%d]=%S"),
+		    		      i,&array[i]);     
+			}
+#endif		
+		if (count <= 1)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		if(array[0].MatchF(KCPBRResponseString) == KErrNotFound)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse iTotalEntries
+		TInt len = array[1].Length();
+		TInt pos = array[1].FindF(KSeparator);
+		TPtrC8 tempStr;
+		tempStr.Set(array[1].Left(pos));
+		TLex8 lex(tempStr);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		tempStr.Set(array[1].Right(len-pos-1));
+		TLex8 lex1(tempStr);
+		TUint16 val1;
+		ret = lex1.Val(val1,EDecimal);
+		if(ret!=KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+	    iTotalEntries = val1-val+1;
+
+		
+	  	//parse MaximumNumberLength
+		TLex8 lexNumberLen(array[2]);
+		ret = lexNumberLen.Val(iValNumberLen,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+				
+		//parse MaximumTextLength
+		TLex8 lexTextLen(array[3]);
+		ret = lexTextLen.Val(iValTextLen,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		AssignPhbkType();
+		LOGTEXT2(_L8("CAtPhbkStoreInitialise::ParseResponseL\tiTotalEntries=%d"),iTotalEntries);
+	    LOGTEXT3(_L8("CAtPhbkStoreInitialise::ParseResponseL\tPreferred MaxNumbereLen=%d, MaxTextLen=%d"), 
+	    		                                              iValNumberLen,iValTextLen);
+		CleanupStack::PopAndDestroy(&array);
+
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreInitialise::AssignPhbkType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreInitialise::AssignPhbkType()
+	{
+	if( iStoreIndex == 0 )
+		{
+		iStoreInfo.iAdnTotalEntries = iTotalEntries;
+		iPhoneGlobals.iPhonebookStoreInfo.iAdnTotalEntries = iTotalEntries;
+		iStoreInfo.iAdnMaximumNumberLength = iValNumberLen;
+		iStoreInfo.iAdnMaximumTextLength = iValTextLen;
+		iPhoneGlobals.iPhonebookStoreInfo.iAdnMaximumNumberLength =
+		                                    iValNumberLen;
+		iPhoneGlobals.iPhonebookStoreInfo.iAdnMaximumTextLength =
+		                                     iValTextLen;
+		}
+	else if( iStoreIndex == 1 )
+		{
+		iStoreInfo.iFdnTotalEntries = iTotalEntries;
+		iPhoneGlobals.iPhonebookStoreInfo.iFdnTotalEntries = iTotalEntries;
+		iStoreInfo.iFdnMaximumNumberLength = iValNumberLen;
+		iStoreInfo.iFdnMaximumTextLength = iValTextLen;
+		iPhoneGlobals.iPhonebookStoreInfo.iFdnMaximumNumberLength = 
+											iValNumberLen;
+		iPhoneGlobals.iPhonebookStoreInfo.iFdnMaximumTextLength =
+											iValTextLen;    
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstoreread.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,362 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstoreread.cpp
+// This contains CAtPhbkStoreRead which is use to read a phonebook Entry
+// 
+
+//system include
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mpbutil.h>
+#include <cmmgsmphonestorageutility.h>
+
+//user include 
+#include "atphbkstoreread.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreRead,"AT+CPBR=%d,%d\r");
+_LIT8(KSelAdnPhonebook,"AT+CPBS=\"SM\"\r");
+_LIT8(KSelFdnPhonebook,"AT+CPBS=\"FD\"\r");
+_LIT8(KCPBRMatchString,"+CPBR:*");
+_LIT8(KCPBRSResponseString,"+CPBR:");
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::CAtPhbkStoreRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreRead::CAtPhbkStoreRead(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkStoreRead::CAtPhbkStoreRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::~CAtPhbkStoreRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreRead::~CAtPhbkStoreRead()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreRead::~CAtPhbkStoreRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreRead* CAtPhbkStoreRead::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreRead* self = new (ELeave)CAtPhbkStoreRead(aGloblePhone, 
+                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreRead* CAtPhbkStoreRead::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreRead* self=CAtPhbkStoreRead::NewLC(aGloblePhone, 
+                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyOkString);
+	AddExpectStringL(KLtsyErrorString);
+	AddExpectStringL(KCPBRMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::SetPhonebookType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType)
+	{
+	iPhoneBookType = aPhonebookType;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::SetReadParam
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::SetReadParam(TInt aIndex,TInt aSlotNum)
+	{
+	iIndex = aIndex;
+	iSlotNum = aSlotNum;
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreRead::ExecuteCommand called"));
+	iState = ESetStoreName;
+	iTxBuffer.Zero();	
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iTxBuffer.Copy(KSelAdnPhonebook);
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iTxBuffer.Copy(KSelFdnPhonebook);
+		}
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::ReadEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::ReadEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreRead::ReadEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KPhbkStoreRead,iIndex,iIndex+iSlotNum-1);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkStoreRead::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookStoreReadEntryComp(aStatus,iPhoneBookType,iPhbkData);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetStoreName )
+				{
+				iState = ESetStoreNameComplete;
+				}
+			else if( iState==EReadEntry )
+				{
+				iState = EReadEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetStoreNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					ClearBuffer();
+					iState = EReadEntry;
+					ReadEntry();
+					}
+				else 
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreReadEntryComp(iError,iPhoneBookType,iPhbkData);
+					}
+				}
+			else if( iState==EReadEntryComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				//encounter OK or ERROR
+				if( iEndFlag )
+					{
+					ClearBuffer();
+					iPhbkData.Zero();
+					iCtsyDispatcherCallback.CallbackPhonebookStoreReadEntryComp(iError,iPhoneBookType,iPhbkData);
+					}
+				else
+					{
+					if( iError==KErrNone )
+						{
+						TRAPD(err, GeneratePhbkDataL());
+						iCtsyDispatcherCallback.CallbackPhonebookStoreReadEntryComp(err,iPhoneBookType,iPhbkData);
+						ClearCurrentLine();
+						}
+					else
+						{
+						iCtsyDispatcherCallback.CallbackPhonebookStoreReadEntryComp(iError,iPhoneBookType,iPhbkData);
+						}
+					}
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreRead::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetStoreNameComplete )
+	    {
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+	    }
+	else if( iState == EReadEntryComplete )
+		{
+		/**
+		* +CPBR = <index>,<number>,<129/145>,<text> 
+		* OK    
+		*/
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		// remove the string of AT+CPBR=..
+		if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG		
+		for( TInt i=0;i<count;i++ )
+			{
+			LOGTEXT3(_L8("CAtPhbkStoreRead::ParseResponseL\tarray[%d]=%S"),i,&array[i]); 
+			}
+#endif		
+		if((array[1].Match(KLtsyOkString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNone;
+			iEndFlag = ETrue;
+			return; 
+			}
+		else if((array[1].Match(KLtsyErrorString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrGeneral;
+			iEndFlag = ETrue;
+			return; 
+			}
+	  
+		iError = KErrNone;
+		//remove number line if it has 
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			array.Remove(0);
+			}
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse index
+		TLex8 lex(array[1]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		//Index  
+		iReadEntry.iIndex = val;             
+		iReadEntry.iNumber.Copy(array[2]);   
+		//Parse TON/NPI
+		TLex8 lex1(array[3]);
+		TUint16 val1;
+		ret = lex1.Val(val1,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		 //TON/NPI
+		iReadEntry.iTon = (TUint8)val1;  
+		iReadEntry.iText.Copy(array[4]);
+		CleanupStack::PopAndDestroy();
+		} 
+  	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreRead::GeneratePhbkData
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CAtPhbkStoreRead::GeneratePhbkDataL()
+	{
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+	iPhbkData.Zero();
+	pbBuffer->Set(&iPhbkData); // Set it to point to the Client buffer
+	pbBuffer->AddNewEntryTag();
+	
+	TInt ret = pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBAdnIndex,iReadEntry.iIndex);
+	if( ret!=KErrNone )
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iReadEntry.iNumber);
+	if( ret!=KErrNone )
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, iReadEntry.iTon);
+	if(ret!=KErrNone)
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, iReadEntry.iText);
+	if(ret != KErrNone)
+		{
+		delete pbBuffer;
+		return ret;
+		}
+	
+	delete pbBuffer;
+	return KErrNone;
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebook/src/atphbkstorewrite.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,311 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkstorewrite.cpp
+// This contains CAtPhbkStoreWrite which is use to write a phonebook Entry
+// 
+
+//system include 
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mpbutil.h> 
+
+//user include 
+#include "atphbkstorewrite.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreWrite,"AT+CPBW=%d,\"%S\",145,\"%S\"\r");
+_LIT8(KSelAdnPhonebook,"AT+CPBS=\"SM\"\r");
+_LIT8(KSelFdnPhonebook,"AT+CPBS=\"FD\"\r");
+const TInt KMaxNumberLen = 20;
+const TInt KMaxTextLen = 14;
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::CAtPhbkStoreWrite
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreWrite::CAtPhbkStoreWrite(CGlobalPhonemanager& aGloblePhone, 
+                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                     :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkStoreWrite::CAtPhbkStoreWrite called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::~CAtPhbkStoreWrite
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreWrite::~CAtPhbkStoreWrite()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreWrite::~CAtPhbkStoreWrite called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreWrite* CAtPhbkStoreWrite::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreWrite* self = new (ELeave)CAtPhbkStoreWrite(aGloblePhone, 
+                                                            aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkStoreWrite* CAtPhbkStoreWrite::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkStoreWrite* self=CAtPhbkStoreWrite::NewLC(aGloblePhone, 
+                                                     aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::SetPhonebookType
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::SetPhonebookType(DispatcherPhonebook::TPhonebook aPhonebookType)
+	{
+	iPhoneBookType = aPhonebookType;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::SetPhonebookEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::SetPhonebookEntryL(const TDesC8& aEntry)
+	{
+	TInt ret = KErrNone;
+	TInt retVal = KErrNone;
+	TUint8 tmpTagValue;
+	TPtrC16 textPtr;
+    TUint8 tagValue;
+    CPhoneBookBuffer::TPhBkTagType tagType;
+    TUint8 newEntryTag;
+    newEntryTag = RMobilePhoneBookStore::ETagPBNewEntry;
+    TUint16 index;
+    TPtrC16 numPtr;
+    TPtrC16 type;
+    // used to write phonebook data
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); 
+	CleanupStack::PushL(pbBuffer);
+	
+    //  Set pointer to constant descriptor
+    TPtr8 dataToSeparate( NULL, 0, 0 );
+    dataToSeparate.Set( (TUint8*)aEntry.Ptr(),
+    		aEntry.Length(), aEntry.Length() );
+    
+    //  Init and get entry info
+    pbBuffer->Set( &dataToSeparate );
+    pbBuffer->StartRead();
+    ret = pbBuffer->GetTagAndType( tmpTagValue, tagType );
+    // Ensure, that there is new entry containing data
+    if ( KErrNone == ret && tmpTagValue == newEntryTag )
+        {
+        // Get the first value from TLV data
+        ret = pbBuffer->GetTagAndType( tagValue, tagType );
+        while(ret == KErrNone)
+			{	
+			switch ( tagValue )
+		        {
+		        // Get name
+		        case RMobilePhoneBookStore::ETagPBText:
+		        	retVal = pbBuffer->GetValue( textPtr );
+		            if(retVal == KErrNone)
+		                {
+		                iPhbkEntry.iText = textPtr;
+		            	}
+		            break;
+		         // Get number
+		        case RMobilePhoneBookStore::ETagPBNumber:
+		            ret = pbBuffer->GetValue( numPtr );
+		            if(retVal == KErrNone)
+		            	{
+		            	iPhbkEntry.iNumber = numPtr;
+		            	}
+		            break;
+		         // get the index
+		        case RMobilePhoneBookStore::ETagPBAdnIndex:
+		        	retVal = pbBuffer->GetValue(index);
+		            if( retVal == KErrNone )
+		            	{
+		            	iPhbkEntry.iIndex = index;
+		            	}
+		            break;
+		         // get ETagPBTonNpi , not needed
+		        case RMobilePhoneBookStore::ETagPBTonNpi:
+		        	retVal = pbBuffer->GetValue(type);
+		            break;      
+		        default:
+		        	break;
+		        }//switch 
+			ret = pbBuffer->GetTagAndType( tagValue, tagType );
+		    }//while
+ 		}
+	CleanupStack::PopAndDestroy(pbBuffer);
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::StartRequest()
+	{
+	GetMaxNumberLen();
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreWrite::ExecuteCommand called"));
+	iState = ESetStoreName;
+	iTxBuffer.Zero();	
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iTxBuffer.Copy(KSelAdnPhonebook);
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iTxBuffer.Copy(KSelFdnPhonebook);
+		}
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::WriteEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::WriteEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkStoreWrite::WriteEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	TBuf8<KMaxNumberLen> tempNumber;
+	TBuf8<KMaxTextLen>   tempText;
+	//covert 16 bit to 8 bit
+	tempNumber.Copy(iPhbkEntry.iNumber);
+	tempText.Copy(iPhbkEntry.iText);
+	iTxBuffer.Format(KPhbkStoreWrite,iPhbkEntry.iIndex,
+			         &tempNumber,&tempText);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkStoreWrite::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookStoreWriteEntryComp(aStatus,iPhoneBookType,iPhbkEntry.iIndex,iMaxLen);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetStoreName )
+				{
+				iState = ESetStoreNameComplete;
+				}
+			else if( iState==EWriteEntry )
+				{
+				iState = EWriteEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetStoreNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if( iError==KErrNone )
+					{
+					iState = EWriteEntry;
+					WriteEntry();
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookStoreWriteEntryComp(iError,iPhoneBookType,
+																				 iPhbkEntry.iIndex,iMaxLen);
+					}
+				}
+			else if( iState== EWriteEntryComplete)
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iCtsyDispatcherCallback.CallbackPhonebookStoreWriteEntryComp(iError,iPhoneBookType,
+															                 iPhbkEntry.iIndex,iMaxLen);
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkStoreWrite::GetMaxNumberLen
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkStoreWrite::GetMaxNumberLen()
+	{
+	if( iPhoneBookType == DispatcherPhonebook::EIccAdn )
+		{
+		iMaxLen = iPhoneGlobals.iPhonebookStoreInfo.iAdnMaximumNumberLength;
+		}
+	else if( iPhoneBookType == DispatcherPhonebook::EIccFdn )
+		{
+		iMaxLen = iPhoneGlobals.iPhonebookStoreInfo.iFdnMaximumNumberLength;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkengetinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,136 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkengetinfo.h
+// This contains CAtPhbkEnGetInfo which is used to get emergency call info
+// 
+
+#ifndef ATPHBKENGETINFO_H
+#define ATPHBKENGETINFO_H
+
+//system include 
+#include <etelmm.h>
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtPhbkEnGetInfo
+ *
+ */
+class CAtPhbkEnGetInfo : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkEnGetInfo();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnGetInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnGetInfo* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkEnGetInfo(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	*  Executer AT command for getting Phone Store Info
+	*/
+	void GetEnStoreInfo();
+private:
+
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetEnStore,
+		ESetEnStoreComplete,
+		EGetEnStoreInfo,
+		EGetEnStoreInfoComplete,
+		EATNotInProgress
+		}iState;
+	
+    /**
+	* PhonebookEn used entries
+	*/		
+	TUint16 iUsed;
+	
+    /**
+	* PhonebookEn total entries
+	*/		
+	TUint16 iTotal;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;			
+
+	}; // class CAtPhbkEnGetInfo
+
+#endif //  ATPHBKENGETINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkenread.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,151 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkenread.h
+// This contains CAtPhbkEnRead which is use to read a PhonebookEn Entry
+// 
+
+#ifndef ATPHBKENREAD_H
+#define ATPHBKENREAD_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+//constant defination
+const TInt KEnNumberLen = 6;
+
+/**
+ * CAtPhbkEnRead
+ *
+ */
+class CAtPhbkEnRead : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkEnRead();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnRead* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnRead* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set read PhonebookEn index
+	* 
+	* @param  aIndex
+	* @param  aSlotNum
+	*/
+	void SetIndex(TInt aIndex);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtPhbkEnRead(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for reading a phonebook entry
+	*/	
+	void ReadEntry();
+	
+private:
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetEnName,
+		ESetEnNameComplete,
+		EReadEntry,
+		EReadEntryComplete,
+		EATNotInProgress
+		}iState;
+		
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;
+	
+	/*
+	* the first index should be read
+	*/
+	TInt iIndex;
+	
+	/*
+	* the phonebooken number want to read
+	*/
+	TBuf<KEnNumberLen> iNumber;
+	
+	
+	/*
+	*  indicate whether it is OK or ERROR string 
+	*/
+    TBool   iEndFlag;
+	
+	}; // class CAtPhbkEnRead
+#endif // ATPHBKENREAD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/inc/atphbkenreadall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,141 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkenreadall.h
+// This contains CAtPhbkEnReadAll which is used to read all PhonebookEn Entries
+// 
+
+#ifndef ATPHBKENREADALL_H
+#define ATPHBKENREADALL_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+//constant defination
+const TInt KEnNumberLength = 6;
+
+/**
+ * CAtPhbkEnReadAll
+ *
+ */
+class CAtPhbkEnReadAll : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtPhbkEnReadAll();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnReadAll* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtPhbkEnReadAll* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CAtPhbkEnReadAll(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  Executer AT command for reading phonebook entries
+	*/	
+	void ReadEntry();
+private:	
+	/**
+	*  state machine for EventSignal 
+	*/	
+	enum 
+		{
+		ESetEnName,
+		ESetEnNameComplete,
+		EReadEntry,
+		EReadEntryComplete,
+		EATNotInProgress
+		}iState;
+	
+	/**
+	* The return error value of AT command executed 
+	*/		
+	TInt iError;	
+
+	/*
+	* the first index should be read
+	*/
+	TInt iIndex;
+	
+	/*
+	* the phonebooken number want to read
+	*/
+	TBuf<KEnNumberLength> iNumber;
+	
+	/*
+	*  indicate whether it is OK or ERROR string 
+	*/
+    TBool   iEndFlag;
+	
+	}; // class CAtPhbkEnReadAll
+#endif // ATPHBKENREADALL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkengetinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,265 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkengetinfo.cpp
+// This contains CAtPhbkEnGetInfo which is used to get emergency call info
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <etelmm.h>
+
+//user include
+#include "atphbkengetinfo.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+
+//constant defination
+_LIT8(KSetEnStore,"AT+CPBS=\"%S\"\r");
+_LIT8(KGetEnStoreInfo,"AT+CPBS?\r");
+_LIT8(KCPBSResponseString,"+CPBS:");
+_LIT8(KPhonebookEn,"EN");
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::CAtPhbkEnGetInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnGetInfo::CAtPhbkEnGetInfo(CGlobalPhonemanager& aGloblePhone, 
+                                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkEnGetInfo::CAtPhbkEnGetInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::~CAtPhbkEnGetInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnGetInfo::~CAtPhbkEnGetInfo()
+	{
+	LOGTEXT(_L8("CAtPhbkEnGetInfo::~CAtPhbkEnGetInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnGetInfo* CAtPhbkEnGetInfo::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkEnGetInfo* self = new (ELeave)CAtPhbkEnGetInfo(aGloblePhone, 
+			                                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnGetInfo* CAtPhbkEnGetInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtPhbkEnGetInfo* self=CAtPhbkEnGetInfo::NewLC(aGloblePhone, 
+                                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkEnGetInfo::ExecuteCommand called"));
+	iState = ESetEnStore;
+	TPtrC8  storeName;
+	iTxBuffer.Zero();
+	storeName.Set(KPhonebookEn);
+	iTxBuffer.Format(KSetEnStore,&storeName);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkEnGetInfo::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookEnStoreGetInfoComp(aStatus,iUsed);
+		}
+	else
+		{
+		if( aEventSource == EWriteCompletion )
+			{
+			LOGTEXT(_L8("CAtPhbkEnGetInfo::EventSignal,EWriteCompletion!"));
+			if( iState==ESetEnStore )
+				{
+				iState = ESetEnStoreComplete;
+				}
+			else if( iState==EGetEnStoreInfo )
+				{
+				iState = EGetEnStoreInfoComplete;
+				}
+			 }
+		else 
+			{
+			LOGTEXT(_L8("CAtPhbkEnGetInfo::EventSignal,EReadCompletion!"));
+			if( iState == ESetEnStoreComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					iState = EGetEnStoreInfo;
+					GetEnStoreInfo();
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreGetInfoComp(iError,iUsed);
+					}
+				}
+			else if( iState == EGetEnStoreInfoComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				iCtsyDispatcherCallback.CallbackPhonebookEnStoreGetInfoComp(iError,iUsed);
+				}
+			}
+		}
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::GetEnStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::GetEnStoreInfo()
+	{
+	LOGTEXT(_L8("CAtPhbkEnGetInfo::GetEnStoreInfo callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Copy(KGetEnStoreInfo);
+	Write();   
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnGetInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnGetInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState==ESetEnStoreComplete )
+		{
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+		}
+	else if( iState==EGetEnStoreInfoComplete )
+		{
+		/**
+		* Here is an Example 
+		* +CPBS: "EN",2,16 
+        * phonebooken is selected,2 locations are used and 
+        * total 16 locations are available
+		*/
+		iError = KErrNone;
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		//remove AT+CPBS
+		if(array[0].MatchF(KAnyATCommand)!=KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG			
+		for( TInt i=0;i<count;i++ )
+			{
+		    LOGTEXT3(_L8("CAtPhbkEnGetInfo::ParseResponseL\tarray[%d]=%S"),
+		    		      i,&array[i]);     
+			}
+#endif			
+		if (count <= 1)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		if(array[0].MatchF(KCPBSResponseString)==KErrNotFound)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+				
+		//parse used
+		TLex8 lex(array[2]);
+		TUint16 val;
+		TInt ret=lex.Val(val,EDecimal);
+		if(ret!=KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iUsed = val;
+		
+		//parse total
+		TLex8 lex1(array[3]);
+		ret=lex1.Val(val,EDecimal);
+		if(ret!=KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		iTotal = val;
+	    LOGTEXT3(_L8("CAtPhbkEnGetInfo::ParseResponseL\tPreferred store used=%d, total=%d"), 
+	    		                                iUsed,iTotal);
+		CleanupStack::PopAndDestroy(&array);
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkenread.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,293 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkenread.cpp
+// This contains CAtPhbkEnRead which is use to read a PhonebookEn Entry
+// 
+
+//system include
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mpbutil.h>
+#include <cmmgsmphonestorageutility.h>
+
+//user include 
+#include "atphbkenread.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreRead,"AT+CPBR=%d\r");
+_LIT8(KSelPhonebookEn,"AT+CPBS=\"EN\"\r");
+_LIT8(KCPBRMatchString,"+CPBR:*");
+_LIT8(KCPBRSResponseString,"+CPBR:");
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::CAtPhbkEnRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnRead::CAtPhbkEnRead(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkEnRead::CAtPhbkEnRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::~CAtPhbkEnRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnRead::~CAtPhbkEnRead()
+	{
+	LOGTEXT(_L8("CAtPhbkEnRead::~CAtPhbkEnRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnRead* CAtPhbkEnRead::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkEnRead* self = new (ELeave)CAtPhbkEnRead(aGloblePhone, 
+                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnRead* CAtPhbkEnRead::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkEnRead* self=CAtPhbkEnRead::NewLC(aGloblePhone, 
+                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyOkString);
+	AddExpectStringL(KLtsyErrorString);
+	AddExpectStringL(KCPBRMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::SetIndex
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::SetIndex(TInt aIndex)
+	{
+	iIndex = aIndex;
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkEnRead::ExecuteCommand called"));
+	iState = ESetEnName;
+	iTxBuffer.Zero();	
+	iTxBuffer.Copy(KSelPhonebookEn);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::ReadEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::ReadEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkEnRead::ReadEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KPhbkStoreRead,iIndex);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkEnRead::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadEntryComp(aStatus,iIndex,iNumber);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetEnName )
+				{
+				iState = ESetEnNameComplete;
+				}
+			else if( iState==EReadEntry )
+				{
+				iState = EReadEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetEnNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					ClearBuffer();
+					iState = EReadEntry;
+					ReadEntry();
+					}
+				else 
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadEntryComp(iError,iIndex,iNumber);
+					}
+				}
+			else if( iState==EReadEntryComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				//encounter OK or ERROR
+				if( iEndFlag )
+					{
+					ClearBuffer();
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadEntryComp(iError,iIndex,iNumber);
+					}
+				else
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadEntryComp(iError,iIndex,iNumber);
+					ClearCurrentLine();
+					}
+				}
+			} 
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnRead::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnRead::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetEnNameComplete )
+	    {
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+	    }
+	else if( iState == EReadEntryComplete )
+		{
+		/**
+		* +CPBR = <index>,<number>,<129>
+		* OK    
+		*/
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		// remove the string of AT+CPBR=..
+		if(array[0].MatchF(KAnyATCommand)!=KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG		
+		for( TInt i=0;i<count;i++ )
+			{
+			LOGTEXT3(_L8("CAtPhbkEnRead::ParseResponseL\tarray[%d]=%S"),i,&array[i]); 
+			}
+#endif		
+		if((array[0].Match(KLtsyOkString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNone;
+			iEndFlag = ETrue;
+			return; 
+			}
+		else if((array[0].Match(KLtsyErrorString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrGeneral;
+			iEndFlag = ETrue;
+			return; 
+			}
+	  
+		iError = KErrNone;
+		//remove number line if it has 
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			array.Remove(0);
+			}
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse index
+		TLex8 lex(array[1]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		//Index  
+		iIndex = val;    
+		iNumber.Zero();
+		iNumber.Copy(array[2]);   
+		//Parse TON/NPI
+		TLex8 lex1(array[3]);
+		TUint16 val1;
+		ret = lex1.Val(val1,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		CleanupStack::PopAndDestroy();
+		} 
+    }
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/phonebooken/src/atphbkenreadall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,292 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atphbkenreadall.cpp
+// This contains CAtPhbkEnReadAll which is used to read all PhonebookEn Entries
+// 
+
+//system include 
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mpbutil.h>
+#include <cmmgsmphonestorageutility.h>
+
+//user include 
+#include "atphbkenreadall.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KPhbkStoreRead,"AT+CPBR=%d,%d\r");
+_LIT8(KSelPhonebookEn,"AT+CPBS=\"EN\"\r");
+_LIT8(KCPBRMatchString,"+CPBR:*");
+_LIT8(KCPBRSResponseString,"+CPBR:");
+const TInt KEnStartIndex = 1;
+const TInt KEnEndIndex = 16;
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::CAtPhbkEnReadAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnReadAll::CAtPhbkEnReadAll(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtPhbkEnReadAll::CAtPhbkEnReadAll called"));
+	iEndFlag = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::~CAtPhbkEnReadAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnReadAll::~CAtPhbkEnReadAll()
+	{
+	LOGTEXT(_L8("CAtPhbkEnReadAll::~CAtPhbkEnReadAll called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnReadAll* CAtPhbkEnReadAll::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkEnReadAll* self = new (ELeave)CAtPhbkEnReadAll(aGloblePhone, 
+                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtPhbkEnReadAll* CAtPhbkEnReadAll::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtPhbkEnReadAll* self=CAtPhbkEnReadAll::NewLC(aGloblePhone, 
+                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyOkString);
+	AddExpectStringL(KLtsyErrorString);
+	AddExpectStringL(KCPBRMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtPhbkEnReadAll::ExecuteCommand called"));
+	iState = ESetEnName;
+	iTxBuffer.Zero();	
+	iTxBuffer.Copy(KSelPhonebookEn);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::ReadEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::ReadEntry()
+	{
+	LOGTEXT(_L8("CAtPhbkEnReadAll::ReadEntry callded"));
+	iPhoneGlobals.iEventSignalActive = ETrue;
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KPhbkStoreRead,KEnStartIndex,KEnEndIndex);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtPhbkEnReadAll::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus != KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadAllComp(aStatus,iIndex,iNumber,EFalse);
+		}
+	else
+		{
+		if( aEventSource== EWriteCompletion )
+			{
+			if( iState==ESetEnName )
+				{
+				iState = ESetEnNameComplete;
+				}
+			else if( iState==EReadEntry )
+				{
+				iState = EReadEntryComplete;
+				}
+			}
+		else 
+			{
+			if( iState==ESetEnNameComplete )
+				{
+				Complete();
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				if(iError == KErrNone)
+					{
+					ClearBuffer();
+					iState = EReadEntry;
+					ReadEntry();
+					}
+				else 
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadAllComp(iError,iIndex,iNumber,EFalse);
+					}
+				}
+			else if( iState==EReadEntryComplete )
+				{
+				//encounter OK or ERROR
+				if( iEndFlag )
+					{
+					ClearBuffer();
+					iIndex++;
+					iNumber.Zero();
+					Complete();
+					iPhoneGlobals.iEventSignalActive = EFalse;
+		    		iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadAllComp(iError,iIndex,iNumber,EFalse);
+					}
+				else 
+					{
+					iCtsyDispatcherCallback.CallbackPhonebookEnStoreReadAllComp(iError,iIndex,iNumber,ETrue);
+					ClearCurrentLine();
+					}
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtPhbkEnReadAll::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtPhbkEnReadAll::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if( iState == ESetEnNameComplete )
+	    {
+		if (CurrentLine().Match(KLtsyOkString) == 0)
+			{
+			iError = KErrNone;
+			}
+		else
+			{
+			iError = KErrGeneral;
+			}
+	    }
+	else if( iState == EReadEntryComplete )
+		{
+		/**
+		* Here is an Example 
+		* at+CPBR=1,16  
+		*+CPBR: 1,"112",129
+		*+CPBR: 2,"911",129
+		*OK
+		*/
+		RArray<TPtrC8> array;
+		CleanupClosePushL(array);
+		iParser->ParseRespondedBuffer(array,Buffer());
+		// remove the string of AT+CPBR=..
+		if(array[0].MatchF(KAnyATCommand)!=KErrNotFound)
+			{
+			array.Remove(0);
+			}
+		TInt count = array.Count();
+#ifdef _DEBUG		
+		for( TInt i = 0;i<count;i++ )
+			{
+			LOGTEXT3(_L8("CAtPhbkEnReadAll::ParseResponseL\tarray[%d]=%S"),i,&array[i]);  
+			}
+#endif		
+		if((array[1].Match(KLtsyOkString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNone;
+			iEndFlag = ETrue;
+			return; 
+			}
+		else if((array[1].Match(KLtsyErrorString) == KErrNone))
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrGeneral;
+			iEndFlag = ETrue;
+			return; 
+			}
+	  
+		iError = KErrNone;
+		//remove number line if it has 
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			array.Remove(0);
+			}
+		if( array[0].MatchF(KCPBRSResponseString) == KErrNotFound )
+			{
+			CleanupStack::PopAndDestroy();
+			iError = KErrNotFound;
+			return;
+			}
+		//parse index
+		TLex8 lex(array[1]);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		//Index  
+		iIndex = val;     
+		iNumber.Zero();
+		iNumber.Copy(array[2]);   
+		//Parse TON/NPI
+		TLex8 lex1(array[3]);
+		TUint16 val1;
+		ret = lex1.Val(val1,EDecimal);
+		if(ret != KErrNone)
+			{
+			CleanupStack::PopAndDestroy();
+			iError = ret;
+			return;
+			}
+		CleanupStack::PopAndDestroy();
+		} 
+  	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/activatecontextandgetaddr.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file activatecontextandgetip.h
+// 
+// 
+
+#ifndef __CACTIVATECONTEXTANDGETIP_H__
+#define __CACTIVATECONTEXTANDGETIP_H__
+
+// user include
+#include <callbacktimer.h>
+#include "atcommandcontrolbase.h"
+
+class CATHelperCommand;
+class CATGprsContextActivate;
+class CATGPRSGetContextAddr;
+class CATGprsContextConnect;
+
+/**
+ * CActivatContextAndGetAddr inherits from the CATCommandControlBase class. 
+ * This class provide the common functionalities for activatinf context and 
+ * get context address.
+ *
+ */
+class CActivatContextAndGetAddr : public CATCommandControlBase
+{
+public:
+	static CActivatContextAndGetAddr* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CActivatContextAndGetAddr();
+	virtual void AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * start the request 
+	 */
+	void StartRequest();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+
+protected :
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CActivatContextAndGetAddr(CGlobalPhonemanager& aGloblePhone, 
+		                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * Call back when the at command finished
+	 * 
+	 */
+	void DispatcherCallback(TInt aError);
+	/**
+	 * Start an AT Command
+	 * @param  aAtCommand the AT Command class 
+	 */
+	void StartATCommand(CAtCommandBase* aAtCommand);
+	/**
+	 * End an AT Command
+	 * @param  aAtCommand  the AT Command class 
+	 */
+	void EndATCommand(CAtCommandBase* aAtCommand);
+	/**
+	 * Start an AT Help Command
+	 * @param  aATString the AT Command string 
+	 * @param  aATType the AT Command Type 
+	 */
+	void ExecuteATHelpCommand(const TDesC8& aATString,TLtsyATCommandType aATType);
+	
+private:
+	CATHelperCommand* iATHelperCommand;
+	CATGprsContextActivate* iATGprsContextActivate;
+	CATGPRSGetContextAddr* iATGPRSGetContextAddr;
+	CATGprsContextConnect* iATGprsContextConnect;
+	/**
+	 * Context ID
+	 */
+	TInt iContextId;
+    /**
+	* Identify the Type of AT Command
+	*/
+	TLtsyATCommandType iATType;
+	TUint iConnectionSpeed;
+	enum 
+		{
+		EATNone,
+		EATActivateContext,
+		EATGetContextIp
+		} iATCommandName;
+
+};
+#endif //__CACTIVATECONTEXTANDGETIP_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsattach.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,78 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsattach.h
+// This contains CATGprsAttach which is defines the AT command used for attacheing.
+// 
+
+
+#ifndef _ATGPRSATTACH_H
+#define _ATGPRSATTACH_H
+
+// user include
+#include "atcommandbase.h"
+
+/**
+ * CATGprsAttach inherits from the CAtCommandBase class. 
+ * This class provide the common functionalities for attacheing.
+ *
+ */
+class CATGprsAttach : public CAtCommandBase
+{
+public:
+	static CATGprsAttach* NewL(CGlobalPhonemanager& aGloblePhone, 
+                               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsAttach();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 *  Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Cancel the AT Command execution
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsAttach(CGlobalPhonemanager& aGloblePhone, 
+                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsconfig.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,98 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsconfig.h
+// AT command definition
+// This contains CATGPRSSetConfig which is defines the AT command used 
+// for setting GPRS context configuration.
+// 
+
+#ifndef _ATGPRSCONFIG_H
+#define _ATGPRSCONFIG_H
+
+// user include
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ * CATGPRSSetConfig inherits from the CAtCommandBase class. 
+ * This class provide the common functionalities for setting 
+ * GPRS context configuration.
+ *
+ */
+class CATGPRSSetConfig : public CAtCommandBase
+{
+public:
+	static CATGPRSSetConfig* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGPRSSetConfig();
+	/**
+	 * This Function creates the at set string for the AT+CGDCONT command.
+	 */
+	TInt MakeupCGDCONT();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGPRSSetConfig( CGlobalPhonemanager& aGloblePhone, 
+                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+	
+	TBool iDeleteContext;
+	
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextactivate.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,85 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprscontextactivate.h
+// AT command definition
+// This file defines the AT command used for activating a PDP context.
+// 
+
+#ifndef __ATGPRSCONTEXTACTIVATE_H
+#define __ATGPRSCONTEXTACTIVATE_H
+
+// user include
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+
+/**
+ * CATGprsContextActivate inherits from the CATCommands class. 
+ * Sends the AT command to attach a context to the network.
+ */
+class CATGprsContextActivate : public CAtCommandBase
+{
+public:
+	static CATGprsContextActivate* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsContextActivate();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	TInt GetErrorValue();
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsContextActivate(CGlobalPhonemanager& aGloblePhone, 
+                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextconnect.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,87 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprscontextconnect.h
+// AT command definition
+// This file defines the AT command used for activating a PDP context.
+// 
+
+#ifndef __ATGPRSCONTEXTCONNECT_H
+#define __ATGPRSCONTEXTCONNECT_H
+
+// user include
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+
+/**
+ * CATGprsContextConnect inherits from the CATCommands class. 
+ * Sends the AT command to attach a context to the network.
+ */
+class CATGprsContextConnect : public CAtCommandBase
+{
+public:
+	static CATGprsContextConnect* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsContextConnect();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	TInt GetErrorValue();
+	virtual void StartRequest();
+	TUint GetConnectionSpeed();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsContextConnect(CGlobalPhonemanager& aGloblePhone, 
+                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+	TUint iConnectionSpeed;
+};
+
+
+#endif //__ATGPRSCONTEXTCONNECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextdeactivate.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,89 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprscontextdeactivate.h
+// AT command definition
+// This file defines the AT command used for deactivating a PDP context.
+// 
+
+
+#ifndef __ATGPRSCONTEXTDEACTIVATE_H
+#define __ATGPRSCONTEXTDEACTIVATE_H
+
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ * CATGprsContextDelete inherits from the CATCommands class. 
+ * Sends the AT command to deactivate a context to the network.
+ */
+class CATGprsContextDeactivate : public CAtCommandBase
+{
+public:
+	static CATGprsContextDeactivate* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsContextDeactivate();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsContextDeactivate(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructorr
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprscontextdelete.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,89 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprscontextdelete.h
+// AT command definition
+// This file defines the AT command used for deleting a context from the phone.
+// 
+
+#ifndef __ATGPRSCONTEXTDELETE_H
+#define __ATGPRSCONTEXTDELETE_H
+
+// user include
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ * CATGprsContextDelete inherits from the CATCommands class. 
+ * Sends the AT command 'AT+CGDCONT=x' to delete a context from the phone
+ */
+class CATGprsContextDelete : public CAtCommandBase
+{
+public:
+	static CATGprsContextDelete* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsContextDelete();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsContextDelete(CGlobalPhonemanager& aGloblePhone, 
+                         CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructorr
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsdetach.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,78 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsdetach.h
+// AT command definition
+// This file defines the AT command used for detaching..
+// 
+
+#ifndef _ATGPRSDETACH_H
+#define _ATGPRSDETACH_H
+
+#include "atcommandbase.h"
+
+/**
+ * CATGprsDetach inherits from the CAtCommandBase class. 
+ * Sends the AT command to detach from the network.
+ * This class transmits the following commands: AT+CGATT=0
+ */
+class CATGprsDetach : public CAtCommandBase
+{
+public:
+	static CATGprsDetach* NewL(CGlobalPhonemanager& aGloblePhone, 
+                               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsDetach();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsDetach(CGlobalPhonemanager& aGloblePhone, 
+                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsgetcontextaddr.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,90 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsgetcontextip.h
+// AT command definition
+// This contains CATGPRSGetContextAddr which is defines the AT command used 
+// for getting GPRS context IP address.
+// 
+
+#ifndef _ATGPRSGETCONTEXTIP_H
+#define _ATGPRSGETCONTEXTIP_H
+
+// user include
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ * CATGPRSGetContextAddr inherits from the CAtCommandBase class. 
+ * This class provide the common functionalities for getting 
+ * GPRS context IP address..
+ *
+ */
+class CATGPRSGetContextAddr : public CAtCommandBase
+{
+public:
+	static CATGPRSGetContextAddr* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGPRSGetContextAddr();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	TInt GetErrorValue();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGPRSGetContextAddr( CGlobalPhonemanager& aGloblePhone, 
+                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+	/*
+	 * The config to be set configuration
+	 */
+	RPacketContext::TContextConfigGPRS iContextConfig;
+    };
+
+#endif //_ATGPRSGETCONTEXTIP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsntwkregstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,90 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsntwkregstatus.h
+// AT command definition
+// This file defines the AT command used for getting out the phones current network
+//registration status..
+// 
+
+#ifndef __ATGPRSNTWKREGSTATUS_H
+#define __ATGPRSNTWKREGSTATUS_H
+
+//system include
+#include <etelpckt.h>
+
+//user include
+#include "atcommandbase.h"
+
+class CATGprsNtwkRegStatusChange;
+/**
+ * CATGprsNtwkRegStatus inherits from the CAtCommandBase class. 
+ * Sends the AT command to find out the phones current network
+ * registration status.
+ * This class transmits the following commands: AT+CGREG?
+ */
+class CATGprsNtwkRegStatus : public CAtCommandBase
+{
+public:
+	static CATGprsNtwkRegStatus* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+                                      CATGprsNtwkRegStatusChange& aNtwkRegStatusChange);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsNtwkRegStatus();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 * @param aNtwkRegStatusChange
+	 */
+	CATGprsNtwkRegStatus(CGlobalPhonemanager& aGloblePhone, 
+                         CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+                         CATGprsNtwkRegStatusChange& aNtwkRegStatusChange);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	RPacketService::TRegistrationStatus iGprsRegistrationStatus; 
+	CATGprsNtwkRegStatusChange& iNtwkRegStatusChange;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsntwkregstatuschange.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,108 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsntwkregstatus.h
+// AT command definition
+// This file defines the AT command used to Notify the phones current network
+//registration status..
+//
+
+#ifndef __ATGPRSNTWKREGSTATUSCHANGE_H
+#define __ATGPRSNTWKREGSTATUSCHANGE_H
+
+//system include
+
+//user include
+#include "atcommandbase.h"
+/**
+ * CATGprsNtwkRegStatusChange inherits from the CAtCommandBase class. 
+ * AT command to Notify the phones current network
+ * registration status.
+ * This class transmits the following commands: +CGREG:
+ */
+class CATGprsNtwkRegStatusChange : public CAtCommandBase
+	{
+public:
+	static CATGprsNtwkRegStatusChange* NewL(CGlobalPhonemanager& aGloblePhone,
+			                                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	static CATGprsNtwkRegStatusChange* NewLC(CGlobalPhonemanager& aGloblePhone,
+			                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);			                     	
+	/**
+	 * Destructor
+	 *
+	 */
+	virtual ~CATGprsNtwkRegStatusChange();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand(){};
+	/**
+	 * Parses the +CGREG unsolicited string from the modem.
+	 * An example response would be '+CGREG: 2' where the value denotes the
+	 * current registration status.
+	 * If parsing succeeds then aRegStatus is updated.
+	 * 
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	 * 
+	 * 
+	 */
+	void Enable();
+	/**
+	 * 
+	 * 
+	 */
+	void Disable();
+	
+	
+protected:
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsNtwkRegStatusChange(CGlobalPhonemanager& aGloblePhone,
+				               CCtsyDispatcherCallback& aCtsyDispatcherCallback);	
+	/**
+	 * 2nd Constructor
+	 * This function must be called in his subtype class for 
+	 * creating instance of class CRespondBufParser
+	 */
+	void ConstructL();
+	
+private:
+	/**
+	 * 
+	 * 
+	 */
+	RPacketService::TRegistrationStatus iRegistrationStatus;
+	/*
+	 * The return value of AT command executed 
+	 */
+	TInt iError;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/atgprsqosprofile.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,87 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atgprsqosprofile.h
+// AT command definition
+// This file defines the AT command used to set GPRS Qos profile
+//
+
+#ifndef __ATGPRSQOSPROFILE_H
+#define __ATGPRSQOSPROFILE_H
+
+#include "atcommandbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ * CATGprsSetProfileMin inherits from the CAtCommandBase class. 
+ * AT command to set GPRS Qos profile for require value
+ * This class transmits the following commands: AT+CGQREQ=%d,%d,%d,%d,%d,%d
+ */
+class CATGprsSetProfileReq : public CAtCommandBase
+{
+public:
+	static CATGprsSetProfileReq* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CATGprsSetProfileReq();
+	/**
+	 * Format the command 
+	 */
+	void MakeupCGQREQ();
+	/**
+	 * Set the context for config
+	 * 
+	 */
+	void SetContext(const TInt aContextId);
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * Start Execute AT Command
+	 */
+	virtual void ExecuteCommand();
+	/**
+	 * Virtual function. Inherited from CAtCommandBase
+	 * @param aResponseBuf Line buf reading from baseband 
+	 */
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	 * Will be called by AT Manager whenever a event was triggered
+	 * 
+	 * @param aEventSource
+	 * @param aStatus
+	 */
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	virtual void StartRequest();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CATGprsSetProfileReq( CGlobalPhonemanager& aGloblePhone, 
+                          CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	TInt iError;
+	TInt iContextId;
+	RPacketQoS::TQoSGPRSRequested iQoSConfig;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/inc/initialisepdpcontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,83 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file initialisepdpcontext.h
+// This contains CInitialisePdpContext which is defines the founctions for loan comm port.
+// 
+
+#ifndef __INITIALISEPDPCONTEXT_H__
+#define __INITIALISEPDPCONTEXT_H__
+
+#include <callbacktimer.h>
+
+// user include
+#include "atcommandcontrolbase.h"
+#include "cltsypacketserviceshandler.h"
+
+/**
+ *  CInitialisePdpContext inherits from the MTimerObserver class. 
+ * This class provide the common functionalities for Initialise Pdp Context.
+ */
+class CInitialisePdpContext : public MTimerObserver,
+                              public CBase
+{
+public:
+	static CInitialisePdpContext* NewL(CGlobalPhonemanager& aGloblePhone, 
+		                               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * Destructor
+	 *
+	 */
+	~CInitialisePdpContext();
+
+	void StartRequest();
+	/*
+	 * Set the parameter of AT command 
+	 * 
+	 * @param aContext The context to be set configuration
+	 */
+	void SetContext(const TInt aContextId);
+	/**
+	 * This function will stop the TSY from using the comport 
+	 * and loan it to the client.
+	 */
+	void LoanCommPort();
+	
+protected:	
+	/**
+	 * Constructor
+	 *
+	 * @param aGloblePhone
+	 * @param aCtsyDispatcherCallback
+	 */
+	CInitialisePdpContext(CGlobalPhonemanager& aGloblePhone, 
+		                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	/**
+	 * 2nd Constructor
+	 */
+	void ConstructL();
+private:
+	//From MTimerObserver
+    virtual void TimerRun(TInt aError);	
+private:
+	
+	CGlobalPhonemanager& iPhoneGlobals;
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	CCallbackTimer* iCallbackTimer;	
+	/*
+	 * The context to be set configuration
+	 */
+	TInt iContextId;
+    };
+
+#endif //__INITIALISEPDPCONTEXT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/activatecontextandgetaddr.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,313 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CActivatContextAndGetAddr
+// 
+
+#include <ctsy/ltsy/ltsylogger.h>
+
+#include "activatecontextandgetaddr.h"
+#include "mslogger.h"
+#include "athelpercommand.h"
+#include "atgprscontextactivate.h"
+#include "atgprsgetcontextaddr.h"
+#include "atgprscontextconnect.h"
+#include "commengine.h"
+
+_LIT8(KATDeleteContext2, "AT+CGDCONT=2\r");
+_LIT8(KATDeleteContext3, "AT+CGDCONT=3\r");
+_LIT8(KATDeleteContext4, "AT+CGDCONT=4\r");
+
+// CActivatContextAndGetAddr
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::NewL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CActivatContextAndGetAddr* CActivatContextAndGetAddr::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CActivatContextAndGetAddr* self = new(ELeave) CActivatContextAndGetAddr(aGloblePhone,
+			                                      aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::CActivatContextAndGetAddr()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CActivatContextAndGetAddr::CActivatContextAndGetAddr(CGlobalPhonemanager& aGloblePhone, 
+	                        CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::CActivatContextAndGetAddr()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::ConstructL()
+	{
+	iATCommandName = EATNone;
+	iATHelperCommand = CATHelperCommand::NewL(iPhoneGlobals,iCtsyDispatcherCallback);
+	
+	iATGprsContextActivate = CATGprsContextActivate::NewL(iPhoneGlobals,
+			                                              iCtsyDispatcherCallback);
+	iATGPRSGetContextAddr = CATGPRSGetContextAddr::NewL(iPhoneGlobals,
+								                        iCtsyDispatcherCallback);
+	iATGprsContextConnect = CATGprsContextConnect::NewL(iPhoneGlobals,
+								                        iCtsyDispatcherCallback);
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::~CActivatContextAndGetAddr()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CActivatContextAndGetAddr::~CActivatContextAndGetAddr()
+	{
+	delete iATHelperCommand;
+	iATHelperCommand = NULL;
+	
+	delete iATGprsContextActivate;
+	iATGprsContextActivate = NULL;
+	
+	delete iATGPRSGetContextAddr;
+	iATGPRSGetContextAddr = NULL;
+	
+	delete iATGprsContextConnect;
+	iATGprsContextConnect = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::AtCommandExecuteComplete()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::AtCommandExecuteComplete(TAtEventSource aEventSource, 
+		                                                 TInt aStatus)
+	{
+	if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus))
+		{
+		return;
+		}
+	
+	TInt ret = KErrNone;
+	switch(iATType)
+		{
+		case ELtsyAT_Packet_DeleteContext2:
+            ret = iATHelperCommand->GetErrorValue();
+		    if ((KErrNone == ret) && (KErrNone == aStatus))
+		        {
+		        ExecuteATHelpCommand(KATDeleteContext3,ELtsyAT_Packet_DeleteContext3);
+		        }
+		    else
+		        {
+	            EndATCommand(iATHelperCommand);
+                iPhoneGlobals.iEventSignalActive = EFalse;
+                LOGTEXT3(_L8("[Ltsy] DeleteContext2 failed (%d or %d) in CActivatContextAndGetAddr"), ret, aStatus);
+                DispatcherCallback(KErrGeneral);
+		        }
+			break;
+		case ELtsyAT_Packet_DeleteContext3:
+            ret = iATHelperCommand->GetErrorValue();
+            if ((KErrNone == ret) && (KErrNone == aStatus))
+                {
+                ExecuteATHelpCommand(KATDeleteContext4,ELtsyAT_Packet_DeleteContext4);
+                }
+            else
+                {
+                EndATCommand(iATHelperCommand);
+                iPhoneGlobals.iEventSignalActive = EFalse;
+                LOGTEXT3(_L8("[Ltsy] DeleteContext3 failed (%d or %d) in CActivatContextAndGetAddr"), ret, aStatus);
+                DispatcherCallback(KErrGeneral);
+                }
+			break;
+		case ELtsyAT_Packet_DeleteContext4:
+            ret = iATHelperCommand->GetErrorValue();
+            EndATCommand(iATHelperCommand);
+            if ((KErrNone == ret) && (KErrNone == aStatus))
+                {
+                iATGprsContextActivate->SetContext(iContextId);
+                StartATCommand(iATGprsContextActivate);
+                }
+            else
+                {
+                iPhoneGlobals.iEventSignalActive = EFalse;
+                LOGTEXT3(_L8("[Ltsy] DeleteContext4 failed (%d or %d) in CActivatContextAndGetAddr"), ret, aStatus);
+                DispatcherCallback(KErrGeneral);
+                }
+			break;
+		case ELtsyAT_Packet_ActivateContext:
+			EndATCommand(iATGprsContextActivate);
+			if(aStatus == KErrNone)
+				{
+				ret = iATGprsContextActivate->GetErrorValue();
+				if(KErrNone == ret)
+					{
+					iATGPRSGetContextAddr->SetContext(iContextId);
+					StartATCommand(iATGPRSGetContextAddr);
+					}
+				else
+				    {
+				    iPhoneGlobals.iEventSignalActive = EFalse;
+				    DispatcherCallback(ret);
+				    }
+				}
+			else
+				{
+				iPhoneGlobals.iEventSignalActive = EFalse;
+				DispatcherCallback(aStatus);
+				}
+			break;
+		case ELtsyAT_Packet_GetContextAddr: 
+			EndATCommand(iATGPRSGetContextAddr);
+			if(aStatus == KErrNone)
+				{
+				ret = iATGPRSGetContextAddr->GetErrorValue();
+				if(KErrNone == ret)
+					{
+					iATGprsContextConnect->SetContext(iContextId);
+					StartATCommand(iATGprsContextConnect);
+					}
+				else
+				    {
+                    iPhoneGlobals.iEventSignalActive = EFalse;
+                    DispatcherCallback(ret);
+				    }
+				}
+			else
+				{
+                iPhoneGlobals.iEventSignalActive = EFalse;
+				DispatcherCallback(aStatus);
+				}
+			break;
+		case ELtsyAT_Packet_ConnectContext: 
+			EndATCommand(iATGprsContextConnect);
+			if(aStatus == KErrNone)
+				{
+				ret = iATGprsContextConnect->GetErrorValue();
+				if(KErrNone == aStatus)
+					{
+					iConnectionSpeed = iATGprsContextConnect->GetConnectionSpeed();
+					}
+				DispatcherCallback(ret);
+				}
+			else
+				{
+				DispatcherCallback(aStatus);
+				}
+            iPhoneGlobals.iEventSignalActive = EFalse;
+			break;
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::StartRequest()
+	{
+	iATHelperCommand->SetAtCommandObserver(this);
+	ExecuteATHelpCommand(KATDeleteContext2,ELtsyAT_Packet_DeleteContext2);
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::SetContext()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::ExecuteNextATHelpCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::ExecuteATHelpCommand(const TDesC8& aATString,TLtsyATCommandType aATType)
+	{
+	iATHelperCommand->Complete();
+	iATHelperCommand->SetAtCommandString(aATString);
+	iATType = aATType;
+	iATHelperCommand->StartRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::StartATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::StartATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->SetAtCommandObserver(this);
+	iATType = aAtCommand->AtType();
+	aAtCommand->StartRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::EndATCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::EndATCommand(CAtCommandBase* aAtCommand)
+	{
+	aAtCommand->RemoveAtCommandObserver();
+	aAtCommand->Complete();
+	}
+
+// ---------------------------------------------------------------------------
+// CActivatContextAndGetAddr::DispatcherCallback()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CActivatContextAndGetAddr::DispatcherCallback(TInt aError)
+	{
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i = 0;
+	
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesActivatePdpContextComp(aError, 
+			                iPhoneGlobals.iContextList[i]->iInfo.iName,
+			                iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iAccessPointName,
+			                iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iPdpType);
+	if(aError == KErrNone)
+		{
+		iPhoneGlobals.iContextList[i]->iInfo.iStatus = RPacketContext::EStatusActive;
+		TContextMisc contextMisc;
+		contextMisc.iStatus = RPacketContext::EStatusActive;
+		iPhoneGlobals.iPhoneStatus.iMode = RPhone::EModeOnlineData;
+		iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextStatusChangeInd(aError,
+								iPhoneGlobals.iContextList[i]->iInfo.iName,
+								contextMisc);
+		iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextConfigChangedInd(aError, 
+				                iPhoneGlobals.iContextList[i]->iInfo.iName, 
+				                iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iAccessPointName, 
+				                iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iPdpAddress, 
+				                0, 
+				                iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iProtocolConfigOption.iMiscBuffer);
+		iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextConnectionSpeedChangeInd(aError,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+				                iConnectionSpeed);
+		iPhoneGlobals.iCommEngine->CommCancel();
+		}
+	}
+
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsattach.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,138 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGprsAttach
+// The execution command is used to attach the MT to, or detach the MT from, the GPRS
+// service. After the command has completed, the MT remains in V.25ter command state.
+// If the MT is already in the requested state, the command is ignored and the OK
+// response is returned. If the requested state cannot be achieved, an ERROR or +CME
+// ERROR response is returned. Extended error responses are enabled by the +CMEE
+// command.
+// Any active PDP contexts will be automatically deactivated when the attachment state
+// changes to detached.
+// The read command returns the current GPRS service state.
+// The test command is used for requesting information on the supported GPRS service
+// states.
+// +CGATT= [<state>]
+// <state>: indicates the state of GPRS attachment
+// 0 – detached
+// 1 – attached
+// Other values are reserved and will result in an ERROR response to the
+// execution command.
+// other items were commented in a header
+// 
+
+#include "atgprsattach.h"
+#include "mslogger.h"
+
+_LIT8(KAttachCommand, "AT+CGATT=1\r");
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::NewL
+// other items were commented in a header
+// --------------------------------------------------------------------------
+CATGprsAttach* CATGprsAttach::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsAttach* self = new(ELeave) CATGprsAttach(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::CATGprsAttach
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsAttach::CATGprsAttach(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsAttach::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::~CATGprsAttach()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsAttach::~CATGprsAttach()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsAttach::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsAttach::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KAttachCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsAttach::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsAttach::EventSigna
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsAttach::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesPacketAttachComp(aStatus);
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsconfig.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,242 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CActivatContextAndGetAddr
+// This command specifies PDP context parameter values for a PDP context identified 
+// by the local context identification parameter, <cid>.
+// Eleven PDP contexts can be defined through Wavecom software.
+// A special form of the set command, +CGDCONT= <cid> causes the values for context
+// number <cid> to become undefined.
+// The test command returns values supported as a compound value. If the MT supports
+// several PDP types, <PDP_type>, the parameter value ranges for each <PDP_type> are
+// returned on a separate line.
+// The read command returns the current settings for each defined context.
+// The test command returns values supported as a compound value. If the MT supports
+// several PDP types, <PDP_type), the parameter value ranges for each <PDP_type> are
+// returned on a separate line.
+// +CGDCONT=[<cid> [,<PDP_type> [,<APN>[,<PDP_addr> [,<d_comp>[,<h_comp>]]]]]]
+// Defined values
+// <cid>: (PDP Context Identifier) a numeric parameter (1-32) which specifies a particular
+// PDP context definition. The parameter is local to the TE-MT interface and is used in
+// other PDP context-related commands.
+// <PDP_type>: (Packet Data Protocol type) a string parameter which specifies the type of
+// packet data protocol
+// IP Internet Protocol
+// PPP Point to Point Protocol
+// <APN>: (Access Point Name) a string parameter, which is a logical name that is used to
+// select the GGSN or the external packet data network.
+// If the value is null or omitted, then the subscription value will be requested.
+// WAVECOM confidential ?
+// This confidential document is the property of WAVECOM and may not be copied or circulated
+// without permission
+// <PDP_address>: a string parameter that identifies the MT in the address space
+// applicable to the PDP.
+// If the value is null or omitted, then a value may be provided by the TE during the PDP
+// startup procedure or, failing that, a dynamic address will be requested.
+// The read form of the command will continue to return the null string even if an address
+// has been allocated during the PDP startup procedure. The allocated address may be
+// read using the +CGPADDR command.
+// <d_comp>: a numeric parameter that controls PDP data compression
+// 0 - off (default if value is omitted)
+// 1 ?on
+// Other values are reserved.
+// <h_comp>: a numeric parameter that controls PDP header compression
+// 0 - off (default if value is omitted)
+// 1 ?on
+// Other values are reserved.
+// other items were commented in a header
+
+#include "mslogger.h"
+#include "atgprsconfig.h"
+
+_LIT8(KIPType4	, "IP");
+_LIT8(KIPType6	, "IP");
+_LIT8(KX25		, "X25");
+_LIT8(KSetCGDCONTCommand,"AT+CGDCONT=%d,\"%S\",\"%S\"\r");
+_LIT8(KATDeleteContext1, "AT+CGDCONT=1\r");
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::NewL
+//
+// ---------------------------------------------------------------------------
+CATGPRSSetConfig* CATGPRSSetConfig::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGPRSSetConfig* self = new(ELeave) CATGPRSSetConfig(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::CATGPRSSetConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGPRSSetConfig::CATGPRSSetConfig(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iDeleteContext = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::~CATGPRSSetConfig()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGPRSSetConfig::~CATGPRSSetConfig()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::ExecuteCommand()
+	{
+	iDeleteContext = ETrue;
+	iTxBuffer.Copy(KATDeleteContext1);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::MakeupCGDCONT()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGPRSSetConfig::MakeupCGDCONT()
+	{
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i;
+	//Get the context location from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	const TInt KPDPTypeIdent=5;
+	TBuf8<KPDPTypeIdent>						pdpType;		// PDP Type identifier
+	TBuf8<RPacketContext::KGSNNameLength>		gsnName;			// Access point Name
+	TBuf8<RPacketContext::KMaxPDPAddressLength>	pdpAddress;	// PDP pre-assigned address
+	switch(iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iPdpType)
+		{
+		case RPacketContext::EPdpTypeIPv4:
+			pdpType.Format(KIPType4);
+			break;
+		case RPacketContext::EPdpTypeIPv6:
+			pdpType.Format(KIPType6);
+			break;
+		case RPacketContext::EPdpTypeX25:
+			pdpType.Format(KX25);
+			break;
+		default:
+			pdpType.Format(KIPType6);
+			break;
+		}
+
+	gsnName.Copy(iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iAccessPointName);
+	pdpAddress.Copy(iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iPdpAddress);
+
+	iTxBuffer.Format(KSetCGDCONTCommand, iContextId, &pdpType, &gsnName);
+
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSSetConfig::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSSetConfig::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	if(iDeleteContext)
+		{
+		iDeleteContext = EFalse;
+		TInt ret=MakeupCGDCONT();
+		Write();
+		}
+	else
+		{
+		TInt count = iPhoneGlobals.iContextList.Count();
+		TInt i;
+		//Get the context location from context list
+		for(i = 0; i < count;i++)
+			{
+			if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+				{
+				break;
+				}
+			}
+		iCtsyDispatcherCallback.CallbackPacketServicesSetPdpContextConfigComp(aStatus,
+						        iPhoneGlobals.iContextList[i]->iInfo.iName);
+        iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextAddedInd(aStatus,
+                                iPhoneGlobals.iContextList[i]->iInfo.iName);
+		CAtCommandBase::Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		}
+	}
+
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextactivate.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,148 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The execution command is used to activate or deactivate the specified PDP context (s).
+// After the command has completed, the MT remains in V.25ter command state. If any
+// PDP context is already in the requested state, the state for that context remains
+// unchanged.
+// If the requested state for any specified context cannot be achieved, an ERROR or +CME
+// ERROR response is returned. Extended error responses are enabled by the +CMEE
+// command.
+// If the MT is not GPRS attached when the activation form of the command is executed,
+// the MT first performs a GPRS attach and them attempts to activate the specified
+// contexts. If the attach fails then the MT responds with ERROR or, if extended error
+// responses are enabled, with the appropriate failure-to-attach error message.
+// If no <cid>s are specified the activation form of the command activates all defined
+// contexts.
+// If no <cid>s are specified the deactivation form of the command deactivates all active
+// contexts.
+// Two PDP contexts can be activated through Wavecom software.
+// The read command returns the current activation states for all the defined PDP
+// contexts.
+// The test command is used for requesting information on the supported PDP context
+// activation states.
+// Defined Values
+// <state>: indicates the state of PDP context activation
+//  0 ?deactivated
+//  1 ?activated
+//  Other values are reserved and will result in an ERROR response to the
+// execution command.
+// <cid>: a numeric parameter which specifies a particular PDP context.
+//  other items were commented in a header
+
+#include "mslogger.h"
+#include "atgprscontextactivate.h"
+
+_LIT8(KATContextActivate,   "AT+CGACT=1,%d\r");
+const TInt KLtsyGprsContextActivateTimeOut = 30;
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::NewL
+//
+// ---------------------------------------------------------------------------
+CATGprsContextActivate* CATGprsContextActivate::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsContextActivate* self = new(ELeave) CATGprsContextActivate(aGloblePhone,
+			                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::CATGprsContextActivate
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextActivate::CATGprsContextActivate(CGlobalPhonemanager& aGloblePhone, 
+                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextActivate::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Packet_ActivateContext;
+	iReadTimeOut = KLtsyGprsContextActivateTimeOut;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::~CATGprsContextActivate()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextActivate::~CATGprsContextActivate()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextActivate::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextActivate::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CATGprsContextActivate::Start called"));
+	LOGTEXT2(_L8("iCid=%d"),iContextId);
+	iTxBuffer.Format(KATContextActivate,iContextId);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextActivate::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGprsContextActivate::GetErrorValue()
+	{
+	return iError;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextActivate::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextActivate::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextconnect.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,178 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The execution command is used to activate or deactivate the specified PDP context (s).
+// After the command has completed, the MT remains in V.25ter command state. If any
+// PDP context is already in the requested state, the state for that context remains
+// unchanged.
+// If the requested state for any specified context cannot be achieved, an ERROR or +CME
+// ERROR response is returned. Extended error responses are enabled by the +CMEE
+// command.
+// If the MT is not GPRS attached when the activation form of the command is executed,
+// the MT first performs a GPRS attach and them attempts to activate the specified
+// contexts. If the attach fails then the MT responds with ERROR or, if extended error
+// responses are enabled, with the appropriate failure-to-attach error message.
+// If no <cid>s are specified the activation form of the command activates all defined
+// contexts.
+// If no <cid>s are specified the deactivation form of the command deactivates all active
+// contexts.
+// Two PDP contexts can be activated through Wavecom software.
+// The read command returns the current activation states for all the defined PDP
+// contexts.
+// The test command is used for requesting information on the supported PDP context
+// activation states.
+// Defined Values
+// <state>: indicates the state of PDP context activation
+//  0 ?deactivated
+//  1 ?activated
+//  Other values are reserved and will result in an ERROR response to the
+// execution command.
+// <cid>: a numeric parameter which specifies a particular PDP context.
+//  other items were commented in a header
+
+#include "mslogger.h"
+#include "atgprscontextconnect.h"
+
+_LIT8(KATContextConnect,   "ATD*99***%d#\r");
+_LIT8(KLtsyGprsNoConnect, "NO CARRIER");
+_LIT8(KLtsyGprsConnectStr, "CONNECT*");
+_LIT8(KLtsyGprsConnect, "CONNECT");
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::NewL
+//
+// ---------------------------------------------------------------------------
+CATGprsContextConnect* CATGprsContextConnect::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsContextConnect* self = new(ELeave) CATGprsContextConnect(aGloblePhone,
+			                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::CATGprsContextConnect
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextConnect::CATGprsContextConnect(CGlobalPhonemanager& aGloblePhone, 
+                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextConnect::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Packet_ConnectContext;
+	AddExpectStringL(KLtsyGprsConnectStr);
+	AddExpectStringL(KLtsyGprsNoConnect);
+	iReadTimeOut = 30;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::~CATGprsContextConnect()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextConnect::~CATGprsContextConnect()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextConnect::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextConnect::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CATGprsContextConnect::Start called"));
+	LOGTEXT2(_L8("iCid=%d"),iContextId);
+	iTxBuffer.Format(KATContextConnect,iContextId);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextConnect::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGprsContextConnect::GetErrorValue()
+	{
+	return iError;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::GetConnectionSpeed
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TUint CATGprsContextConnect::GetConnectionSpeed()
+	{
+	return iConnectionSpeed;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextConnect::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextConnect::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,CurrentLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	if( array[0].MatchF(KLtsyGprsConnect)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	else
+		{
+		TUint val = 0;
+		TLex8 lex(array[1]);
+		lex.Val(val);
+		iConnectionSpeed = val;
+		CleanupStack::PopAndDestroy(&array);
+		iError = KErrNone;
+		}
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextdeactivate.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,176 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The execution command is used to activate or deactivate the specified PDP context (s).
+// After the command has completed, the MT remains in V.25ter command state. If any
+// PDP context is already in the requested state, the state for that context remains
+// unchanged.
+// If the requested state for any specified context cannot be achieved, an ERROR or +CME
+// ERROR response is returned. Extended error responses are enabled by the +CMEE
+// command.
+// If the MT is not GPRS attached when the activation form of the command is executed,
+// the MT first performs a GPRS attach and them attempts to activate the specified
+// contexts. If the attach fails then the MT responds with ERROR or, if extended error
+// responses are enabled, with the appropriate failure-to-attach error message.
+// If no <cid>s are specified the activation form of the command activates all defined
+// contexts.
+// If no <cid>s are specified the deactivation form of the command deactivates all active
+// contexts.
+// Two PDP contexts can be activated through Wavecom software.
+// The read command returns the current activation states for all the defined PDP
+// contexts.
+// The test command is used for requesting information on the supported PDP context
+// activation states.
+// Defined Values
+// <state>: indicates the state of PDP context activation
+//  0 ?deactivated
+//  1 ?activated
+//  Other values are reserved and will result in an ERROR response to the
+// execution command.
+// <cid>: a numeric parameter which specifies a particular PDP context.
+//  other items were commented in a header
+// other items were commented in a header
+
+#include "mslogger.h"
+#include "atgprscontextdeactivate.h"
+
+_LIT8(KATContextDeactivate,   "AT+CGACT=0,%d\r");
+const TInt KDefaultDeactivateTimeout = 30;
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::NewL
+//
+// ---------------------------------------------------------------------------
+CATGprsContextDeactivate* CATGprsContextDeactivate::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsContextDeactivate* self = new(ELeave) CATGprsContextDeactivate(aGloblePhone,
+			                                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::CATGprsContextDeactivate
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextDeactivate::CATGprsContextDeactivate(CGlobalPhonemanager& aGloblePhone, 
+                                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	iReadTimeOut = KDefaultDeactivateTimeout;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Packet_DeactivateContext;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::~CATGprsContextDeactivate()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextDeactivate::~CATGprsContextDeactivate()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::ExecuteCommand()
+	{
+	LOGTEXT2(_L8("iCid=%d"),iContextId);
+	// Send the AT+CGACT=0,x command to the phone
+	iTxBuffer.Format(KATContextDeactivate,iContextId);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDeactivate::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDeactivate::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((KErrNone ==aStatus)&&(aEventSource == EWriteCompletion))
+		{
+		return;
+		}
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i;
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	if((KErrNone ==aStatus)&&(aEventSource == EReadCompletion)&&(iError==KErrNone))
+		{
+		iPhoneGlobals.iContextList[i]->iInfo.iStatus = RPacketContext::EStatusInactive;
+		TContextMisc contextMisc;
+		contextMisc.iStatus = RPacketContext::EStatusInactive;
+		iPhoneGlobals.iPhoneStatus.iMode = RPhone::EModeOnlineCommand;
+		iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextStatusChangeInd(iError,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+				                contextMisc);
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesDeactivatePdpContextComp(iError,
+					        iPhoneGlobals.iContextList[i]->iInfo.iName);
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprscontextdelete.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,144 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CATGprsContextDelete
+
+#include "atgprscontextdelete.h" // header file for this source file
+#include "mslogger.h"		 // for LOGTEXT macros
+
+_LIT8(KATContextDelete,  "AT+CGDCONT=%d\r");
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::NewL
+// AT state machine which will send AT+CGDCONT=x to delete a context from the phone.
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextDelete* CATGprsContextDelete::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsContextDelete* self = new(ELeave) CATGprsContextDelete(aGloblePhone,
+			                                                      aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::CATGprsContextDelete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextDelete::CATGprsContextDelete(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::~CATGprsContextDelete()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsContextDelete::~CATGprsContextDelete()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::ExecuteCommand()
+	{
+	LOGTEXT2(_L8("iCid=%d"),iContextId);
+	// Send the AT+CGDCONT=x command to the phone
+	iTxBuffer.Format(KATContextDelete,iContextId);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsContextDelete::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsContextDelete::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if((KErrNone ==aStatus)&&(aEventSource == EWriteCompletion))
+		{
+		return;
+		}
+	TName Name;
+	if((KErrNone ==aStatus)&&(aEventSource == EReadCompletion)&&(iError==KErrNone))
+		{
+		TInt count = iPhoneGlobals.iContextList.Count();
+		TInt i;
+		//Get the context from context list
+		for(i = 0; i < count;i++)
+			{
+			if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+				{
+				Name = iPhoneGlobals.iContextList[i]->iInfo.iName;
+				delete iPhoneGlobals.iContextList[i];
+				iPhoneGlobals.iContextList[i] = NULL;
+				iPhoneGlobals.iContextList.Remove(i);
+				break;
+				}
+			}
+		count = iPhoneGlobals.iContextList.Count();
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesDeletePdpContextComp(aStatus,Name);
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsdetach.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,134 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The execution command is used to attach the MT to, or detach the MT from, the GPRS
+// service. After the command has completed, the MT remains in V.25ter command state.
+// If the MT is already in the requested state, the command is ignored and the OK
+// response is returned. If the requested state cannot be achieved, an ERROR or +CME
+// ERROR response is returned. Extended error responses are enabled by the +CMEE
+// command.
+// Any active PDP contexts will be automatically deactivated when the attachment state
+// changes to detached.
+// The read command returns the current GPRS service state.
+// The test command is used for requesting information on the supported GPRS service
+// states.
+// +CGATT= [<state>]
+// <state>: indicates the state of GPRS attachment
+// 0 ?detached
+// 1 ?attached
+// Other values are reserved and will result in an ERROR response to the
+// execution command.
+
+#include "mslogger.h"
+#include "atgprsdetach.h"
+
+_LIT8(KDetachCommand, "AT+CGATT=0\r");
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsDetach* CATGprsDetach::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsDetach* self = new(ELeave) CATGprsDetach(aGloblePhone,
+			                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::CATGprsDetach
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsDetach::CATGprsDetach(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsDetach::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::~CATGprsDetach()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsDetach::~CATGprsDetach()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsDetach::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsDetach::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KDetachCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsDetach::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsDetach::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsDetach::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesPacketDetachComp(aStatus);
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsgetcontextaddr.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,163 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The execution command returns a list of PDP addresses for the specified context
+// identifiers.
+// The test command returns a list of defined <cid>s
+// Defined values
+// <cid>: a numeric parameter which specifies a particular PDP context definition. 
+// If no <cid> is specified, the addresses for all defined contexts are returned.
+// <PDP_address>: a string that identifies the MT in the address space applicable 
+// to the PDP. The address may be static or dynamic. For a static address, it will 
+// be the one set by the +CGDCONT command when the context was defined. For a 
+// dynamic address it will be the one assigned during the last PDP context 
+// activation that used the context definition referred to by <cid>. 
+// <PDP_address> is omitted if none is available.
+
+#include "mslogger.h"
+#include "atgprsgetcontextaddr.h"
+
+_LIT8(KATGetContextAddress,    "AT+CGPADDR=%d\r");
+_LIT8(KATGetContextAddressStr, "+CGPADDR:");
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGPRSGetContextAddr* CATGPRSGetContextAddr::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGPRSGetContextAddr* self = new(ELeave) CATGPRSGetContextAddr(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::CATGPRSGetContextAddr
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGPRSGetContextAddr::CATGPRSGetContextAddr(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSGetContextAddr::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	iAtType = ELtsyAT_Packet_GetContextAddr;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::~CATGPRSGetContextAddr()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGPRSGetContextAddr::~CATGPRSGetContextAddr()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSGetContextAddr::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSGetContextAddr::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CATGPRSGetContextAddr::Start called"));
+	LOGTEXT2(_L8("iCid=%d"),iContextId);
+	iTxBuffer.Format(KATGetContextAddress,iContextId);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::SetContext
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSGetContextAddr::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::GetErrorValue
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CATGPRSGetContextAddr::GetErrorValue()
+	{
+	return iError;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGPRSGetContextAddr::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGPRSGetContextAddr::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	if( array[0].MatchF(KATGetContextAddressStr)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i = 0;
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	if(Count > 2 )
+		{
+		iPhoneGlobals.iContextList[i]->iDefContextConfigGPRS.iPdpAddress.Copy(array[2]);
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	CleanupStack::PopAndDestroy(&array);
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsntwkregstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,198 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// The set command controls the presentation of an unsolicited result code +CGREG:
+// <stat> when <n>=1 and there is a change in the MT's GPRS network registration
+// status, or code +CGREG: <stat>[,<lac>,<ci>] when <n>=2 and there is a change of the
+// network cell.
+// The read command returns the status of result code presentation and an integer <stat>
+// which shows whether the network has currently indicated the registration of the MT.
+// Location information elements <lac> and <ci> are returned only when <n>=2 and MT
+// is registered in the network.
+// Defined values
+// <n>:
+//  0 disable network registration unsolicited result code
+//  1 enable network registration unsolicited result code +CGREG: <stat>
+//  2 enable network registration and location information unsolicited result code
+// +CGREG: <stat>[,<lac>,<ci>]
+// <stat>:
+//  0 not registered, ME is not currently searching a new operator to register to
+//  1 registered, home network
+//  2 not registered, but ME is currently searching a new operator to register to
+//  3 registration denied
+//  4 unknown
+//  5 registered, roaming
+// <lac>:
+//  string type; two byte location area code in hexadecimal format.
+// <ci>:
+//  string type; two byte cell ID in hexadecimal format
+
+#include "atgprsntwkregstatus.h"		// Header file for this source file
+#include "mslogger.h"				// For LOGTEXT macros
+#include "atgprsntwkregstatuschange.h"	
+
+_LIT8(KATGprsNtwkRegStatusCommand, "AT+CGREG?\r");
+_LIT8(KATGetGprsNetworkRegResponse,"+CGREG:");
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatus* CATGprsNtwkRegStatus::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+                                                 CATGprsNtwkRegStatusChange& aNtwkRegStatusChange)
+	{
+	CATGprsNtwkRegStatus* self = new(ELeave) CATGprsNtwkRegStatus(aGloblePhone,
+			                                                      aCtsyDispatcherCallback,
+			                                                      aNtwkRegStatusChange);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::CATGprsNtwkRegStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatus::CATGprsNtwkRegStatus(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+                                           CATGprsNtwkRegStatusChange& aNtwkRegStatusChange)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback),
+		iNtwkRegStatusChange(aNtwkRegStatusChange)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatus::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::~CATGprsNtwkRegStatus
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatus::~CATGprsNtwkRegStatus()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatus::StartRequest()
+	{
+	iNtwkRegStatusChange.Disable();
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatus::ExecuteCommand()
+	{
+	iTxBuffer.Copy(KATGprsNtwkRegStatusCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::ParseResponseL
+// other items were commented in a header
+//
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatus::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) != 0)
+		{
+		iError = KErrGeneral;
+		return;
+		}
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,PrecedingLine());
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	if( array[0].MatchF(KATGetGprsNetworkRegResponse)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrGeneral;
+		return ;
+		}
+	
+	// Skip over one parameter
+	TInt val = 0;
+	TLex8 lex(array[2]);
+	lex.Val(val);
+	// Convert scond value to equivalent EtelMM enum
+	switch(val)
+		{
+	case 0:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus = RPacketService::ENotRegisteredNotSearching;
+		break;
+	case 1:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus=RPacketService::ERegisteredOnHomeNetwork;
+		break;
+	case 2:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus=RPacketService::ENotRegisteredSearching;
+		break;
+	case 3:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus=RPacketService::ERegistrationDenied;
+		break;
+	case 4:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus=RPacketService::EUnknown;
+		break;
+	case 5:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		iGprsRegistrationStatus=RPacketService::ERegisteredRoaming;
+		break;
+	default:
+		iGprsRegistrationStatus = RPacketService::EUnknown;
+		break;
+		}
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	} //ParseResponseL
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatus::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatus::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesGetPacketNetworkRegistrationStatusComp(aStatus,
+					        iGprsRegistrationStatus);
+	iNtwkRegStatusChange.Enable();
+	CAtCommandBase::Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprsntwkregstatuschange.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,175 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// +CGREG: <stat>[,<lac>,<ci>]
+// <stat>:
+//  0 not registered, ME is not currently searching a new operator to register to
+//  1 registered, home network
+//  2 not registered, but ME is currently searching a new operator to register to
+//  3 registration denied
+//  4 unknown
+//  5 registered, roaming
+// <lac>:
+//  string type; two byte location area code in hexadecimal format.
+// <ci>:
+//  string type; two byte cell ID in hexadecimal format
+
+#include <et_phone.h>		// For CTelObject
+#include "atgprsntwkregstatuschange.h"		// Header file for this source file
+#include "mslogger.h"					// For LOGTEXT macros
+
+_LIT8(KATGetGprsNtwkRegResponse,"+CGREG:*");
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatusChange* CATGprsNtwkRegStatusChange::NewL(CGlobalPhonemanager& aGloblePhone,
+		                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsNtwkRegStatusChange* self = CATGprsNtwkRegStatusChange::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatusChange* CATGprsNtwkRegStatusChange::NewLC(CGlobalPhonemanager& aGloblePhone,
+		                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsNtwkRegStatusChange* self = new (ELeave) CATGprsNtwkRegStatusChange(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::~CATGprsNtwkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatusChange::~CATGprsNtwkRegStatusChange()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatusChange::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	RemoveAllExpectString();
+	AddExpectStringL(KATGetGprsNtwkRegResponse);
+	Enable();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::CATGprsNtwkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsNtwkRegStatusChange::CATGprsNtwkRegStatusChange(CGlobalPhonemanager& aGloblePhone,
+		                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+							   :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::CATGprsNtwkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatusChange::Enable()
+	{
+	AddUnsolicitedAtCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::CATGprsNtwkRegStatusChange
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatusChange::Disable()
+	{
+	RemoveAtCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatusChange::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,CurrentLine());
+	ClearCurrentLine();
+	TInt Count = array.Count();
+	if (Count < 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	if( array[0].MatchF(KATGetGprsNtwkRegResponse)==KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return ;
+		}
+	// Skip over one parameter
+	
+	TInt val = 0;
+	TLex8 lex(array[1]);
+	lex.Val(val);
+	// Convert scond value to equivalent EtelMM enum
+	switch(val)
+		{
+		case 0:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus = RPacketService::ENotRegisteredNotSearching;
+			break;
+		case 1:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus=RPacketService::ERegisteredOnHomeNetwork;
+			break;
+		case 2:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus=RPacketService::ENotRegisteredSearching;
+			break;
+		case 3:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus=RPacketService::ERegistrationDenied;
+			break;
+		case 4:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus=RPacketService::EUnknown;
+			break;
+		case 5:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+			iRegistrationStatus=RPacketService::ERegisteredRoaming;
+			break;
+		default:
+			iRegistrationStatus = RPacketService::EUnknown;
+			break;
+		}
+	CleanupStack::PopAndDestroy(&array);
+	iError = KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsNtwkRegStatusChange::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsNtwkRegStatusChange::EventSignal(TAtEventSource /*aEventSource*/, TInt /*aStatus*/)
+	{
+	iCtsyDispatcherCallback.CallbackPacketServicesNotifyPacketNetworkRegistrationStatusInd(iError,
+				            iRegistrationStatus);
+	}
+
+//End file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/atgprssetqosprofile.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,390 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This file implements the CATGprsSetProfile class and the CATGprsGetProfile.
+// This command allows the TE to specify a Quality of Service Profile that is 
+// used when the MT sends an Activate PDP Context Request message to the network.
+// The set command specifies a profile for the context identified by the local context
+// identification parameter, <cid>. Since this is the same parameter that is used in the
+// +CGDCONT command, the +CGQREQ command is effectively an extension to the
+// +CGDCONT command. The QoS profile consists of a number of parameters, each of
+// which may be set to a separate value.
+// A special form of the set command, +CGQREQ= <cid> causes the requested profile for
+// context number <cid> to become undefined.
+// The read command returns the current settings for each defined context.
+// The test command returns values supported as a compound value. If the MT supports
+// several PDP types, the parameter value ranges for each PDP type are returned on a
+// separate line.
+// Defined values
+// <cid>: a numeric parameter which specifies a particular PDP context definition.
+// <precedence>: a numeric parameter which specifies the precedence class
+// <delay>: a numeric parameter which specifies the delay class
+// <reliability>: a numeric parameter which specifies the reliability class
+// <peak>: a numeric parameter which specifies the peak throughput class
+// <mean>: a numeric parameter which specifies the mean throughput class
+// If a value is omitted for a particular class then the value is considered to be 
+// unspecified.
+// AT+CGQREQ=[<cid> [,<precedence >[,<delay> [,<reliability.> [,<peak>[,<mean>]]]]]]
+// other items were commented in a header
+
+#include <pcktcs.h>
+#include "atgprsqosprofile.h"
+#include <etelpckt.h>
+#include "mslogger.h"
+
+_LIT8(KCGQreq, "AT+CGQREQ=%d,%d,%d,%d,%d,%d\r");
+
+// CATGprsSetProfileReq::NewL()
+CATGprsSetProfileReq* CATGprsSetProfileReq::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CATGprsSetProfileReq* self = new(ELeave) CATGprsSetProfileReq(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop(self );
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::CATGprsSetProfileReq()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsSetProfileReq::CATGprsSetProfileReq(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::~CATGprsSetProfileReq()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATGprsSetProfileReq::~CATGprsSetProfileReq()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::ExecuteCommand()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::ExecuteCommand()
+	{
+	MakeupCGQREQ();
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::SetContext()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i;
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	iQoSConfig = iPhoneGlobals.iContextList[i]->iQoSConfig;
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::ParseResponseL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATGprsSetProfileReq::EventSignal()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATGprsSetProfileReq::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	if(KErrNone ==aStatus)
+		{
+		if(aEventSource == EReadCompletion)
+			{
+			aStatus = iError;
+			}
+		else
+			return;
+		}
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i;
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+
+	CAtCommandBase::Complete();
+	if(KErrNone ==aStatus)
+		{
+		RPacketQoS::TQoSGPRSNegotiated QoSGPRSNegotiated;
+		QoSGPRSNegotiated.iDelay = iPhoneGlobals.iContextList[i]->iQoSConfig.iReqDelay;
+		QoSGPRSNegotiated.iMeanThroughput = iPhoneGlobals.iContextList[i]->iQoSConfig.iReqMeanThroughput;
+		QoSGPRSNegotiated.iPeakThroughput = iPhoneGlobals.iContextList[i]->iQoSConfig.iReqPeakThroughput;
+		QoSGPRSNegotiated.iPrecedence = iPhoneGlobals.iContextList[i]->iQoSConfig.iReqPrecedence;
+		QoSGPRSNegotiated.iReliability = iPhoneGlobals.iContextList[i]->iQoSConfig.iReqReliability;
+		iCtsyDispatcherCallback.CallbackPacketServicesNotifyQosProfileChangedGPRSInd(aStatus,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+				                QoSGPRSNegotiated);
+		}
+	iCtsyDispatcherCallback.CallbackPacketServicesSetPdpContextQosComp(aStatus,
+						    iPhoneGlobals.iContextList[i]->iInfo.iName);
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	}
+
+/**
+ * This Function creates the at set string for the AT+CGQREQ command.
+ */
+void CATGprsSetProfileReq::MakeupCGQREQ()
+	{
+	TInt precedence, delay, reliability, peakthru, meanthru = 0;
+
+	switch (iQoSConfig.iReqPrecedence)
+		{
+		case RPacketQoS::EPriorityHighPrecedence:
+			precedence = 1; // high precedence
+		break;
+
+		case RPacketQoS::EPriorityMediumPrecedence:
+			precedence = 2; // normal precedence
+		break;
+		
+		case RPacketQoS::EPriorityLowPrecedence:
+			precedence = 3; // low precedence
+		break;
+		
+		default:
+			precedence = 0; // unspecified or unknown precedence
+		break;
+		};
+
+	switch (iQoSConfig.iReqDelay)
+		{
+		case RPacketQoS::EDelayClass1:
+			delay = 1;
+		break;
+
+		case RPacketQoS::EDelayClass2:
+			delay = 2;
+		break;
+
+		case RPacketQoS::EDelayClass3:
+			delay = 3;
+		break;
+
+		case RPacketQoS::EDelayClass4:
+			delay = 4;
+		break;
+
+		default:
+			delay = 0;
+		break;
+		};
+
+	switch (iQoSConfig.iReqReliability)
+		{
+		case RPacketQoS::EReliabilityClass1:
+			reliability = 1;
+		break;
+
+		case RPacketQoS::EReliabilityClass2:
+			reliability = 2;
+		break;
+
+		case RPacketQoS::EReliabilityClass3:
+			reliability = 3;
+		break;
+
+		case RPacketQoS::EReliabilityClass4:
+			reliability = 4;
+		break;
+
+		case RPacketQoS::EReliabilityClass5:
+			reliability = 5;
+		break;
+
+		default:
+			reliability = 0; // unspecified or unknown reliability
+		break;
+		};
+
+	switch (iQoSConfig.iReqPeakThroughput)
+		{
+		case RPacketQoS::EPeakThroughput1000:
+			peakthru = 1;
+		break;
+
+		case RPacketQoS::EPeakThroughput2000:
+			peakthru = 2;
+		break;
+
+		case RPacketQoS::EPeakThroughput4000:
+			peakthru = 3;
+		break;
+
+		case RPacketQoS::EPeakThroughput8000:
+			peakthru = 4;
+		break;
+
+		case RPacketQoS::EPeakThroughput16000:
+			peakthru = 5;
+		break;
+
+		case RPacketQoS::EPeakThroughput32000:
+			peakthru = 6;
+		break;
+
+		case RPacketQoS::EPeakThroughput64000:
+			peakthru = 7;
+		break;
+
+		case RPacketQoS::EPeakThroughput128000:
+			peakthru = 8;
+		break;
+
+		case RPacketQoS::EPeakThroughput256000:
+			peakthru = 9;
+		break;
+		
+		default:
+			peakthru = 0; // unspecified or unknown peak throughput
+		break;
+		};
+
+	switch (iQoSConfig.iReqMeanThroughput)
+		{
+		case RPacketQoS::EMeanThroughput100:
+			meanthru = 2;
+		break;
+
+		case RPacketQoS::EMeanThroughput200:
+			meanthru = 3;
+		break;
+
+		case RPacketQoS::EMeanThroughput500:
+			meanthru = 4;
+		break;
+
+		case RPacketQoS::EMeanThroughput1000:
+			meanthru = 5;
+		break;
+
+		case RPacketQoS::EMeanThroughput2000:
+			meanthru = 6;
+		break;
+
+		case RPacketQoS::EMeanThroughput5000:
+			meanthru = 7;
+		break;
+
+		case RPacketQoS::EMeanThroughput10000:
+			meanthru = 8;
+		break;
+
+		case RPacketQoS::EMeanThroughput20000:
+			meanthru = 9;
+		break;
+		
+		case RPacketQoS::EMeanThroughput50000:
+			meanthru = 10;
+		break;
+
+		case RPacketQoS::EMeanThroughput100000:
+			meanthru = 11;
+		break;
+
+		case RPacketQoS::EMeanThroughput200000:
+			meanthru = 12;
+		break;
+		case RPacketQoS::EMeanThroughput500000:
+			meanthru = 13;
+		break;
+
+		case RPacketQoS::EMeanThroughput1000000:
+			meanthru = 14;
+		break;
+
+		case RPacketQoS::EMeanThroughput2000000:
+			meanthru = 15;
+		break;
+
+		case RPacketQoS::EMeanThroughput5000000:
+			meanthru = 16;
+		break;
+
+		case RPacketQoS::EMeanThroughput10000000:
+			meanthru = 17;
+		break;
+
+		case RPacketQoS::EMeanThroughput20000000:
+			meanthru = 18;
+		break;
+
+		case RPacketQoS::EUnspecifiedMeanThroughput:
+		case RPacketQoS::EMeanThroughput50000000:
+			meanthru = 31;
+		break;
+
+		default:
+			meanthru = 0; // unspecified or unknown mean throughput
+		break;
+		};
+
+	iTxBuffer.Format(KCGQreq,iContextId,			
+			precedence,
+			delay,
+			reliability,
+			peakthru,
+			meanthru);
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/pktservice/src/initialisepdpcontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,162 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// CInitialisePdpContext:
+// 
+
+#include "initialisepdpcontext.h"
+#include "mslogger.h"
+#include "tsyconfg.h"
+#include "globalphonemanager.h"
+
+const TInt KLtsyOnePause = 100000;
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::NewL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitialisePdpContext* CInitialisePdpContext::NewL(CGlobalPhonemanager& aGloblePhone, 
+	                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CInitialisePdpContext* self = new(ELeave) CInitialisePdpContext(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::PushL(self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self ;
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::CInitialisePdpContext()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitialisePdpContext::CInitialisePdpContext(CGlobalPhonemanager& aGloblePhone, 
+	                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+		:iPhoneGlobals(aGloblePhone),
+		 iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::ConstructL()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitialisePdpContext::ConstructL()
+	{
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::~CInitialisePdpContext()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CInitialisePdpContext::~CInitialisePdpContext()
+	{
+	if(iCallbackTimer)
+		{
+		iCallbackTimer->Cancel();
+		delete iCallbackTimer;
+		iCallbackTimer = NULL;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::StartRequest()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitialisePdpContext::StartRequest()
+	{
+	iCallbackTimer->After(KLtsyOnePause);
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::SetContext()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitialisePdpContext::SetContext(const TInt aContextId)
+	{
+	iContextId = aContextId;
+	}
+
+// ---------------------------------------------------------------------------
+// CInitialisePdpContext::LoanCommPort()
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CInitialisePdpContext::LoanCommPort()
+	{
+	TInt count = iPhoneGlobals.iContextList.Count();
+	TInt i = 0;
+	
+	//Get the context from context list
+	for(i = 0; i < count;i++)
+		{
+		if(iPhoneGlobals.iContextList[i]->iContextID == iContextId)
+			{
+			break;
+			}
+		}
+	
+	TFileName csy;
+	TName port;
+	if(iPhoneGlobals.iPhoneStatus.iDataPortLoaned)
+		{
+		iCtsyDispatcherCallback.CallbackPacketServicesInitialisePdpContextComp(KErrEtelPortAlreadyLoaned,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+								port);
+		return ;
+		}
+	TInt ret = 0;
+	TRAP(ret,iPhoneGlobals.iConfiguration->ConfigModemStringL(TPtrC(KCDTypeNameCsyName),csy));
+	if (ret!=KErrNone)
+		{
+		iCtsyDispatcherCallback.CallbackPacketServicesInitialisePdpContextComp(ret,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+				                port);
+		return ;
+		}
+	TBuf8<KMaxName> tmp;
+	tmp.Copy(csy);
+    LOGTEXTREL2(_L8("csy:\t%S"),&tmp);
+	
+	TRAP(ret,iPhoneGlobals.iConfiguration->ConfigModemStringL(TPtrC(KCDTypeNamePortName),port));
+	if (ret!=KErrNone)
+		{
+		iCtsyDispatcherCallback.CallbackPacketServicesInitialisePdpContextComp(ret,
+				                iPhoneGlobals.iContextList[i]->iInfo.iName,
+				                port);
+		return;
+		}
+    tmp.Copy(port);
+    LOGTEXTREL2(_L8("port:\t%S"),&tmp);
+
+	iCtsyDispatcherCallback.CallbackPacketServicesInitialisePdpContextComp(KErrNone,
+			                iPhoneGlobals.iContextList[i]->iInfo.iName,
+			                port);
+
+	TContextMisc contextMisc;
+	contextMisc.iStatus = RPacketContext::EStatusInactive;
+	iPhoneGlobals.iContextList[i]->iInfo.iStatus = RPacketContext::EStatusInactive;
+	iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextStatusChangeInd(ret,
+			                iPhoneGlobals.iContextList[i]->iInfo.iName,
+							contextMisc);
+	iCtsyDispatcherCallback.CallbackPacketServicesNotifyPdpContextAddedInd(ret, 
+			                iPhoneGlobals.iContextList[i]->iInfo.iName);
+	}
+
+void CInitialisePdpContext::TimerRun(TInt aError)
+    {
+	if(aError == KErrNone)
+	    {
+	    LoanCommPort();
+		}
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atmessagestoreinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,119 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atmessagestoreinfo.h
+// This contains CAtMessageStoreInfo which is used to get message store information
+// 
+
+#ifndef ATMESSAGESTOREINFO_H
+#define ATMESSAGESTOREINFO_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtGetMessageStoreInfo
+ *
+ */
+
+class CAtMessageStoreInfo : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtMessageStoreInfo();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtMessageStoreInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtMessageStoreInfo* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+		
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtMessageStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	* indicate how many items message stored
+	*/
+	TInt iUsed;
+	
+	/**
+	* total items for storeing message
+	*/
+	TInt iTotal;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+    TInt iError;	
+    
+	}; // class CAtMessageStoreInfo
+
+#endif // ATMESSAGESTOREINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsack.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,187 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsack.h
+// This contains CAtSmsAck and CAtSmsNack which is used to send 
+// positive(negative) acknowledgment
+// 
+
+#ifndef ATSMSACK_H
+#define ATSMSACK_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+class CAtSmsAck : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsAck();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsAck* NewL(CGlobalPhonemanager& aGloblePhone, 
+                           CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsAck* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsAck(CGlobalPhonemanager& aGloblePhone, 
+              CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;	
+	}; // class CAtSmsAck
+
+class CAtSmsNack : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsNack();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsNack* NewL(CGlobalPhonemanager& aGloblePhone, 
+                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsNack* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	/**
+	* Set Nack TPDU data
+	* 
+	*/
+	void SetNackTpdu(TPtrC8 aRpError);
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsNack(CGlobalPhonemanager& aGloblePhone, 
+               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+    /**
+	 *  Nack required TPDU data
+	 */
+	TBuf8<256> iRpError;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;	
+	}; // class CAtSmsNack
+#endif // ATSMSACK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsreceive.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,152 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsreceive.h
+// This contains CAtSmsReceive which received incoming messages
+// 
+
+#ifndef ATSMSRECEIVE_H
+#define ATSMSRECEIVE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+#include <cmmsmsutility.h>
+
+//user include 
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+
+/**
+ * CAtSmsReceiveMessage
+ *
+ */
+class CAtSmsReceive: public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/	
+	~CAtSmsReceive();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsReceive* NewL(CGlobalPhonemanager& aGloblePhone, 
+                               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CAtSmsReceive* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+protected:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CAtSmsReceive(CGlobalPhonemanager& aGloblePhone, 
+                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/	
+	void ConstructL();
+private:
+	/**
+	* Parse 1st line of CMT response, of the format: "+CMT: [<alpha>], <pdu_len>"
+	* Stores the <pdu_len> in aPduLen
+	*/
+	void CMTResponseFirstLineL();
+	
+	/**
+	* Parse second line of CMT or DS response, of the format: "<pdu>"
+	* The <pdu> is saved to aPdu. If the <pdu> is found to have a prefixed SCA
+	* then that is removed before the save to aPdu.
+	*/
+	void CMTResponseSecondLineL();
+private:
+	/**
+	*   when receiving a message,its states should be changed
+	*/
+	enum 
+		{
+		EReceiveReady,
+		EWaitForCmtSecondLine,
+		EATNotInProgress
+		}iState;
+	
+	/**
+	*  Stores the length of PDU received
+	*/	
+	TInt iPduLen;		
+	
+	/**
+	*  binary format of PDU
+	*/	
+	RMobileSmsMessaging::TMobileSmsGsmTpdu  iPdu;
+	
+	/**
+	*  iAttr saved attritube of message revceived 
+	*/	
+	RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 iAttr;
+	
+    /**
+	*  The structure used for callback
+	*/
+	TSmsMsg iMsgReceive;
+    
+	/**
+	* The return error value of AT command executed 
+	*/	
+	TInt iError; 
+	
+	}; // class CAtSmsReceive: 
+#endif // ATSMSRECEIVE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmssend.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,201 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmssend.h
+// This contains CAtSmsSend which is used to send sms message
+// 
+
+#ifndef ATSMSSEND_H
+#define ATSMSSEND_H
+
+ //system include
+#include <e32std.h>
+#include <e32base.h>
+#include <callbacktimer.h>
+
+// user include
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+/**
+ *  TSmsSendParam
+ */
+class TSmsSendParam
+   	{
+public:
+	RMobilePhone::TMobileAddress iDestination;
+   	TBuf8<KGsmTpduSize> iSmsTpdu;
+    RMobileSmsMessaging::TMobileSmsDataFormat iDataFormat;
+    RMobilePhone::TMobileAddress  iGsmServiceCentre;
+    TBool iMoreMessages;
+   	};
+/**
+ *  TSmsSendResponse 
+ */
+class TSmsSendResponse
+	{
+public:
+    TInt iValRef;
+    TBuf8<KGsmTpduSize>	 iSubmitReport;
+	};
+/**
+ * CAtSmsSend
+ *
+ */
+class CAtSmsSend : public CAtCommandBase,
+                   public MTimerObserver
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsSend();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsSend* NewL(CGlobalPhonemanager& aGloblePhone, 
+                            CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsSend* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	/**
+	* set send message parameter
+	* 
+	* @param  aMsgParam
+	*/
+	void SetMessageParam(TSmsSendParam aMsgParam);
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsSend(CGlobalPhonemanager& aGloblePhone, 
+               CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	* confirm if there is a sca address 
+	*  
+	*  @return  KErrNone......
+	*/
+	TInt ConfirmSca();
+		
+    /**
+     * start a timer
+     */
+    void BeginTimer();	
+    
+	/**
+	* From MTimerObserver 
+	*/
+	virtual void TimerRun(TInt aError);
+	
+	/**
+	* Issue writing AT Command to baseband
+	* not using base class because the buffer length is KMaxAsciiPduLength
+	*/
+	void StartWritingPduLength();
+	
+	/**
+	* Issue writing AT Command to baseband
+	* not using base class because the buffer length is KMaxAsciiPduLength
+	*/
+	void StartWritingPdu();
+private:
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetPDULengthComplete,
+		ESendPDUComplete,
+		}iState;
+		
+	/**
+	*  A pointer for Timer
+	*/
+	CCallbackTimer* iCallbackTimer;	
+	
+	/**
+	* The buffer contains the "AT" String which should be sent to BaseBand Modem
+	*/
+	TBuf8<KMaxAsciiPduLength> iTxBuffer;	
+	
+	/**
+	* The structure contains sending message parameter
+	*/
+	TSmsSendParam iSmsSendParam;
+	
+	/**
+	* PDU in ascii format
+	*/
+	TBuf8<KMaxAsciiPduLength> iMsgDataAscii; 
+	
+	/**
+	* The response structure which read from modem
+	*/
+	TSmsSendResponse iSmsSendResponse;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;	
+	
+	/**
+	* The error value before Execute write()
+	*/
+	TInt iCallbackVal;
+	}; // class CAtSmsSend
+#endif // ATSMSSEND_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoredelete.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,199 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoredelete.h
+// This contains CAtSmsStoreDelete and CAtSmsStoreDeleteAll which is used to delete message(s)
+// 
+
+#ifndef ATSMSSTOREDELETE_H
+#define ATSMSSTOREDELETE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+/**
+ * CAtSmsStoreDelete
+ *
+ */
+class CAtSmsStoreDelete : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsStoreDelete();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreDelete* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreDelete* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* Set the message index to be deleted
+	* 
+	*/
+	void SetDelIndex(TInt aIndex);
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsStoreDelete(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	*  message's index 
+	* 
+	*/	
+	TInt iIndex;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;
+	
+	}; // class CAtSmsStoreDelete
+
+
+/**
+ * CAtSmsStoreDeleteAll
+ *
+ */
+class CAtSmsStoreDeleteAll : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsStoreDeleteAll();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreDeleteAll* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreDeleteAll* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsStoreDeleteAll(CGlobalPhonemanager& aGloblePhone, 
+                         CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+private:
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;	
+	
+	}; // class CAtSmsStoreDeleteAll	
+#endif // ATSMSDELETE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoreinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoreinfo.h
+// This contains CAtSmsStoreInfo which is used to get sms store information
+// 
+
+#ifndef ATSMSSTOREINFO_H
+#define ATSMSSTOREINFO_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+/**
+ * CAtSmsStoreInfo
+ *
+ */
+class CAtSmsStoreInfo : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsStoreInfo();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreInfo* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreInfo* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	* indicate how many items message stored
+	*/
+	TInt iUsed;
+	
+	/**
+	* total items for storeing message
+	*/
+	TInt iTotal;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+    TInt iError;	
+	
+	}; // class CAtSmsStoreInfo
+
+#endif // ATSMSSTOREINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstoreread.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,131 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoreread.h
+// This contains CAtSmsStoreRead which is used to Read PDU Message
+// via aIndex 
+// 
+
+#ifndef ATSMSSTOREREAD_H
+#define ATSMSSTOREREAD_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include 
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+/**
+ * CAtSmsStoreRead
+ *
+ */
+class CAtSmsStoreRead : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsStoreRead();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreRead* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreRead* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	* set message index should be read
+	* 
+	* @param aIndex
+	*/
+	void SetMsgIndex(TInt aIndex);
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsStoreRead(CGlobalPhonemanager& aGloblePhone, 
+                    CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+	/**
+	*  Executer AT command for reading message via aIndex
+	*/
+	void ReadMessage();
+private:
+	/**
+	* readmessage callback struct
+	*/
+	DispatcherPhonebook::TSmsData iSmsData;  
+	
+	/**
+	*  The message index want to be read
+	*/
+	TInt iIndex;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError; 
+	
+	}; // class CAtSmsStoreRead
+
+#endif // ATSMSSTOREREAD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstorereadall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,125 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstorereadall.h
+// This contains CAtSmsStoreReadAll which is used to read all messages
+// 
+
+#ifndef ATSMSSTOREREADALL_H
+#define ATSMSSTOREREADALL_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+#include <ctsy/ltsy/mltsydispatchphonebookinterface.h>
+
+//user include
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+/**
+ * CAtSmsStoreReadAll
+ *
+ */
+
+class CAtSmsStoreReadAll : public CAtCommandBase
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/	
+	~CAtSmsStoreReadAll();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreReadAll* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreReadAll* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                      CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	CAtSmsStoreReadAll(CGlobalPhonemanager& aGloblePhone, 
+                        CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	*  Executer AT command for reading message via aIndex
+	*/
+	void ReadMessage();
+private:
+	/*
+	*  The index message should be read
+	*/	
+    TInt iIndex;
+    
+    /**
+	* readmessage callback struct
+	*/
+	DispatcherPhonebook::TSmsData iSmsData;
+	
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError; 
+	
+	}; // class CAtSmsStoreReadAll
+
+#endif // ATSMSSTOREREADALL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/atsmsstorewrite.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,184 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstorewrite.h
+// This contains CAtSmsStoreWrite which is used to write sms message
+// 
+
+#ifndef ATSMSSTOREWRITE_H
+#define ATSMSSTOREWRITE_H
+
+// system include 
+#include <e32std.h>
+#include <e32base.h>
+#include <ctsy/ltsy/mltsydispatchphonebookinterface.h>
+#include <callbacktimer.h>
+
+// user include
+#include "atcommandbase.h"
+
+// CLASS DECLARATION
+
+/**
+ * CAtSmsStoreWrite
+ *
+ */
+
+class CAtSmsStoreWrite : public CAtCommandBase,
+                         public MTimerObserver
+	{
+public:
+	/**
+	* Destructor
+	*
+	*/
+	~CAtSmsStoreWrite();
+	
+	/**
+	*  static NewL  
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/	
+	static CAtSmsStoreWrite* NewL(CGlobalPhonemanager& aGloblePhone, 
+                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	*  static NewLC 
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	static CAtSmsStoreWrite* NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	*  Start Execute AT Command
+	*/
+	virtual void ExecuteCommand();
+	
+	
+	/**
+	* Will be called by AT Manager whenever a event was triggered
+	* 
+	* @param aEventSource
+	* @param aStatus
+	*/
+	virtual void EventSignal(TAtEventSource aEventSource, TInt aStatus);
+	
+	/**
+	* Virtual function. Inherited from CAtCommandBase
+	* 
+	* @param aResponseBuf Line buf reading from baseband 
+	*/
+	virtual void ParseResponseL(const TDesC8& aResponseBuf);
+	
+	/**
+	* Start this request
+	* 
+	*/
+	void StartRequest();
+	
+	/**
+	*  set GsmSmsEntry which is passed by handler
+	*/
+	void SeGsmSmsEntry(RMobileSmsStore::TMobileGsmSmsEntryV1 aMobileGsmEntry);
+private:
+	/**
+	* Constructor
+	*
+	* @param aGloblePhone
+	* @param aCtsyDispatcherCallback
+	*/
+	CAtSmsStoreWrite(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	
+	/**
+	* 2nd Constructor
+	*/
+	void ConstructL();
+	
+    /**
+	* start a timer
+	*/
+    void BeginTimer();	
+    
+	/**
+	* From MTimerObserver 
+	*/
+	virtual void TimerRun(TInt aError);
+	
+	/**
+	* Issue writing AT Command to baseband
+	* not using base class because the buffer length is KMaxAsciiPduLength
+	*/
+	void StartWritingPduLength();
+	
+	/**
+	* Issue writing AT Command to baseband
+	* not using base class because the buffer length is KMaxAsciiPduLength
+	*/
+	void StartWritingPdu();
+	
+	/**
+	*  Executer AT command for writing a message
+	*/
+	void WriteMessage();
+private:
+	/**
+	*  state machine for EventSignal 
+	*/
+	enum 
+		{
+		ESetPDULengthComplete,
+		EWritePDUComplete,
+		}iState;
+	
+	/**
+	*  A pointer for Timer
+	*/
+	CCallbackTimer* iCallbackTimer;	
+	
+	/**
+	* The buffer contains the "AT" String which should be sent to BaseBand Modem
+	*/	
+	TBuf8<KMaxAsciiPduLength> iTxBuffer;	
+	
+	/**
+	*  writemessage index should be used by callback
+	*/
+	TInt iLocation;   
+
+	/**
+	* PDU in ascii format
+	*/
+	TBuf8<KMaxAsciiPduLength> iMsgDataAscii;  
+	
+	/**
+	* get the GsmSmsEntry value passed by handler
+    */
+	RMobileSmsStore::TMobileGsmSmsEntryV1 iMobileGsmEntry;
+
+	/**
+	* The return error value of AT command executed 
+	*/
+	TInt iError;
+	
+	/**
+	* The error value before Execute write()
+	*/
+	TInt iCallbackVal;
+	}; // class CAtSmsStoreWrite
+	
+#endif // ATSMSSTOREWRITE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/inc/smsatutil.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,140 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file smsatutil.h
+// This contains SmsAtUtil which is util for Sms At command
+// 
+
+#ifndef SMSATUTIL_H
+#define SMSATUTIL_H
+// system include
+#include <e32std.h>
+#include <e32base.h>
+#include <etelmm.h>
+
+
+/**
+*  SmsAtUtil
+* 
+*/
+class SmsAtUtil : public CBase
+	{
+public:
+	
+	 /**
+	 * Converts aAscii ASCII chars to Semi Octets in aData.
+	 * One ASCII char (8bits in aAscii) is translated to one Semi-Octet (4bits in aData).
+	 * 
+	 * @param aAscii input ascii string
+	 * @param aData  output binary data 
+	 * @return Standard KErr... values 
+	 */	
+	static TInt ConvertAsciiToBinary(const TDesC8& aAscii,TDes8& aData);
+	
+	 /**
+	 * Default operation is to code Address-Length according to=
+	 * 04.11 spec (ie. Address-Length=number of digits in Address-Value).
+	 * Append this sca adress to the ascii string  
+	 *
+	 * @param aAscii an ascii string 
+	 * @param aAddress  a SCA adress 
+	 * @return Standard KErr... values
+	 */
+	static TInt AppendAddressToAscii(TDes8& aAscii,const RMobilePhone::TMobileAddress& aAddress);
+	
+	 /**
+	 * Appends the binary data (aData) onto the end of an ASCII string (aAscii) in ASCII format.
+	 * 
+	 * @param aAscii  an ascii string 
+	 * @param aData   a  binary string 
+	 */
+	static void AppendDataToAscii(TDes8& aAscii,const TDesC8& aData);
+	
+	 /**
+	 * Reads an address from the front of the ASCII string (aAscii) and fills up Address structure (aAddress).
+	 * The address read from the ASCII string is removed from the ASCII string.
+	 * 
+	 * @param aAscii an ascii string 
+	 * @param aAddress  a SCA address
+	 * @return Standard KErr... values
+	 */
+	static TInt ReadAndRemoveAddressFromAscii(TDes8& aAscii,RMobilePhone::TMobileAddress& aAddress);
+	
+	/**
+	 * Default operation assumes has prefixed SCA which uses 04.11 format
+	 * (ie. Address-Length=number of digits in Address-Value).
+	 *
+	 * @param aAscii an ascii string 
+	 * @param aAddress  a SCA address
+	 * @return Standard KErr... values
+	 */
+	static TInt ReadAddressFromAscii(const TDesC8& aAscii,RMobilePhone::TMobileAddress& aAddress);
+	
+	 /**
+	 *  get the SCA field in the aAscii structure from the SCA prepended in the PDU sring .
+	 *  
+	 *  @param aPdu  a PDU string 
+	 *  @param aAddress a SCA address
+	 */
+	static void ReadAndRemoveAddressFromPdu(TPtrC8& aPdu, RMobilePhone::TMobileAddress& aGsmServiceCentre);
+	 /**
+	 * Judge whether a char is an address char
+	 * 
+	 * @param  aChar  
+	 * @return ETrue if, and only if, the given ASCII charcater 
+	 *  is valid as an ASCII address character.
+	 */
+	static TBool IsAddressChar(TChar aChar);
+
+private:
+	
+	 /**
+	 * @param aValue should be an ETSI Numbering-Plan-Identification field
+	 * @return The equivalent RMobilePhone::TMobileNPI value for aValue
+	 */
+	static RMobilePhone::TMobileNPI ConvertNumberingPlan(TInt aValue);
+	
+	 /**
+	 * @param aValue should be an ETSI Type-Of-Number field
+	 * @return The equivalent RMobilePhone::TMobileTON value for aValue
+	 */
+	static RMobilePhone::TMobileTON ConvertTypeOfNumber(TInt aValue); 
+	
+	 /**
+	 * Converts a TInt octet value into ASCII representation and then appends that
+	 * ASCII representation to the end of the given ASCII string.
+	 *
+	 * @param aOctet the octet value to append
+	 * @param aAscii the ASCII string to which aOctet value should be appended
+	 */	
+	static void AppendOctet(TInt aOctet,TDes8& aAscii);
+	
+	 /**
+	 * Returns the equivalent numeric value for a given ASCII address character.
+	 *
+	 * @param aChar the address character to be converted
+	 * @return The numeric value equivalent of the given address character.
+	 */
+	static TInt ConvertAddressChar(TChar aChar);
+	
+	 /**
+	 * Returns the equivalent ASCII address character for a given address value.
+	 *
+	 * @param aBinary the numerix value of the address character to be returned
+	 * @return The ASCII charcater which represents the given address numeric value.
+	 */
+	static TChar ConvertAddressChar(TInt aBinary);
+	
+	};
+
+#endif // SMSATUTIL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atmessagestoreinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,192 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atmessagestoreinfo.cpp
+// This contains CAtMessageStoreInfo which is used to get message store information
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atmessagestoreinfo.h"
+#include "mslogger.h"
+
+//constant defination
+_LIT8(KGetPrefMemCommand,"AT+CPMS?\r");
+_LIT8(KCPMSResponseString,"+CPMS:");
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::CAtMessageStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtMessageStoreInfo::CAtMessageStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                         :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtMessageStoreInfo::CAtMessageStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::~CAtMessageStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtMessageStoreInfo::~CAtMessageStoreInfo()
+	{
+	LOGTEXT(_L8("CAtMessageStoreInfo::~CAtMessageStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtMessageStoreInfo* CAtMessageStoreInfo::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtMessageStoreInfo* self = new (ELeave)CAtMessageStoreInfo(aGloblePhone, 
+			                                                    aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtMessageStoreInfo* CAtMessageStoreInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtMessageStoreInfo* self=CAtMessageStoreInfo::NewLC(aGloblePhone, 
+                                                         aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtMessageStoreInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtMessageStoreInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtMessageStoreInfo::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtMessageStoreInfo::ExecuteCommand called"));
+	
+	iTxBuffer.Zero();
+	iTxBuffer.Copy(KGetPrefMemCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtMessageStoreInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtMessageStoreInfo::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtMessageStoreInfo::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackSmsGetSmsStoreInfoComp(aStatus,iTotal,iUsed);
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtMessageStoreInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtMessageStoreInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	/**
+	* Parse result of AT+CPMS? 
+	* Response:+CPMS:<mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>
+	* Here only the first mem is used. mem1 is SM
+	*/
+	iError = KErrNone;
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,Buffer());
+	if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+		{
+		array.Remove(0);
+		}
+	TInt Count = array.Count();
+	if (Count <= 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if(array[0].MatchF(KCPMSResponseString) == KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	//parse name 
+	TPtrC8 name(array[1]);
+	
+	//parse used
+	TLex8 lex(array[2]);
+	TUint16 val;
+	TInt ret = lex.Val(val,EDecimal);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iUsed = val;
+	
+	//parse total
+	TLex8 lex1(array[3]);
+	ret = lex1.Val(val,EDecimal);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iTotal = val;
+	
+	LOGTEXT2(_L8("CAtMessageStoreInfo::ParseResponseL\tPreferred store name=%S"),&name);
+ 	LOGTEXT3(_L8("CAtMessageStoreInfo::ParseResponseL\tPreferred store used=%d, total=%d"), 
+ 			                                           iUsed,iTotal);
+	CleanupStack::PopAndDestroy(&array);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsack.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,280 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsack.cpp
+// This contains CAtSmsAck and CAtSmsNack which is used to send 
+// positive(negative) acknowledgment
+// 
+
+//system include 
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atsmsack.h"
+#include "mslogger.h"
+#include "smsatutil.h"
+
+//constant defination
+_LIT8(KSendCNMACommand,"AT+CNMA\r\n");
+_LIT8(KCNMAForNack,"AT+CNMA=2,%d\r\n");
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::CAtSmsAck
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsAck::CAtSmsAck(CGlobalPhonemanager& aGloblePhone, 
+                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                     :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsAck::CAtSmsAck called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::~CAtSmsAck
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsAck::~CAtSmsAck()
+	{
+	LOGTEXT(_L8("CAtSmsAck::~CAtSmsAck called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsAck* CAtSmsAck::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsAck* self = new (ELeave)CAtSmsAck(aGloblePhone, 
+                                            aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsAck* CAtSmsAck::NewL(CGlobalPhonemanager& aGloblePhone, 
+                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsAck* self=CAtSmsAck::NewLC(aGloblePhone, 
+                                     aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsAck::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsAck::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsAck::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsAck::ExecuteCommand called"));
+	iTxBuffer.Zero();
+	iTxBuffer.Copy( KSendCNMACommand );
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsAck::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsAck::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsNack::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackSmsAckSmsStoredComp(aStatus);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsAck::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsAck::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::CAtSmsNack
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsNack::CAtSmsNack(CGlobalPhonemanager& aGloblePhone, 
+                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                       :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsNack::CAtSmsNack called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::~CAtSmsNack
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsNack::~CAtSmsNack()
+	{
+	LOGTEXT(_L8("CAtSmsNack::~CAtSmsNack called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsNack* CAtSmsNack::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsNack* self = new (ELeave)CAtSmsNack(aGloblePhone, 
+                                              aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsNack* CAtSmsNack::NewL(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsNack* self=CAtSmsNack::NewLC(aGloblePhone, 
+                                       aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::SetNackTpdu
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::SetNackTpdu(TPtrC8 aRpError)
+	{
+	iRpError = aRpError;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsNack::ExecuteCommand called"));
+	iTxBuffer.Zero();
+	TInt pduLen = iRpError.Length();
+	TBuf8<KLtsyGenericBufferSize> nackAsciiData;
+	nackAsciiData.Zero();
+	SmsAtUtil::AppendDataToAscii(nackAsciiData,iRpError);
+	iTxBuffer.Format(KCNMAForNack,pduLen);
+	iTxBuffer.Append(nackAsciiData);
+	iTxBuffer.Append(KLtsyCtrlZChar);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+/**
+ * Handle the events from the comm port
+ *ValidateExpectString
+ * @param aSource denotes if event is due to read, write or timeout
+ */
+	{
+	LOGTEXT3(_L8("CAtSmsNack::EventSignal iStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsNack::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackSmsAckSmsStoredComp(aStatus);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsNack::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsNack::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsreceive.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,317 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsreceive.cpp
+// This contains CAtSmsReceive which received incoming messages
+// 
+
+//system include
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atsmsreceive.h"
+#include "atsmsstoreread.h"
+#include "atsmsack.h"
+#include "atmanager.h"
+#include "activecommandstore.h"
+#include "mslogger.h"
+#include "smsatutil.h"
+
+//constant defination
+_LIT8(KCMTMatchString,"+CMT:*");
+_LIT8(KCMTResponseString,"+CMT:");
+_LIT8(KAsterisk,"*");
+
+#ifdef _DEBUG
+const TInt KLogMaxCharNumPerLine = 160;
+#endif
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::CAtSmsReceive
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsReceive::CAtSmsReceive(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                             :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsReceive::CAtSmsReceive called"));
+	iAtType = ELtsyAT_Sms_ReceiveMessage;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::~CAtSmsReceive
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsReceive::~CAtSmsReceive()
+	{
+	LOGTEXT(_L8("CAtSmsReceive::~CAtSmsReceive called"));
+	RemoveAllExpectString();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsReceive* CAtSmsReceive::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                    CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsReceive* self = new (ELeave)CAtSmsReceive(aGloblePhone, 
+                                                    aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsReceive* CAtSmsReceive::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsReceive* self=CAtSmsReceive::NewLC(aGloblePhone, 
+                                             aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsReceive::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	//Add expecting string
+	RemoveAllExpectString();
+	AddExpectStringL(KCMTMatchString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsReceive::StartRequest()
+	{
+	iState = EReceiveReady;
+	iPhoneGlobals.iAtManager->GetActiveCommandStore()->AddUnsolicitedAtCommand(this);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsReceive::ExecuteCommand()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsReceive::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+/**
+ * Handle the events from the comm port
+ *ValidateExpectString
+ * @param aSource denotes if event is due to read, write or timeout
+ */
+	{
+	if(aStatus != KErrNone)
+		{
+		iCtsyDispatcherCallback.CallbackSmsNotifyReceiveSmsMessageInd(iError,EFalse,iMsgReceive);
+		return;
+		}
+	
+	if( iState == EReceiveReady )
+		{
+		LOGTEXT(_L8("CAtSmsReceive::EventSigna,EReadCompletion"));
+		//Handle CMT response
+		if (iError == KErrNone)
+			{
+             //want to read the second line
+			TRAPD(err,AddExpectStringL(KAsterisk));
+			if( err==KErrNone )
+				{
+				// Wait for the reception of the second line
+				iState=EWaitForCmtSecondLine;
+				return;
+				}
+			else
+				{
+				iError = err;
+				}
+			}
+		iCtsyDispatcherCallback.CallbackSmsNotifyReceiveSmsMessageInd(iError,EFalse,iMsgReceive);
+		}
+	else if( iState == EWaitForCmtSecondLine )
+		{
+		LOGTEXT(_L8("CAtSmsReceiveMessage::EventSignal EWaitForCmtSecondLine"));
+        RemoveExpectString(KAsterisk);
+		iCtsyDispatcherCallback.CallbackSmsNotifyReceiveSmsMessageInd(iError,EFalse,iMsgReceive);
+		// We've got the PDU, and will delete the buffer when the line is parsed
+		if(iPhoneGlobals.iEventSignalActive == EFalse)
+			{
+		    ClearBuffer();
+			}
+		iState = EReceiveReady;
+		}
+     
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::CMTResponseFirstLineL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void  CAtSmsReceive::CMTResponseFirstLineL()
+	{
+	LOGTEXT(_L8("CAtSmsReceive::CMTResponseFirstLineL Enter funciton"));
+	iError = KErrNone;
+	TPtrC8 firstLineBuf;
+	firstLineBuf.Set(Buffer());
+	TInt pos = firstLineBuf.FindF(KCMTResponseString);
+	if (pos == KErrNotFound)
+		{
+		LOGTEXT(_L8("CAtSmsReceive::CMTResponseFirstLineL()\tError - Cannot find '+CMT:' string"));
+		iError = KErrNotFound;
+		return;
+		}
+	//skip the string of +CMT:
+	pos += KCMTResponseString().Length();
+	//skip a  "," character
+	while(!(TChar(firstLineBuf[pos]).IsDigit()))
+		{
+		++pos;
+		}
+	TInt lenPos = firstLineBuf.Length()-pos;
+	TPtrC8 pduLenBuf;
+	pduLenBuf.Set(firstLineBuf.Right(lenPos));
+	
+	
+	TLex8 lex(pduLenBuf);
+	TUint16 val;
+	TInt ret = lex.Val(val,EDecimal);
+	if(ret != KErrNone)
+		{
+		iError = ret;
+		return;
+		}
+	iPduLen = val;
+    LOGTEXT2(_L8("New SMS detected of length %d"),iPduLen);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::CMTResponseSecondLineL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void  CAtSmsReceive::CMTResponseSecondLineL() 
+	{
+	LOGTEXT(_L8("CAtSmsReceive::CMTResponseSecondLineL Enter funciton"));
+	iError = KErrNone;
+	iAttr.iFlags=0;
+	TPtrC8 secondLineBuf;
+	secondLineBuf.Set(CurrentLine());
+	
+#ifdef _DEBUG
+	TInt totalLen = secondLineBuf.Length();
+	if(totalLen <= KLogMaxCharNumPerLine)
+		{
+		LOGTEXT2(_L8("CAtSmsReceiveMessage::CMTResponseSecondLineL\tSecondLine=%S"),&secondLineBuf);
+		}
+	else
+		{
+		TInt lines = (totalLen/KLogMaxCharNumPerLine);
+		TInt remainingStrNum = (totalLen%KLogMaxCharNumPerLine);
+		for(TInt i = 0; i < lines; i++)
+			{
+			TPtrC8 line(secondLineBuf.Mid(i*KLogMaxCharNumPerLine,KLogMaxCharNumPerLine));
+			LOGTEXT2(_L8("CAtSmsReceiveMessage::CMTResponseSecondLineL \tSecondLine line=%S"),&line);
+			}
+		
+		TPtrC8 remaining(secondLineBuf.Right(remainingStrNum));
+		
+		LOGTEXT2(_L8("CAtSmsReceiveMessage::CMTResponseSecondLineL \tSecondLine line=%S"),&remaining);
+		}
+#endif  
+	// Buffer size calculated as follows;
+	//   (max pdu size + max prefixed SCA size) * number of ASCII chars used to code an octet
+	TBuf8<(RMobileSmsMessaging::KGsmTpduSize+12)*2> localPdu;	
+	localPdu.Copy(secondLineBuf);
+	//  The CMT frame sometimes contains odd number of nibbles which
+	// causes panic in ConvertAsciiToBinary() method. This type of
+	// frames will simply be discarded.
+	if(localPdu.Length() < (iPduLen*2))
+		{
+		iError = KErrUnderflow;
+		User::Leave(KErrUnderflow);
+		}
+		
+	//
+	// Check if we have a prefixed SCA on our pdu.
+	// If we do then remove it.
+	
+	if(localPdu.Length() > (iPduLen*2))
+		{
+		TInt ret = SmsAtUtil::ReadAndRemoveAddressFromAscii(localPdu,iAttr.iGsmServiceCentre);
+		if(ret !=KErrNone)
+			{
+			LOGTEXT(_L8("CAtSmsReceiveMessage::CMTResponseSecondLineL Failed to read and remove SCA from PDU"));
+			iError = ret;
+			return;
+			}
+		else
+			{
+			iMsgReceive.iServiceCentre = iAttr.iGsmServiceCentre.iTelNumber;    //for iServiceCentre
+			iMsgReceive.iMobileScNPI = iAttr.iGsmServiceCentre.iNumberPlan;
+			iMsgReceive.iMobileScTON = iAttr.iGsmServiceCentre.iTypeOfNumber;
+			iAttr.iFlags|= RMobileSmsMessaging::KGsmServiceCentre;
+			}
+		}
+	//
+	// Convert received pdu from ASCII into binary
+	TInt ret = SmsAtUtil::ConvertAsciiToBinary(localPdu,iPdu);
+	if (ret!=KErrNone)
+		{
+		LOGTEXT(_L8("CAtSmsReceiveMessage::CMTResponseSecondLineL Failed to code PDU into binary"));
+		iError = ret;
+		return;
+		}
+	else
+		{
+		iAttr.iDataFormat=RMobileSmsMessaging::EFormatGsmTpdu;
+		iAttr.iFlags|=RMobileSmsMessaging::KSmsDataFormat;
+		iAttr.iStatus = RMobileSmsMessaging::EMtMessageUnstoredClientAck;
+		iAttr.iFlags|=RMobileSmsMessaging::KIncomingStatus;
+		}
+
+	LOGTEXT2(_L8("Received PDU String is %S"),&iPdu);
+	iMsgReceive.iSmsMsg = iPdu;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsReceive::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsReceive::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if(iState == EReceiveReady)
+		{
+		CMTResponseFirstLineL();
+		}
+	else if(iState == EWaitForCmtSecondLine)
+		{
+		CMTResponseSecondLineL();
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmssend.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,335 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmssend.cpp
+// This contains CAtSmsSend which is used to send sms message
+// 
+
+//system include
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+// user include
+#include "atsmssend.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+#include "atmanager.h"
+#include "commengine.h"
+#include "smsatutil.h"
+
+//Constants
+_LIT8(KSmsSendCommandPdu,"AT+CMGS=%d\r");
+_LIT8(KCMGSResponseString,"+CMGS:");
+_LIT8(KDefaultSCA,"00");
+_LIT8(KSmsEnterPduResponse,">");
+_LIT8(KSendExpectedString,"+CMGS:*");
+const TInt KLtsyOnePause = 100000;
+const TInt KLtsySendSmsWriteTimeOut = 20;
+const TInt KLtsySendSmsReadTimeOut = 30;
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::CAtSmsSend
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend::CAtSmsSend(CGlobalPhonemanager& aGloblePhone, 
+                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                       :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)                  
+ 	{
+	LOGTEXT(_L8("CAtSmsSend::CAtSmsSend called"));
+	iWriteTimeOut = KLtsySendSmsWriteTimeOut;
+	iReadTimeOut = KLtsySendSmsReadTimeOut;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::~CAtSmsSend
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend::~CAtSmsSend()
+	{
+	LOGTEXT(_L8("CAtSmsSend::~CAtSmsSend called"));
+	delete iCallbackTimer;
+	iCallbackTimer = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend* CAtSmsSend::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                              CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsSend* self = new (ELeave)CAtSmsSend(aGloblePhone,
+			                                  aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend* CAtSmsSend::NewL(CGlobalPhonemanager& aGloblePhone, 
+                             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsSend* self=CAtSmsSend::NewLC(aGloblePhone,aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	//Create Timer
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	//set writing timeout
+	iWriteTimeOut = KLtsyDefaultWriteTimeOut;
+	AddExpectStringL(KSmsEnterPduResponse);
+	AddExpectStringL(KSendExpectedString);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsSend::ExecuteCommand called"));
+	LOGTEXT(_L8("SendPDUMessage..."));
+	
+	iMsgDataAscii.Zero();
+	TInt ret = ConfirmSca();
+	if(ret == KErrNone)
+		{
+		//Here is a SCA
+		ret = SmsAtUtil::AppendAddressToAscii(iMsgDataAscii,iSmsSendParam.iGsmServiceCentre);
+		if( ret!=KErrNone )
+			{
+			BeginTimer();
+			iCallbackVal = ret;
+			return;
+			}
+		}
+	else 
+		{
+		//Here is no SCA,usign default SCA
+		iMsgDataAscii.Append(KDefaultSCA);
+		}
+	const TInt msgDataAsciiLen(iMsgDataAscii.Length());
+	// Convert PDU to ASCII
+	SmsAtUtil::AppendDataToAscii(iMsgDataAscii,iSmsSendParam.iSmsTpdu);
+	iState = ESetPDULengthComplete;
+	StartWritingPduLength();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartWritingPduLength
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartWritingPduLength()
+	{
+	LOGTEXT(_L8("CAtSmsSend::StartWritingPduLength called"));
+	TInt pduLen = iSmsSendParam.iSmsTpdu.Length();
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsSendCommandPdu,pduLen);
+	ClearBuffer();
+	iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+	iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);	
+	StartTimer(iWriteTimeOut);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartWritingPdu
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartWritingPdu()
+	{
+	LOGTEXT(_L8("CAtSmsSend::StartWritingPdu called"));
+	iTxBuffer.Zero();
+	iTxBuffer.Append(iMsgDataAscii);
+	iTxBuffer.Append(KLtsyCtrlZChar);
+	ClearBuffer();
+	iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+	iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);	
+	StartTimer(iWriteTimeOut);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::SetMessageParam
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::SetMessageParam(TSmsSendParam aMsgParam)
+	{
+	iSmsSendParam = aMsgParam;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsSend::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+    if(aStatus == KErrNone)
+		{
+		if(aEventSource == EWriteCompletion)
+			{
+			LOGTEXT(_L8("CAtSmsSend::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		else
+			{
+			if( iState == ESetPDULengthComplete )
+				{
+	            if(iError==KErrNone)
+	            	{
+			    	iState = ESendPDUComplete;
+			    	Complete();
+			       	StartWritingPdu();
+			    	return;     
+	            	}
+				}
+			}
+		aStatus = iError;
+		}
+    Complete();
+   	iPhoneGlobals.iEventSignalActive = EFalse;
+    iCtsyDispatcherCallback.CallbackSmsSendSmsMessageComp(aStatus,iSmsSendResponse.iValRef,
+    		                                              iSmsSendResponse.iSubmitReport);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+    {
+    LOGTEXT(_L8("CAtSmsSend::ParseResponseL called!"));
+    if(iState == ESetPDULengthComplete) 
+	    {
+   	    if(CurrentLine().MatchF(KSmsEnterPduResponse) != KErrNotFound)
+	    	{
+	    	iError = KErrNone;
+	    	}
+	    else
+	    	{
+	    	iError = KErrNotFound;
+	    	}
+	    }
+    else
+		{
+		iError = KErrNone;
+		TPtrC8 responseBuf;
+		responseBuf.Set(Buffer());
+		TInt pos = responseBuf.FindF(KCMGSResponseString);
+		if (pos == KErrNotFound)
+			{
+			LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse \"+CMGS:\" not found"));
+			iError = KErrNotFound;
+			return;
+			}
+	
+		// Locate the message reference number
+		// (ie. read in all digits form the first found to the end of the string)
+		const TInt bufLength=responseBuf.Length();
+		pos += KCMGSResponseString().Length();
+		while(pos<bufLength && !(TChar(responseBuf[pos]).IsDigit()))
+				++pos;
+		if(pos == bufLength)
+			{
+			LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse cannot find any digits after \"+CMS:\" "));
+			iError = KErrNotFound;
+			return;
+			}
+	
+		// Read message number and store in clients data structure
+		TPtrC8 ptr = responseBuf.Mid(pos);	
+		TLex8 lex(ptr);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse cannot read Message Reference Number"));
+			iError = ret;
+			return;
+			}
+		iSmsSendResponse.iValRef = val;
+		LOGTEXT2(_L8("CAtSmsSend  Message reference number %d"),val);
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ConfirmSca
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CAtSmsSend::ConfirmSca()
+	{
+	if(iSmsSendParam.iGsmServiceCentre.iTelNumber.Length() == 0)
+		{
+		return KErrNotFound;
+		}
+	if(!(iSmsSendParam.iGsmServiceCentre.iNumberPlan == RMobilePhone::EIsdnNumberPlan &&
+		(iSmsSendParam.iGsmServiceCentre.iTypeOfNumber == RMobilePhone::EInternationalNumber ||
+		iSmsSendParam.iGsmServiceCentre.iTypeOfNumber == RMobilePhone::EUnknownNumber)))
+		{
+		return KErrCorrupt;
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::BeginTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::BeginTimer()
+	{
+	LOGTEXT(_L8("CAtSmsSend::BeginTimer() called"));	
+	
+    if (iCallbackTimer->IsActive())
+    	{
+    	iCallbackTimer->Cancel();
+    	}
+	iCallbackTimer->After(KLtsyOnePause);	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::TimerRun
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::TimerRun(TInt aError)
+	{
+	LOGTEXT(_L8("CAtSmsSend::TimerRun() called"));
+	if(aError == KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackSmsSendSmsMessageComp(iCallbackVal,iSmsSendResponse.iValRef,
+				                                              iSmsSendResponse.iSubmitReport);
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoredelete.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,272 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoredelete.cpp
+// This contains CAtSmsStoreDelete and CAtSmsStoreDeleteAll which is used to delete message(s)
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include
+#include "atsmsstoredelete.h"
+#include "mslogger.h"
+
+//constant defination
+const TUint KSmsDeleteAllTimeOut = 200;
+_LIT8(KSmsDeleteCommand,"AT+CMGD=%d\r");
+_LIT8(KSmsDeleteAllCommand,"AT+CMGD=1,4\r");
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::CAtSmsStoreDelete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDelete::CAtSmsStoreDelete(CGlobalPhonemanager& aGloblePhone, 
+                                     CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                     :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreDelete::CAtSmsStoreDelete called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::~CAtSmsStoreDelete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDelete::~CAtSmsStoreDelete()
+	{
+	LOGTEXT(_L8("CAtSmsStoreDelete::~CAtSmsStoreDelete called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::NewLC(
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDelete* CAtSmsStoreDelete::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                            CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreDelete* self = new (ELeave)CAtSmsStoreDelete(aGloblePhone, 
+                                                            aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDelete* CAtSmsStoreDelete::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                           CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreDelete* self=CAtSmsStoreDelete::NewLC(aGloblePhone, 
+                                                     aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::SetDelIndex
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::SetDelIndex(TInt aIndex)
+	{
+	LOGTEXT(_L8("CAtSmsStoreDelete::SetReadMessageParam callded"));
+	iIndex = aIndex;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreDelete::ExecuteCommand callded"));
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsDeleteCommand,iIndex); // Delete Command through aIndex
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreDelete::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreDelete::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhonebookSmsStoreDeleteEntryComp(aStatus);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDelete::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDelete::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+// End of CAtSmsStoreDelete 
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::CAtSmsStoreDeleteAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDeleteAll::CAtSmsStoreDeleteAll(CGlobalPhonemanager& aGloblePhone, 
+										   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+										   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreDeleteAll::CAtSmsStoreDeleteAll called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::~CAtSmsStoreDeleteAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDeleteAll::~CAtSmsStoreDeleteAll()
+	{
+	LOGTEXT(_L8("CAtSmsStoreDeleteAll::~CAtSmsStoreDeleteAll called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDeleteAll* CAtSmsStoreDeleteAll::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                  CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreDeleteAll* self = new (ELeave)CAtSmsStoreDeleteAll(aGloblePhone, 
+                                                                  aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreDeleteAll* CAtSmsStoreDeleteAll::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreDeleteAll* self=CAtSmsStoreDeleteAll::NewLC(aGloblePhone, 
+                                                           aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDeleteAll::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KSmsDeleteAllTimeOut);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDeleteAll::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDeleteAll::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreDeleteAll::ExecuteCommand callded"));
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsDeleteAllCommand); // Delete Command through aIndex
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDeleteAll::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreDeleteAll::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreDeleteAll::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhonebookSmsStoreDeleteAllComp(aStatus);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreDeleteAll::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreDeleteAll::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	if (CurrentLine().Match(KLtsyOkString) == 0)
+		{
+		iError = KErrNone;
+		}
+	else
+		{
+		iError = KErrGeneral;
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoreinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,193 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoreinfo.cpp
+// This contains CAtSmsStoreInfo which is used to get sms store information
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atsmsstoreinfo.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+#include "globalphonemanager.h"
+
+//constant defination
+_LIT8(KGetPrefMemCommand,"AT+CPMS?\r");
+_LIT8(KCPMSResponseString,"+CPMS:");
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::CAtSmsStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreInfo::CAtSmsStoreInfo(CGlobalPhonemanager& aGloblePhone, 
+                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                 :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreInfo::CAtSmsStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::~CAtSmsStoreInfo
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreInfo::~CAtSmsStoreInfo()
+	{
+	LOGTEXT(_L8("CAtSmsStoreInfo::~CAtSmsStoreInfo called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreInfo* CAtSmsStoreInfo::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                        CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtSmsStoreInfo* self = new (ELeave)CAtSmsStoreInfo(aGloblePhone, 
+			                                            aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreInfo* CAtSmsStoreInfo::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+    {
+	CAtSmsStoreInfo* self=CAtSmsStoreInfo::NewLC(aGloblePhone, 
+                                                 aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreInfo::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreInfo::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreInfo::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreInfo::ExecuteCommand called"));
+	iTxBuffer.Zero();
+	iTxBuffer.Copy(KGetPrefMemCommand);
+	Write();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreInfo::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreInfo::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;	
+	iCtsyDispatcherCallback.CallbackPhonebookSmsStoreGetInfoComp(aStatus,iTotal,iUsed);
+	}	
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreInfo::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	/**
+	* Parse result of AT+CPMS? 
+	* Response:+CPMS:<mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>
+	* Here only the first mem is used. mem1 is SM
+	*/
+	iError = KErrNone;
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,Buffer());
+	if(array[0].MatchF(KAnyATCommand) != KErrNotFound)
+		{
+		array.Remove(0);
+		}
+	TInt Count = array.Count();
+	if (Count <= 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if(array[0].MatchF(KCPMSResponseString) == KErrNotFound)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	//parse name 
+	TPtrC8 name(array[1]);
+	
+	//parse used
+	TLex8 lex(array[2]);
+	TUint16 val;
+	TInt ret = lex.Val(val,EDecimal);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iUsed = val;
+	
+	//parse total
+	TLex8 lex1(array[3]);
+	ret = lex1.Val(val,EDecimal);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iTotal = val;
+	iPhoneGlobals.iStoreTotal = iTotal;
+	LOGTEXT2(_L8("CAtSmsStoreInfo::CPMSResponseL\tPreferred store name=%S"),&name);
+ 	LOGTEXT3(_L8("CAtSmsStoreInfo::CPMSResponseL\tPreferred store used=%d, total=%d"), 
+ 			                                     iUsed,iTotal);
+	CleanupStack::PopAndDestroy(&array);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstoreread.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,232 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstoreread.cpp
+// This contains CAtSmsStoreRead which is used to Read PDU Message
+// via aIndex 
+// 
+
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "atsmsstoreread.h"
+#include "mslogger.h"
+#include "smsatutil.h"
+
+//constant defination
+_LIT8(KSmsReadCommand,"AT+CMGR=%d\r");
+_LIT8(KCMGRResponseString,"+CMGR:");
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::CAtSmsStoreRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreRead::CAtSmsStoreRead(CGlobalPhonemanager& aGloblePhone, 
+                                 CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                 :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreRead::CAtSmsStoreRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::~CAtSmsStoreRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreRead::~CAtSmsStoreRead()
+	{
+	LOGTEXT(_L8("CAtSmsStoreRead::~CAtSmsStoreRead called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreRead* CAtSmsStoreRead::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                        CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreRead* self = new (ELeave)CAtSmsStoreRead(aGloblePhone, 
+                                                        aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreRead* CAtSmsStoreRead::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreRead* self=CAtSmsStoreRead::NewLC(aGloblePhone, 
+                                                 aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreRead::ExecuteCommand callded"));
+	ReadMessage();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreRead::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+		
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreRead::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhonebookSmsStoreReadEntryComp(aStatus,iSmsData);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::SetMsgIndex
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::SetMsgIndex(TInt aIndex)
+	{
+	LOGTEXT(_L8("CAtSmsStoreRead::SetReadMessageParam callded"));
+	iIndex = aIndex;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::ReadMessage
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::ReadMessage()
+	{
+	LOGTEXT(_L8("CAtSmsStoreRead::ReadMessage callded"));
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsReadCommand,iIndex);
+	Write();   
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreRead::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	/**
+	* Response:+CMGR:<stat>,[<alpha>],<length><CR><LF><pdu>
+	*/
+	iError = KErrNone;	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,Buffer());
+	if(array[0].MatchF(KAnyATCommand)!=KErrNotFound)
+		{
+		array.Remove(0);
+		}
+	TInt count = array.Count();
+#ifdef _DEBUG
+	for( TInt i=0;i<count;i++ )
+		{
+        LOGTEXT3(_L8("CAtSmsStoreRead::ParseResponseL\tarray[%d]=%S"),i,&array[i]);  
+		}
+#endif   
+	if (count <= 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if(array[0].MatchF(KCMGRResponseString)==KErrNotFound)
+		{
+		LOGTEXT(_L8("CAtSmsStoreRead::ParseResponseL\tFound +CMGR String!"));
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	// parse the message status
+	TLex8 lex(array[1]);
+	TUint16 val;
+	TInt ret=lex.Val(val,EDecimal);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iSmsData.iMessageStatus = val;
+	
+	//parse the message length
+	TLex8 lex1(array[3]);
+	TUint msgLength;
+	ret=lex1.Val(msgLength,EDecimal);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	LOGTEXT2(_L8("CAtSmsStoreRead::ParseResponseL\tMessage Length=%d"),msgLength);
+	TBuf8<KMaxAsciiPduLength>  pdu;	   //Binary Message pdu
+	SmsAtUtil::ConvertAsciiToBinary(array[4],pdu);
+	TPtrC8 pduPtr(pdu);
+	
+	RMobilePhone::TMobileAddress gsmServiceCentre;   //messages's SCA
+	if (msgLength*2 < array[4].Length())
+		{
+		// There is an SCA prepended so remove this and store it in iGsmServiceCentre
+		SmsAtUtil::ReadAndRemoveAddressFromPdu(pduPtr,gsmServiceCentre);
+		}
+	iSmsData.iSmsMsg = pduPtr;
+	iSmsData.iServiceCentre = gsmServiceCentre.iTelNumber;
+	iSmsData.iMobileScNPI = gsmServiceCentre.iNumberPlan;
+	iSmsData.iMobileScTON = gsmServiceCentre.iTypeOfNumber;
+	LOGTEXT2(_L8("CAtSmsStoreRead::ParseResponseL\tMessage Status=%d"),
+			                       iSmsData.iMessageStatus);
+	LOGTEXT3(_L8("CAtSmsStoreRead::ParseResponseL\tSmsMsg=%S, ServiceCentre=%S"), 
+			                       &iSmsData.iSmsMsg, &iSmsData.iServiceCentre);
+	CleanupStack::PopAndDestroy(&array);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorereadall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,230 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstorereadall.cpp
+// This contains CAtSmsStoreReadAll which is used to read all messages
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include 
+#include "mslogger.h"
+#include "atsmsstorereadall.h"
+#include "smsatutil.h"
+
+//constant defination
+_LIT8(KSmsReadCommand,"AT+CMGR=%d\r");
+_LIT8(KCMGRResponseString,"+CMGR:");
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::CAtSmsStoreReadAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreReadAll::CAtSmsStoreReadAll(CGlobalPhonemanager& aGloblePhone, 
+                                       CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                       :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreReadAll::CAtSmsStoreReadAll called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::~CAtSmsStoreReadAll
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreReadAll::~CAtSmsStoreReadAll()
+	{
+	LOGTEXT(_L8("CAtSmsStoreReadAll::~CAtSmsStoreReadAll called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreReadAll* CAtSmsStoreReadAll::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                                CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreReadAll* self = new (ELeave)CAtSmsStoreReadAll( aGloblePhone,aCtsyDispatcherCallback );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreReadAll* CAtSmsStoreReadAll::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                               CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreReadAll* self=CAtSmsStoreReadAll::NewLC( aGloblePhone,aCtsyDispatcherCallback );
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreRead::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::StartRequest()
+	{
+	iIndex = 1;
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreReadAll::ExecuteCommand callded"));
+	ReadMessage();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::ReadMessage
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::ReadMessage()
+	{
+	LOGTEXT(_L8("CAtSmsStoreReadAll::ReadMessage callded"));
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsReadCommand,iIndex);
+	Write();   
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreReadAll::EventSignal aStatus=%D iSource=%D"),
+			                          aStatus,aEventSource);
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreRead::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		aStatus = iError;
+		}		
+		
+	if(iIndex < iPhoneGlobals.iStoreTotal)
+		{
+		iCtsyDispatcherCallback.CallbackPhonebookSmsStoreReadAllComp(aStatus,iSmsData,iIndex,ETrue,EFalse);
+		iIndex++;
+		ReadMessage();
+		}
+	else 
+		{
+		//Handle last message 
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookSmsStoreReadAllComp(aStatus,iSmsData,iIndex,EFalse,EFalse);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreReadAll::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreReadAll::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+	/**
+	* Response:+CMGR:<stat>,[<alpha>],<length><CR><LF><pdu>
+	*/
+	iError = KErrNone;	
+	RArray<TPtrC8> array;
+	CleanupClosePushL(array);
+	iParser->ParseRespondedBuffer(array,Buffer());
+	if(array[0].MatchF(KAnyATCommand)!=KErrNotFound)
+		{
+		array.Remove(0);
+		}
+	TInt count = array.Count();
+#ifdef _DEBUG
+	for( TInt i=0;i<count;i++ )
+		{
+        LOGTEXT3(_L8("CAtSmsStoreReadAll::ParseResponseL\tarray[%d]=%S"),i,&array[i]);  
+		}
+#endif   
+	if (count <= 1)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	if(array[0].MatchF(KCMGRResponseString)==KErrNotFound)
+		{
+		LOGTEXT(_L8("CAtSmsStoreReadAll::ParseResponseL\tFound +CMGR String!"));
+		CleanupStack::PopAndDestroy();
+		iError = KErrNotFound;
+		return;
+		}
+	// parse the message status
+	TLex8 lex(array[1]);
+	TUint16 val;
+	TInt ret=lex.Val(val,EDecimal);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	iSmsData.iMessageStatus = val;
+	
+	//parse the message length
+	TLex8 lex1(array[3]);
+	TUint msgLength;
+	ret=lex1.Val(msgLength,EDecimal);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		iError = ret;
+		return;
+		}
+	LOGTEXT2(_L8("CAtSmsStoreReadAll::ParseResponseL\tMessage Length=%d"),msgLength);
+	TBuf8<KMaxAsciiPduLength>  pdu;	   //Binary Message pdu
+	SmsAtUtil::ConvertAsciiToBinary(array[4],pdu);
+	TPtrC8 pduPtr(pdu);
+	
+	RMobilePhone::TMobileAddress gsmServiceCentre;   //messages's SCA
+	if (msgLength*2 < array[4].Length())
+		{
+		// There is an SCA prepended so remove this and store it in iGsmServiceCentre
+		SmsAtUtil::ReadAndRemoveAddressFromPdu(pduPtr,gsmServiceCentre);
+		}
+	iSmsData.iSmsMsg = pduPtr;
+	iSmsData.iServiceCentre = gsmServiceCentre.iTelNumber;
+	iSmsData.iMobileScNPI = gsmServiceCentre.iNumberPlan;
+	iSmsData.iMobileScTON = gsmServiceCentre.iTypeOfNumber;
+	LOGTEXT2(_L8("CAtSmsStoreReadAll::ParseResponseL\tMessage Status=%d"),
+			                          iSmsData.iMessageStatus);
+	LOGTEXT3(_L8("CAtSmsStoreReadAll::ParseResponseL\tSmsMsg=%S, ServiceCentre=%S"), 
+			                          &iSmsData.iSmsMsg, &iSmsData.iServiceCentre);
+	CleanupStack::PopAndDestroy(&array);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorewrite.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,316 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file atsmsstorewrite.cpp
+// This contains CAtSmsStoreWrite which is used to write sms message
+// 
+
+//system include 
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+//user include
+#include "atsmsstorewrite.h"
+#include "mslogger.h"
+#include "atmanager.h"
+#include "commengine.h"
+#include "smsatutil.h"
+
+//constant defination
+_LIT8(KCMGWResponseString,"+CMGW:");
+_LIT8(KSmsWriteLengthCommand,"AT+CMGW = %d\r");
+_LIT8(KDefaultSCA,"00");
+_LIT8(KSmsEnterPduResponse,">");
+const TInt KLtsyOnePause = 100000;   //0.1s
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::CAtSmsStoreWrite
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreWrite::CAtSmsStoreWrite(CGlobalPhonemanager& aGloblePhone, 
+                                   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+                                   :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::CAtSmsStoreWrite called"));
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::~CAtSmsStoreWrite
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreWrite::~CAtSmsStoreWrite()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::~CAtSmsStoreWrite called"));
+	delete iCallbackTimer;
+	iCallbackTimer = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreWrite* CAtSmsStoreWrite::NewLC(CGlobalPhonemanager& aGloblePhone, 
+                                          CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreWrite* self = new (ELeave)CAtSmsStoreWrite(aGloblePhone, 
+                                                          aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsStoreWrite* CAtSmsStoreWrite::NewL(CGlobalPhonemanager& aGloblePhone, 
+                                         CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	CAtSmsStoreWrite* self=CAtSmsStoreWrite::NewLC(aGloblePhone, 
+                                                   aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::ConstructL()
+	{
+	CAtCommandBase::ConstructL();
+	//Create Timer
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	//set writing timeout
+	iWriteTimeOut = KLtsyDefaultWriteTimeOut;
+	AddExpectStringL(KSmsEnterPduResponse);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::SeGsmSmsEntry
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::SeGsmSmsEntry(RMobileSmsStore::TMobileGsmSmsEntryV1 aMobileGsmEntry)
+	{
+	iMobileGsmEntry = aMobileGsmEntry;
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::StartRequest()
+	{
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::ExecuteCommand()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::ExecuteCommand callded"));
+	WriteMessage();
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::WriteMessage
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::WriteMessage()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::WriteMessage callded"));
+	iTxBuffer.Zero();
+	
+	RMobilePhone::TMobileAddress  msgSca = iMobileGsmEntry.iServiceCentre;
+	if( msgSca.iTelNumber.Length()!=0 )
+		{
+		//Here is a SCA
+		TInt ret = SmsAtUtil::AppendAddressToAscii(iMsgDataAscii,msgSca);
+		if( ret!=KErrNone )
+			{
+			BeginTimer();
+			iCallbackVal = ret;
+			return;
+			}
+		}
+	else 
+		{
+		//Here is no SCA,usign default SCA
+		iMsgDataAscii.Append(KDefaultSCA);
+		}
+	
+	const TInt msgDataAsciiLen(iMsgDataAscii.Length());
+	// Convert PDU to ASCII
+	SmsAtUtil::AppendDataToAscii(iMsgDataAscii,iMobileGsmEntry.iMsgData);
+	iState = ESetPDULengthComplete;
+	StartWritingPduLength();	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::StartWritingPduLength
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::StartWritingPduLength()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::StartWritingPduLength called"));
+	TInt pduLen = iMobileGsmEntry.iMsgData.Length();
+	iTxBuffer.Zero();
+	iTxBuffer.Format(KSmsWriteLengthCommand,pduLen);
+	ClearBuffer();
+	iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+	iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);	
+	StartTimer(iWriteTimeOut);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::StartWritingPdu
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::StartWritingPdu()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::StartWritingPdu called"));
+	iTxBuffer.Zero();
+	iTxBuffer.Append(iMsgDataAscii);
+	iTxBuffer.Append(KLtsyCtrlZChar);
+	ClearBuffer();
+	iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+	iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);	
+	StartTimer(iWriteTimeOut);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+	{
+	LOGTEXT3(_L8("CAtSmsStoreWrite::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+		
+	if(aStatus == KErrNone)
+		{
+		if((aEventSource == EWriteCompletion))
+			{
+			LOGTEXT(_L8("CAtSmsStoreWrite::EventSignal,EWriteCompletion!"));
+			return;
+			}
+		else
+			{
+			if( iState == ESetPDULengthComplete )
+				{
+	            if(iError==KErrNone)
+	            	{
+			    	iState = EWritePDUComplete;
+			    	Complete();
+			    	StartWritingPdu();
+			    	return;     
+	            	}
+				}
+			}
+		aStatus = iError;
+		}
+	Complete();
+	iPhoneGlobals.iEventSignalActive = EFalse;
+	iCtsyDispatcherCallback.CallbackPhonebookSmsStoreWriteEntryComp(aStatus,iLocation,EFalse);
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+	{
+    LOGTEXT(_L8("CAtSmsStoreWrite::ParseResponseL called!"));
+    if(iState == ESetPDULengthComplete) 
+	    {
+   	    if(CurrentLine().MatchF(KSmsEnterPduResponse) != KErrNotFound)
+	    	{
+	    	iError = KErrNone;
+	    	}
+	    else
+	    	{
+	    	iError = KErrNotFound;
+	    	}
+	    }
+    else
+    	{
+	    iError = KErrNone;	
+	    TPtrC8 responseBuf;
+	    responseBuf.Set(Buffer());
+		TInt pos = responseBuf.FindF(KCMGWResponseString);
+		if (pos == KErrNotFound)
+			{
+			LOGTEXT(_L8("CAtSmsStoreWrite::ParseResponseL\tError - Cannot find '+CMGW:' string"));
+			iError = KErrNotFound;
+			return;
+			}
+		pos += KCMGWResponseString().Length();
+		//skip a "space" start
+		while(!(TChar(responseBuf[pos]).IsDigit()))
+			{
+			++pos;
+			}
+		// Place the message reference number into buffer 
+		//(ie: everything after +CMGW: string)
+		TInt refPos = responseBuf.Length()-pos;
+		responseBuf.Set(responseBuf.Right(refPos));
+		
+		
+		TLex8 lex(responseBuf);
+		TUint16 val;
+		TInt ret = lex.Val(val,EDecimal);
+		if(ret != KErrNone)
+			{
+			iError = ret;
+			return;
+			}
+		iLocation = val;
+		LOGTEXT2(_L8("CAtSmsStoreWrite::ParseResponseL write index =%d"),iLocation);
+    	}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::BeginTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::BeginTimer()
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::BeginTimer() called"));	
+	
+    if (iCallbackTimer->IsActive())
+    	{
+    	iCallbackTimer->Cancel();
+    	}
+	iCallbackTimer->After(KLtsyOnePause);	
+	}
+
+// ---------------------------------------------------------------------------
+// CAtSmsStoreWrite::TimerRun
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsStoreWrite::TimerRun(TInt aError)
+	{
+	LOGTEXT(_L8("CAtSmsStoreWrite::TimerRun() called"));
+	if(aError == KErrNone)
+		{
+		Complete();
+		iPhoneGlobals.iEventSignalActive = EFalse;
+		iCtsyDispatcherCallback.CallbackPhonebookSmsStoreWriteEntryComp(
+				                iCallbackVal,iLocation,EFalse);
+		
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/smsatutil.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,447 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file smsatutil.cpp
+// This contains SmsAtUtil which is util for Sms At command
+// 
+
+// user include
+#include "smsatutil.h"
+#include "ltsycommondefine.h"
+#include "panic.h"
+
+/**
+ * Receive PDU example 
+ * 0891683108200805F0040D91683188902848F4000850208151754500108FD9662F4E0067616D4B8BD577ED4FE1
+ * 08 ocet length including 91
+ * 91 Identify Address Type
+ * 683108200805F0 SCA address
+ * 04
+ * 0D91683188902848F4
+ * 00
+ * 08
+ * 50208151754500
+ * 10   
+ * 8FD9662F4E0067616D4B8BD577ED4FE1
+ */
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAsciiToBinary
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt SmsAtUtil::ConvertAsciiToBinary(const TDesC8& aAscii,TDes8& aData)
+	{
+	aData.Zero();
+	TLex8 lex;
+	TUint8 val;
+	TInt ret;
+	const TInt count(aAscii.Length());
+	for(TInt i = 0;i < count;i = i + 2)
+		{
+		lex = aAscii.Mid(i,2);
+		ret = lex.Val(val,EHex);
+		if(ret != KErrNone)
+			{
+			return ret;
+			}
+		aData.Append(val);
+		}
+	return KErrNone;
+	}
+
+// -------------------------------------------------------------------------------
+// SmsAtUtil::AppendAddressToAscii
+// other items were commented in a header
+// -------------------------------------------------------------------------------
+TInt SmsAtUtil::AppendAddressToAscii(TDes8& aAscii,
+		                             const RMobilePhone::TMobileAddress& aAddress)
+	{
+	// Duplicate tel number, removing all the weird chars
+	TBuf<RMobilePhone::KMaxMobileTelNumberSize> telNumber;
+	const TInt count(aAddress.iTelNumber.Length());
+	// Validate the size of the supplied SCA
+    if(count >= RMobilePhone::KMaxMobileTelNumberSize)
+    	{
+    	return KErrOverflow;
+    	}
+	TInt i;
+	for(i = 0;i < count;++i)
+		{
+		if(IsAddressChar(TChar(aAddress.iTelNumber[i])))
+			telNumber.Append(aAddress.iTelNumber[i]);
+		}
+
+	const TInt telNumberLength(telNumber.Length());
+	
+	// Code Address-Length
+	AppendOctet(1 + (telNumberLength/2) + (telNumberLength%2),aAscii);
+
+	// Code Type-Of-Address
+	TInt typeOfNumber = ConvertTypeOfNumber(aAddress.iTypeOfNumber);
+	TInt numberingPlan = ConvertNumberingPlan(aAddress.iNumberPlan);
+	AppendOctet(0x80+(typeOfNumber<<4) + (numberingPlan),aAscii);
+
+	// Code Address-Value
+	TInt highSemiOctet;
+	TInt lowSemiOctet;
+	const TInt octets(telNumberLength/2);	// This division will be rounded down
+	for(i = 0; i < octets; ++i)
+		{
+		// See ETSI 03.40 section 9.1.2.3
+		// Address digits are coded into octets as pairs.
+		lowSemiOctet = ConvertAddressChar(TChar(telNumber[i*2]));
+		highSemiOctet = ConvertAddressChar(TChar(telNumber[(i*2)+1]));
+		AppendOctet((highSemiOctet<<4)+lowSemiOctet,aAscii);
+		}
+				
+	// If number of semi octects is odd then process the final octet
+	if(telNumberLength%2 == 1)		
+		{
+		lowSemiOctet = ConvertAddressChar(TChar(telNumber[telNumberLength-1]));
+		AppendOctet(0xf0+lowSemiOctet,aAscii);
+		}
+				
+	__ASSERT_DEBUG(aAscii.Length()%2 == 0,Panic(EATSmsUtilsOddNumberOfSemiOctets));
+	return KErrNone;
+	}
+
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::AppendDataToAscii
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void SmsAtUtil::AppendDataToAscii(TDes8& aAscii,const TDesC8& aData)
+ 	{
+	const TInt count(aData.Length());
+	__ASSERT_DEBUG((aAscii.MaxLength()-aAscii.MaxLength())<=(count*2),Panic(EATSmsUtilsDescriptorOverflow));
+
+	for(TInt i = 0; i < count; ++i)
+		{
+		AppendOctet(aData[i],aAscii);
+		}
+		
+	__ASSERT_DEBUG(aAscii.Length()%2==0,Panic(EATSmsUtilsOddNumberOfSemiOctets));
+	}
+
+// ----------------------------------------------------------------------------------
+// SmsAtUtil::ReadAndRemoveAddressFromAscii
+// other items were commented in a header
+// ----------------------------------------------------------------------------------
+TInt SmsAtUtil::ReadAndRemoveAddressFromAscii(TDes8& aAscii,
+		                                      RMobilePhone::TMobileAddress& aAddress)
+	{
+	__ASSERT_DEBUG(aAscii.Length()%2==0,Panic(EATSmsUtilsOddNumberOfSemiOctets));
+	TInt ret(KErrNone);
+
+	ret = ReadAddressFromAscii(aAscii,aAddress);
+	
+	if(ret==KErrNone)
+		{
+		// Delete address from aAscii (using Address-length at start of string)
+		TLex8 lex(aAscii.Mid(0,2));
+		TUint val;
+		ret=lex.Val(val,EHex);
+		if(ret == KErrNone)
+			{
+			// +1 to include 1 octect of Address-Length 
+			val = val+1;		
+			
+			// double value to change from 'octets used' to 'ASCII chars used'
+			val = val*2;
+			
+			aAscii.Delete(0,val);		
+			__ASSERT_DEBUG(aAscii.Length()%2==0,Panic(EATSmsUtilsOddNumberOfSemiOctets));
+			}
+		}
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ReadAddressFromAscii
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt SmsAtUtil::ReadAddressFromAscii(const TDesC8& aAscii,
+		                             RMobilePhone::TMobileAddress& aAddress)
+	{
+	TLex8 lex;
+	TInt ret;
+	TUint8 val;
+	
+	// get address length + 1 octet Address Type(91)
+	lex = aAscii.Mid(0,2);
+	ret = lex.Val(val,EHex);
+	if(ret != KErrNone)
+		{
+		return ret;
+		}
+		
+	// we exclude the Address Type as address should not include this 
+	TInt addrLen = val-1;
+
+	// Type-Of-Number (see example above as 9)
+	lex = aAscii.Mid(2,1);
+	ret = lex.Val(val,EHex);
+	if(ret != KErrNone)
+		{
+		return ret;
+		}
+	
+	// Highest bit is not part of Type-Of-Number
+	aAddress.iTypeOfNumber = ConvertTypeOfNumber(val&0x07);	
+
+	// Number-Plan
+	lex = aAscii.Mid(3,1);
+	ret = lex.Val(val,EHex);
+	if(ret != KErrNone)
+		{
+		return ret;
+		}
+	
+	// we got Number-Plan which should be compatiable with Symbian defination
+	aAddress.iNumberPlan = ConvertNumberingPlan(val);
+	
+	// Address (loop for each octet ie. two hex chars from aAscii)
+	aAddress.iTelNumber.Zero();
+	for(TInt i = 0; i < addrLen; ++i)		
+		{
+		// Process semi-octet
+		lex = aAscii.Mid((i*2)+5,1);
+		ret = lex.Val(val,EHex);
+		if(ret != KErrNone)
+			{
+			return ret;
+			}
+		// 0xF is consider a pedding when the address length is odd number, so we do not need to append it to address field
+		if(val < 0xF)
+			aAddress.iTelNumber.Append(ConvertAddressChar(val));
+
+		// Process semi-octet
+		lex = aAscii.Mid((i*2)+4,1);
+		ret = lex.Val(val,EHex);
+		if(ret != KErrNone)
+			{
+			return ret;
+			}
+		
+		// 0xF is consider a pedding when the address length is odd number, so we do not need to append it to address field
+		if(val < 0xF)
+			aAddress.iTelNumber.Append(ConvertAddressChar(val));
+		}
+	return KErrNone;
+	}
+
+// ----------------------------------------------------------------------------------------
+// SmsAtUtil::ReadAndRemoveAddressFromPdu
+// other items were commented in a header
+// ----------------------------------------------------------------------------------------
+void SmsAtUtil::ReadAndRemoveAddressFromPdu(TPtrC8& aPdu, 
+		                                    RMobilePhone::TMobileAddress& aGsmServiceCentre)
+	{
+	const TUint8 KTONBitMask = 0x70;
+	const TUint8 KNPIBitMask = 0x0f;
+	const TUint8 KTONBitShift = 4;
+	const TUint8 KNPIBitShift = 0;
+	_LIT(KInternationalPrefix,"+");
+
+	aGsmServiceCentre.iTypeOfNumber = (RMobilePhone::TMobileTON)0;
+	aGsmServiceCentre.iNumberPlan = (RMobilePhone::TMobileNPI)0;
+	aGsmServiceCentre.iTelNumber.Zero();
+	
+	TUint8 len = aPdu[0];
+	
+	if(len == 0)
+		{
+		// A zero length SCA has been prepended - just strip this first byte off
+		aPdu.Set(aPdu.Mid(len+1));
+		return;
+		}
+
+	TUint8 numDes = aPdu[1];
+	aGsmServiceCentre.iTypeOfNumber = (RMobilePhone::TMobileTON)((numDes&KTONBitMask)>>KTONBitShift);
+	aGsmServiceCentre.iNumberPlan = (RMobilePhone::TMobileNPI)((numDes&KNPIBitMask)>>KNPIBitShift);
+
+	if(aGsmServiceCentre.iTypeOfNumber == RMobilePhone::EInternationalNumber)
+		aGsmServiceCentre.iTelNumber.Append(KInternationalPrefix);
+
+	TInt i;
+	TUint16 digit;
+	for(i = 2;i<(len+1);i++)
+		{
+		digit = (TUint16)((aPdu[i]&0x0f) + 0x30);
+		aGsmServiceCentre.iTelNumber.Append(digit);
+		digit = (TUint16)(((aPdu[i]&0xf0)>>4) + 0x30);
+		if(digit == 0x003f)		// 'F' is the padding digit at the end of a number
+			break;
+		aGsmServiceCentre.iTelNumber.Append(digit);
+		}
+	aPdu.Set(aPdu.Mid(len + 1));
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::IsAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool SmsAtUtil::IsAddressChar(TChar aChar)
+ 	{
+	if(aChar.IsDigit())
+		{
+		return ETrue;
+		}
+	if(aChar == TChar('*') ||
+	   aChar == TChar('#') ||
+	   aChar == TChar('a') ||
+	   aChar == TChar('b') ||
+	   aChar == TChar('c'))
+		{
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertNumberingPlan
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobileNPI SmsAtUtil::ConvertNumberingPlan(TInt aValue)
+	{
+	switch(aValue)
+		{
+		// The below 'magic numbers' come from the ETSI 03.40
+		// specification for Address Fields (section 9.1.2.5)
+	case 1:
+		return RMobilePhone::EIsdnNumberPlan;
+	case 3:
+		return RMobilePhone::EDataNumberPlan;
+	case 4:
+		return RMobilePhone::ETelexNumberPlan;
+	case 8:
+		return RMobilePhone::ENationalNumberPlan;
+	case 9:
+		return RMobilePhone::EPrivateNumberPlan;
+	default:
+		return RMobilePhone::EUnknownNumberingPlan;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertTypeOfNumber
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobileTON SmsAtUtil::ConvertTypeOfNumber(TInt aValue) 
+	{
+	switch(aValue)
+		{
+		// The below 'magic numbers' come from the ETSI 03.40
+		// specification for Address Fields (section 9.1.2.5)
+	case 0:		
+		return RMobilePhone::EUnknownNumber;
+	case 1:		
+		return RMobilePhone::EInternationalNumber;
+	case 2:
+		return RMobilePhone::ENationalNumber;
+	case 3:
+		return RMobilePhone::ENetworkSpecificNumber;
+	case 4:
+		return RMobilePhone::ESubscriberNumber;
+	default:
+		return RMobilePhone::EUnknownNumber;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::AppendOctet
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void SmsAtUtil::AppendOctet(TInt aOctet,TDes8& aAscii)
+	{
+	// Ensure client has only passed us a octet (ie. low 8 bits only)
+	aOctet = aOctet&0xff;
+	// Append octet 
+	// (prefix '0' if the octets value only uses one digit as final 
+    //  octet coding must use two digits)
+	if(aOctet <= 0x0f)
+		{
+		aAscii.Append(TChar('0'));
+		}
+	
+	aAscii.AppendNum(aOctet,EHex);
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt SmsAtUtil::ConvertAddressChar(TChar aChar)
+ 	{
+	aChar.LowerCase();
+	if(aChar-TChar('0') <= 9)
+		{
+		// it should be digital number from 0~9
+		return aChar-TChar('0');
+		}
+	else if(aChar == TChar('*'))
+		{
+		return 10;
+		}
+	else if(aChar == TChar('#'))
+		{
+		return 11;
+		}
+	else if(aChar == TChar('a'))
+		{
+		return 12;
+		}
+	else if(aChar == TChar('b'))
+		{
+		return 13;
+		}
+	else if(aChar == TChar('c'))
+		{
+		return 14;
+		}
+	return 15;
+	}	
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TChar SmsAtUtil::ConvertAddressChar(TInt aBinary)
+	{
+	if(aBinary >= 0 && aBinary <= 9)
+		{
+		return aBinary + TChar('0');  	// Assumes digit characters are one after each other
+		}
+	else if(aBinary == 10)
+		{
+		return TChar('*');
+		}
+	else if(aBinary == 11)
+		{
+		return TChar('#');
+		}
+	else if(aBinary == 12)
+		{
+		return TChar('a');
+		}
+	else if(aBinary == 13)
+		{
+		return TChar('b');
+		}
+	else if(aBinary == 14)
+		{
+		return TChar('c');
+		}
+	return TChar(0);		// This is the cloest I can find to a NULL char 
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/bwins/licenseeskeletontsyu.def	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,3 @@
+EXPORTS
+	?LTsyFactoryL@@YAPAVMLtsyFactoryBase@@XZ @ 1 NONAME ; class MLtsyFactoryBase * LTsyFactoryL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/bwins/stltsyu.def	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,3 @@
+EXPORTS
+	?LTsyFactoryL@@YAPAVMLtsyFactoryBase@@XZ @ 1 NONAME ; class MLtsyFactoryBase * LTsyFactoryL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/inc/commengine.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,305 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file commengine.h
+// This contains CCommEngine which manage access to serial port.
+// 
+
+#ifndef __CCOMMENGINE_H__
+#define __CCOMMENGINE_H__
+
+// system include
+#include <c32comm.h>
+#include <callbacktimer.h>
+
+// use include
+#include "mcommobserver.h"
+#include "globalphonemanager.h"
+
+// const defination
+const TInt KCommRxBufSize = 200;
+
+//Class forward
+class CCommWriter;
+class CCommReader;
+class CStringParser;
+
+/**
+ * The class provide the functionalities to access the serials port, write and read to or from
+ * serial port. It also provide the function to find one line of string and notify its observer. 
+ * 
+ */
+class CCommEngine : public CBase,
+					public MTimerObserver
+
+	{
+	friend class CCommWriter;
+	friend class CCommReader;
+public:
+	/**
+	 * Factory function
+	 * 
+	 * @param aBufferSize
+	 * @param aReadPriority
+	 * @param aWritePriority
+	 * @param aPortAccess
+	 */
+	static CCommEngine* NewL(TInt aBufferSize, 
+						TInt aReadPriority, 
+						TInt aWritePriority, 
+						TPortAccess& aPortAccess);
+	
+	/**
+	 * Factory function
+	 * 
+	 * @param aBufferSize
+	 * @param aReadPriority
+	 * @param aWritePriority
+	 * @param aPortAccess
+	 */
+	static CCommEngine* NewLC(TInt aBufferSize, 
+						TInt aReadPriority, 
+						TInt aWritePriority, 
+						TPortAccess& aPortAccess);
+	
+	/**
+	 * Destructor
+	 * 
+	 */
+	virtual ~CCommEngine();
+	
+public:
+	/**
+	 * Configure the serial port
+	 * 
+	 */
+	TInt ConfigurePort(TCommConfig aConfiguration);
+	
+	/**
+	 * Open the serial port
+	 * 
+	 * @param aDll
+	 * @param aName
+	 * @param aAccess
+	 */
+	TInt CommOpen(const TDesC& aDll, const TDesC& aName, TCommAccess aAccess);
+	
+	/**
+	 * Close the serial port
+	 * 
+	 */
+	void CommClose();
+	
+	/**
+	 * Cancel comm serail IO opeation
+	 * 
+	 */
+	void CommCancel();
+	
+	/**
+	 * Start serail IO writing
+	 * 
+	 */
+	void CommWrite(const TDesC8& aDes);
+	
+	/**
+	 * Serial port writing is ready
+	 * 
+	 */
+	void CommWriteReady();
+	
+	/**
+	 * Cancel serial writing
+	 * 
+	 */
+	void CommWriteCancel();
+	
+	/**
+	 * Start serail IO reading
+	 * 
+	 */
+	void CommRead();
+	
+	/**
+	 * Start to read
+	 * 
+	 */
+	void Read();
+	
+	/**
+	 * The read will return whatever the data have been received
+	 * 
+	 */
+	void CommReadOneOrMore();
+	
+	/**
+	 * Cancel reading
+	 */
+	void CommReadCancel();
+	
+	/**
+	 * Disconnect it from modem
+	 */
+	void Disconnect();
+	
+	/**
+	 * Drop the DTR
+	 */
+	void DropDtr();
+	
+	/**
+	 * Raise the DTR-- Data Terminal Ready
+	 */
+	void RaiseDTR();
+	
+	/**
+	 * Drop the RTS signal-- Request to send
+	 */
+	void DropRTS();
+	
+	/**
+	 * Raise the RTS signal
+	 */
+	void RaiseRTS();
+	
+	/**
+	 * Clean all the buffers
+	 */
+	void ResetBuffers();
+	
+	/**
+	 * Get the singnals
+	 */
+	TUint Signals();
+	
+	/**
+	 * Start the timer
+	 */
+	void StartTimer(TInt aSecond);
+	
+	/**
+	 * Stop the timer
+	 */
+	void StopTimer();
+	
+	/**
+	 * Reset all the buffers
+	 */
+	void ResetReadAndWriteBuffers();
+	
+	/**
+	 * Get the port shutdown timeout
+	 */
+	TInt GetPortShutdownTimeout();
+	
+	/**
+	 * Set the port shut down timeout
+	 */
+	TInt SetPortShutdownTimeout(TInt aTimeout);
+	
+	/**
+	 * Get the string parser
+	 */
+	CStringParser* GetStringParse() const;
+public:
+    /**
+     * Set the notifier for get the notificaiton when one line of string was found
+     */
+	void SetCommReadLineNotify(MCommReadLineNotifier *aReadLineNotify);
+	
+	/**
+	 * Set the comm engine observer
+	 */
+	void SetCommEngineObserver(MCommEngineObserver *aEngineObserver);
+public:
+ 	/**
+ 	 * Handle read complete event
+ 	 */
+	virtual void CommReadComplete(TInt aStatus);
+	
+	/**
+	 * Handle write complete event
+	 */
+	virtual void CommWriteComplete(TInt aStatus);
+protected:
+    /**
+     * Constructor
+     */
+	CCommEngine(TPortAccess& aPortAccess);
+	
+	/**
+	 * 2nd constructor
+	 */
+	void ConstructL(TInt aBufferSize, TInt aReadPriority, TInt aWritePriority);	
+private:
+	/**
+	 * From MTimerObserver
+	 */
+    virtual void TimerRun(TInt aError);  
+    
+    /**
+     * Get the size of received buffer
+     */
+    TInt GetSizeOfRxBuffer();
+private:
+	/**
+	 * The comm server reference
+	 */
+	RCommServ iCommServer;
+	
+	/**
+	 * The comm port object
+	 */
+	RComm iCommPort;	
+	
+	/**
+	 * The active object for reading data from Baseband
+	 */
+	CCommReader *iCommReader;
+	
+	/**
+	 * The active object for writing AT command
+	 */
+	CCommWriter *iCommWriter;
+	
+	/**
+	 * The string parser
+	 */
+	CStringParser *iStringParse;
+	
+	/**
+	 * The engine observer
+	 */
+	MCommEngineObserver *iEngineObserver;
+	
+	/**
+	 * The received data
+	 */
+	TBuf8<KCommRxBufSize> iRxBuf;
+	
+	/**
+	 * The port specification
+	 */
+	TPortAccess& iPortAccess;
+    
+	/**
+	 * The timer active object. Used to record the time after a writing request is triggered.
+	 */
+	CCallbackTimer* iCallbackTimer;	
+	
+	/**
+	 * Check if the comm has been canceled.
+	 */	
+	TBool iCommCancel;
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/inc/commreader.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,41 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CCommReader.
+// 
+
+#ifndef __COMMREADER_H__
+#define __COMMREADER_H__
+
+#include <e32base.h>
+
+class MCommObserver;
+class CCommEngine;
+
+class CCommReader : public CActive
+	{
+public:
+	CCommReader(CCommEngine* aComm, TInt aPriority);
+	virtual ~CCommReader();
+	void Activate();
+	TRequestStatus& StatusRef();
+protected:
+	virtual void RunL();
+	virtual void DoCancel();
+private:
+	CCommEngine* iComm; //Not owned
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/inc/commwriter.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,38 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CCommWriter.
+// 
+
+#ifndef __COMMWRITER_H__
+#define __COMMWRITER_H__
+
+#include<e32base.h>
+class MCommObserver;
+class CCommEngine;
+
+class CCommWriter : public CActive
+	{
+public:
+	CCommWriter(CCommEngine* aComm, TInt aPriority);
+	virtual ~CCommWriter();
+	void Activate();
+	TRequestStatus& StatusRef();
+protected:
+	virtual void RunL();
+	virtual void DoCancel();
+private:
+	CCommEngine* iComm; //Not owned
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/inc/mcommobserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// MCommEngineObserve & MCommReadLineNotifier
+// 
+
+#ifndef __MCOMMOBSERVER_H__
+#define __MCOMMOBSERVER_H__
+
+//symtem include
+
+//user include 
+#include "ltsycommondefine.h"
+
+/**
+ * Define the engine's observer
+ * 
+ */
+class MCommEngineObserver
+	{
+public:
+	/**
+	 * Notify the observer if any event happens
+	 * 
+	 */
+	virtual void ReadOrWriteComplete(TAtEventSource aEvent, TInt aStatus) = 0;
+	};
+
+/**
+ * Define the notifer of one line string which has been found
+ * 
+ */
+class MCommReadLineNotifier
+	{
+public:
+	/**
+	 * Notify one line of string was found
+	 */
+	virtual TBool NotifyOneLineFoundL(TInt aStatus, const TDesC8& aLineBuf)=0;
+	};	
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/inc/stringparser.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,81 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CStringParser
+
+#ifndef STRINGPARSER_H_
+#define STRINGPARSER_H_
+
+//system include
+#include <e32base.h>
+
+//user include
+#include "mcommobserver.h"
+
+
+class CStringParser : public CBase
+	{
+public:
+	static CStringParser* NewL(TInt aBufferSize);
+	
+	static CStringParser* NewLC(TInt aBufferSize);
+	
+	virtual ~CStringParser();
+	
+public:
+	void ProcessReadString(const TDesC8& aReadString);
+	
+	TPtrC8 Buffer() const;
+	
+	TPtrC8 CurrentLine() const;
+	
+	void ClearBuffer();
+	
+	void ClearCurrentLine();
+	
+	//Must be call this function
+	void SetReadLineNotify(MCommReadLineNotifier* aNofity);
+	
+protected:
+	
+	CStringParser();
+	
+	void ConstructL(TInt aBufferSize);
+	
+	void CreateL(TInt aBufferSize);
+	
+private:
+	TText8 *iBuffer;
+	TText8 *iBufferEnd;
+	/**
+	* The last char added in the current line
+	*/
+	TText8 *iLastChar;
+	
+	/**
+	* The start of \r\n delimited line
+	*/
+	TText8 *iLineStart;
+	
+	/**
+	* Means if current char is a delimiter
+	*/
+	TBool iInDelimiter;
+	
+	/**
+	*
+	*/
+	MCommReadLineNotifier *iReadLineNotify; //Not owned
+	};
+
+#endif /*STRINGPARSER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/src/commengine.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,581 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file commengine.cpp
+// This contains CCommEngine which manage access to serial port.
+// 
+
+// user include
+#include "globalphonemanager.h"
+#include "commengine.h"
+#include "mslogger.h"
+#include "commreader.h"
+#include "commwriter.h"
+#include "mcommobserver.h"
+#include "stringparser.h"
+
+// const define
+const TInt KLtsyOneSecondPause = 1000000;
+
+// ---------------------------------------------------------------------------
+// CCommEngine::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CCommEngine* CCommEngine::NewL(TInt aBufferSize, 
+					           TInt aReadPriority, 
+					           TInt aWritePriority, 
+					           TPortAccess& aPortAccess)
+	{
+	CCommEngine *self = CCommEngine::NewLC(aBufferSize, 
+										   aReadPriority, 
+										   aWritePriority, 
+										   aPortAccess);
+	CleanupStack::Pop(self);
+	
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CCommEngine* CCommEngine::NewLC(TInt aBufferSize, 
+							    TInt aReadPriority, 
+							    TInt aWritePriority, 
+							    TPortAccess& aPortAccess)
+	{
+	CCommEngine* self = new (ELeave) CCommEngine(aPortAccess);
+	CleanupStack::PushL(self);
+	
+	self->ConstructL(aBufferSize, aReadPriority, aWritePriority);
+	
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::~CCommEngine
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CCommEngine::~CCommEngine()
+	{
+    delete iCommReader;
+	delete iCommWriter;
+	delete iStringParse;
+	delete iCallbackTimer;
+	iCommPort.Close();
+	iCommServer.Close();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CCommEngine
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CCommEngine::CCommEngine(TPortAccess& aPortAccess) 
+						:iPortAccess(aPortAccess)
+	{
+	iCommReader = NULL;
+	iCommWriter = NULL;
+	iEngineObserver = NULL;
+	iStringParse = NULL;
+	iCommCancel = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::ConstructL(TInt aBufferSize, TInt aReadPriority, TInt aWritePriority)
+	{
+	iCommReader = new (ELeave) CCommReader(this, aReadPriority);
+	iCommWriter = new (ELeave) CCommWriter(this, aWritePriority);	
+	iStringParse = CStringParser::NewL(aBufferSize);
+	iCallbackTimer = CCallbackTimer::NewL(*this);
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::ConfigurePort
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CCommEngine::ConfigurePort(TCommConfig aConfiguration)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::ConfigurePort()"));
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		TInt ret;
+		TCommConfig cbuf;
+		TCommConfigV01 &cfg = cbuf();
+		
+		// Get the Configuration from current serial com port
+		iCommPort.Config(cbuf);
+	    
+		// set the configuration according to passed config data
+		TCommConfigV01 &newCfg = aConfiguration();
+		cfg.iRate = newCfg.iRate;
+		cfg.iDataBits = newCfg.iDataBits;
+		cfg.iStopBits = newCfg.iStopBits;
+		cfg.iParity = newCfg.iParity;
+		cfg.iHandshake = newCfg.iHandshake;
+		
+		// Set the Configuration
+		ret = iCommPort.SetConfig(cbuf);
+		if(ret != KErrNone)
+			{
+			LOGTEXT2(_L8("[Ltsy] CCommEngine:\tError %d configuring port"),ret);
+			return ret;
+			}
+		}
+	return KErrNone;	
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::Disconnect
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::Disconnect()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::Disconnect()"));
+	
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		TCommConfig cbuf;
+		TCommConfigV01 &cfg = cbuf();
+		iCommPort.Config(cbuf);
+		cfg.iHandshake = KConfigFreeRTS	| KConfigFreeDTR;
+		TInt ret = iCommPort.SetConfig(cbuf);
+		if (ret == KErrNone)
+			{
+			iCommPort.SetSignalsToSpace(KSignalRTS | KSignalDTR);
+			}
+		}
+	
+	CommClose();
+	
+	iPortAccess = EPortAccessDenied;	
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::Read
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::Read()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::Read()"));
+	iCommCancel = EFalse;
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		CommReadOneOrMore();
+		}
+	else
+		{
+		LOGTEXT(_L8("[Ltsy] Port Not Allow Access"));
+		}	
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::DropDtr
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::DropDtr()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::DropDtr()"));
+	
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		LOGTEXT(_L8("[Ltsy] CCommEngine::DropDtr Dropping DTR"));
+		
+		iCommPort.SetSignals(0,KSignalDTR);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::RaiseDTR
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::RaiseDTR()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::RaiseDTR()"));
+	
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		LOGTEXT(_L8("[Ltsy] CCommEngine::RaiseDTR Raising DTR"));
+		
+		iCommPort.SetSignals(KSignalDTR,0);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::DropRTS
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::DropRTS()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::DropRTS()"));
+	
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		LOGTEXT(_L8("[Ltsy] Dropping RTS"));
+		
+		iCommPort.SetSignals(0,KSignalRTS);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::RaiseRTS
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::RaiseRTS()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::RaiseRTS()"));
+	
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		LOGTEXT(_L8("[Ltsy] Raising RTS"));
+		
+		iCommPort.SetSignals(KSignalRTS,0);
+		}
+	}
+// ---------------------------------------------------------------------------
+// CCommEngine::ResetBuffers
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::ResetBuffers()
+	{
+	iCommPort.ResetBuffers();
+	}
+// ---------------------------------------------------------------------------
+// CCommEngine::Signals
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TUint CCommEngine::Signals()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::Signals()"));
+	
+	return iCommPort.Signals();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::ResetReadAndWriteBuffers
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::ResetReadAndWriteBuffers()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::ResetReadAndWriteBuffers()"));
+	
+	iCommPort.ResetBuffers();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::GetSizeOfRxBuffer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CCommEngine::GetSizeOfRxBuffer()
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::GetSizeOfRxBuffer()"));
+	
+	return iCommPort.QueryReceiveBuffer();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::GetPortShutdownTimeout
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CCommEngine::GetPortShutdownTimeout()
+	{
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		TCommConfig2 cbuf;
+		TCommConfigV02& cfg = cbuf();
+		// Get the Configuration
+		iCommPort.Config(cbuf);				
+
+		return (cfg.iTxShutdownTimeout);
+		}
+	else
+		{
+		return (0);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::SetPortShutdownTimeout
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CCommEngine::SetPortShutdownTimeout(TInt aTimeout)
+	{
+	if (iPortAccess == EPortAccessAllowed)
+		{
+		TCommConfig2 cbuf;
+		TCommConfigV02 &cfg = cbuf();
+		
+		//Get the Configuration
+		iCommPort.Config(cbuf);
+	
+		//Set the Configuration
+		cfg.iTxShutdownTimeout = aTimeout;
+		return (iCommPort.SetConfig(cbuf));
+		}
+	else
+		{
+		return KErrAccessDenied;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommOpen
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CCommEngine::CommOpen(const TDesC& aDll, const TDesC& aName, TCommAccess aMode)
+	{
+	TInt err;
+	if (err = iCommServer.Connect(), err!=KErrNone)
+		return err;
+		
+	// load serial comm module
+	if (aDll.Length()>0)
+		{
+		if (err = iCommServer.LoadCommModule(aDll), err!=KErrNone)
+			{
+			iCommServer.Close();
+			return err;
+			}
+		}
+	
+	// start to open the serial com with ECommShared model
+	if (aMode==ECommShared)
+		{
+		if (err = iCommPort.Open(iCommServer, aName, aMode), err!=KErrNone)
+			{
+			iCommServer.Close();
+			return err;
+			}
+		}
+		
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommClose
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommClose()
+	{
+	iCommReader->Cancel();
+	iCommWriter->Cancel();
+	iCommPort.Close();
+	iCommServer.Close();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommWrite
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommWrite(const TDesC8& aDes)
+	{
+    LOGTEXT(_L8("[Ltsy] Starting CCommEngine::CommWrite()"));
+    LOGTEXTREL2(_L8("Tx:\t%S"),&aDes);
+    
+	iCommPort.Write(iCommWriter->StatusRef(), aDes);
+	iCommWriter->Activate();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommRead
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommRead()
+	{
+	iCommPort.Read(iCommReader->StatusRef(), iRxBuf, iRxBuf.Length());
+	iCommReader->Activate();
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommReadOneOrMore
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommReadOneOrMore()
+	{
+	if(!iCommCancel)
+		{
+		iCommPort.ReadOneOrMore(iCommReader->StatusRef(), iRxBuf);
+		iCommReader->Activate();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommCancel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommCancel()
+	{
+	iCommCancel = ETrue;
+	if(iCallbackTimer->IsActive())
+	    {
+		iCallbackTimer->Cancel();
+		}
+		
+	if (NULL != iCommWriter)
+		{
+		iCommWriter->Cancel();
+		}
+	
+	if (NULL != iCommReader)
+		{
+		iCommReader->Cancel();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommWriteCancel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommWriteCancel()
+	{
+	if(iCallbackTimer->IsActive())
+	    {
+		iCallbackTimer->Cancel();
+		}
+		
+	if (NULL != iCommWriter)
+		{
+		iCommWriter->Cancel();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommReadCancel
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommReadCancel()
+	{
+	if(iCallbackTimer->IsActive())
+	    {
+		iCallbackTimer->Cancel();
+		}
+		
+	if (NULL != iCommReader)
+		{
+		iCommReader->Cancel();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommReadComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommReadComplete(TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::CommReadComplete()"));
+	LOGTEXT2(_L8("[Ltsy] aStatus = %d"), aStatus);
+	LOGTEXT2(_L8("Received %d"),iRxBuf.Length());
+	LOGTEXTREL2(_L8("Rx:\t%S"),&iRxBuf);
+		
+	if (KErrNone == aStatus)
+		{
+		if (NULL != iStringParse)
+			{
+			iStringParse->ProcessReadString(iRxBuf);
+			}
+			
+		CommReadOneOrMore();	
+		}
+	else
+		{
+		if (NULL != iEngineObserver)
+			{
+			iEngineObserver->ReadOrWriteComplete(EReadCompletion, aStatus);
+			}
+		}
+	LOGTEXT(_L8("[Ltsy] End CCommEngine::CommReadComplete()"));
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::CommWriteComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::CommWriteComplete(TInt aStatus)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CCommEngine::CommWriteComplete()"));
+	LOGTEXT2(_L8("[Ltsy] aStatus = %d"), aStatus);
+	if(iCallbackTimer->IsActive())
+	    {
+		iCallbackTimer->Cancel();
+		}
+		
+	if (NULL != iEngineObserver)
+		{
+		iEngineObserver->ReadOrWriteComplete(EWriteCompletion, aStatus);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::GetStringParse
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CStringParser* CCommEngine::GetStringParse() const
+	{
+	return iStringParse;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::SetCommReadLineNotify
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::SetCommReadLineNotify(MCommReadLineNotifier *aReadLineNotify)
+	{
+	iStringParse->SetReadLineNotify(aReadLineNotify);
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::SetCommEngineObserver
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::SetCommEngineObserver(MCommEngineObserver *aEngineObserver)
+	{
+	iEngineObserver = aEngineObserver;
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::TimerRun
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::TimerRun(TInt aError)
+    {
+	if(aError == KErrNone)
+	    {
+		iEngineObserver->ReadOrWriteComplete(ETimeoutCompletion, KErrTimedOut);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::StartTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::StartTimer(TInt aSeconds)
+    {
+    if (iCallbackTimer->IsActive())
+    	{
+    	iCallbackTimer->Cancel();
+    	}
+	iCallbackTimer->After(aSeconds*KLtsyOneSecondPause);
+	}
+
+// ---------------------------------------------------------------------------
+// CCommEngine::StopTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CCommEngine::StopTimer()	
+    {
+	iCallbackTimer->Cancel();
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/src/commreader.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,55 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CCommReader.
+// 
+
+//user include
+#include "commreader.h"
+#include "mcommobserver.h"
+#include "commengine.h"
+
+//Class CCommReader
+
+CCommReader::CCommReader(CCommEngine* aComm, TInt aPriority)
+	: CActive(aPriority), iComm(aComm)
+	{
+	CActiveScheduler::Add(this);
+	}
+	
+CCommReader::~CCommReader()
+	{
+	Cancel();
+	}
+
+void CCommReader::RunL()
+	{
+	iComm->CommReadComplete(iStatus.Int());
+	}
+
+void CCommReader::DoCancel()
+	{
+	iComm->iCommPort.ReadCancel();
+	}
+
+void CCommReader::Activate()
+	{
+	SetActive();
+	}
+
+TRequestStatus& CCommReader::StatusRef()
+	{ 
+	return iStatus; 
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/src/commwriter.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,55 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CCommWriter.
+// 
+
+//user include
+#include "commwriter.h"
+#include "mcommobserver.h"
+#include "commengine.h"
+
+// CCommWriter
+
+CCommWriter::CCommWriter(CCommEngine* aComm, TInt aPriority)
+	: CActive(aPriority), iComm(aComm)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CCommWriter::~CCommWriter()
+	{
+	Cancel();
+	}
+
+void CCommWriter::RunL()
+	{
+	iComm->CommWriteComplete(iStatus.Int());
+	}
+
+void CCommWriter::DoCancel()
+	{
+	iComm->iCommPort.WriteCancel();
+	}
+
+void CCommWriter::Activate() 
+	{ 
+	SetActive(); 
+	}
+
+TRequestStatus& CCommWriter::StatusRef() 
+	{ 
+	return iStatus; 
+	}
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/comms/src/stringparser.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,152 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CStringParser.
+// 
+
+//user include
+#include "stringparser.h"
+#include "mslogger.h"
+
+CStringParser* CStringParser::NewL(TInt aBufferSize)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewL()"));
+	
+	CStringParser* self = CStringParser::NewLC(aBufferSize);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CStringParser* CStringParser::NewLC(TInt aBufferSize)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewLC()"));
+	
+	CStringParser* self = new (ELeave) CStringParser;
+	CleanupStack::PushL(self);
+	self->ConstructL(aBufferSize);
+	return self;
+	}
+
+CStringParser::~CStringParser()
+	{
+	User::Free(iBuffer);
+	}
+
+CStringParser::CStringParser()
+	{
+	}
+
+void CStringParser::ConstructL(TInt aBufferSize)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CStringParser::ConstructL()"));
+	CreateL(aBufferSize);
+	}
+
+TPtrC8 CStringParser::Buffer() const
+	{
+	return TPtrC8(iBuffer, iLastChar-iBuffer);
+	}
+
+TPtrC8 CStringParser::CurrentLine() const
+	{
+	TInt len=iLastChar-iLineStart;
+	if (len>0 && iInDelimiter)
+		len-=1;
+	return TPtrC8(iLineStart, len);	
+	}
+
+void CStringParser::ClearBuffer()
+	{
+	iLastChar = iBuffer;
+	iLineStart = iBuffer;
+	iInDelimiter = ETrue;	
+	}
+
+//
+// Remove current line, which is always at the end of the buffer
+//
+void CStringParser::ClearCurrentLine()
+	{
+	iLastChar = iLineStart;
+	iInDelimiter = ETrue;	
+	}
+
+void CStringParser::CreateL(TInt aBufSize)
+	{
+	iBuffer = (TText8*)User::AllocL(aBufSize);
+	iBufferEnd = (iBuffer+aBufSize)-1;
+	ClearBuffer();
+	}
+
+
+void CStringParser::SetReadLineNotify(MCommReadLineNotifier* aNofity)
+	{
+	iReadLineNotify = aNofity;
+	}
+
+
+void CStringParser::ProcessReadString(const TDesC8& aReadString)
+	{
+	LOGTEXT(_L8("[Ltsy] Starting CStringParse::ProcessReadString()"));
+	LOGTEXT2(_L8("[Ltsy] Read String = %S"), &aReadString);
+	for (TInt nBufferOffset = 0; nBufferOffset < aReadString.Length(); nBufferOffset++)
+		{
+		TText8 tChar = aReadString[nBufferOffset];
+		
+		// we have already found a char which is a delimiter of the Line
+        // so would dismiss any of delimiter following this one already found		
+		if (iInDelimiter && (tChar == '\r' || tChar == '\n'))
+			{
+			continue;
+			}
+		
+		// move on lastchar
+		*iLastChar++ = tChar;
+		// Diacarding characters if our buffer was overflowed
+		if (iLastChar >= iBufferEnd)
+			{
+			iLastChar = iBufferEnd;
+			}
+        // we anyway to find out the delimiter and notify the obser the line was found 		
+		if (tChar == '\r' || tChar == '\n')
+			{
+			iInDelimiter = ETrue;
+			TPtrC8 tLine(CurrentLine());
+			LOGTEXT2(_L8("[Ltsy] Line Content = %S"), &tLine);
+			TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
+			if (err != KErrNone)
+				{
+				ClearCurrentLine();
+				}
+			}
+		else
+			{
+			if(iInDelimiter) // the last char is a delimiter
+			    {
+				iInDelimiter=EFalse;
+			    iLineStart=iLastChar-1;	
+			    if(tChar == '>')
+			    	{
+			    	TPtrC8 tLine(CurrentLine());
+			    	TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
+					if (err != KErrNone)
+						{
+						ClearCurrentLine();
+						}			    	
+			    	}
+				}   
+			}
+		}
+	LOGTEXT(_L8("[Ltsy] End CStringParse::ProcessReadString()"));
+	}
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/data/snap.cfg	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,721 @@
+############################################################
+## AUTO-GENERATED CONFIGURATION FILE
+## CommsDat Database Dump Utility
+## 1.1
+############################################################
+
+############################################################
+## Network
+## 
+[Network]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=Intranet
+	FIELD_COUNT=2
+END_ADD
+
+
+############################################################
+## ModemBearer
+## 
+[ModemBearer]
+ADD_TEMPLATE
+	Id=0
+	Name=Default Modem
+	TSYName=phonetsywithdispatcher
+	CSYName=ECUART
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=6
+	LastSocketClosedTimeout=100
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=0
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOff=Q0
+	QuietOn=Q1
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageValidityPeriod=0
+	MessageDeliveryReport=FALSE
+	CommRole=0
+	Agent=NULLAGT
+	BCAStack=C32Bca
+	FIELD_COUNT=66
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=Wavecom Modem
+	IfName=PPP
+	PortName=COMM::0
+	CSYName=ECUART
+	FIELD_COUNT=5
+END_ADD
+
+
+############################################################
+## Location
+## 
+[Location]
+ADD_TEMPLATE
+	Id=0
+	Name=Default Location
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=9
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=Office
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=171
+	DialOutCode=9,
+	Mobile=FALSE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=Mobile
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## GlobalSettings
+## 
+[GlobalSettings]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=DefaultRecordName-1
+	ConnectionAttempts=2
+	RedialAttempts=3
+	SmsReceiveMode=2
+	GPRSAttachMode=1
+	AcceptIncomingGprs=1
+	GPRSClassCBearer=GSM
+	ModemForDataAndFax=1
+	ModemForPhoneServicesAndSMS=1
+	LocationForDataAndFax=3
+	LocationForPhoneServicesAndSMS=3
+	MaxMBufHeap=3
+	DefaultNetwork=1
+	DefaultTier=2048
+	BearerAvailabilityCheckTSY=phonetsywithdispatcher
+	FIELD_COUNT=16
+END_ADD
+
+
+############################################################
+## OutgoingGPRS
+## 
+[OutgoingGPRS]
+ADD_TEMPLATE
+	Id=0
+	Name=Default Outgoing GPRS
+	APN=cmnet
+	PDPType=IPV4
+	ReqPrecedence=2
+	ReqDelay=4
+	ReqReliability=3
+	ReqPeakThroughput=3
+	ReqMeanThroughput=31
+	MinPrecedence=2
+	MinDelay=4
+	MinReliability=3
+	MinPeakThroughput=3
+	MinMeanThroughput=31
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=0.0.0.0
+	IpNameServer2=0.0.0.0
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	UmtsR99QoSAndOn=1
+	FIELD_COUNT=30
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=SPUD_Echo_1
+	PDPType=IPV4
+	IfParams=lowernif=PPP
+	IfPromptForAuth=FALSE
+	IpAddrFromServer=TRUE
+	IpAddr=0.0.0.0
+	IpDNSAddrFromServer=TRUE
+	FIELD_COUNT=8
+END_ADD
+
+
+############################################################
+## DefaultGPRS
+## 
+[DefaultGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=Dummy Default GPRS Settings
+	Usage=1
+	APN=cmnet
+	PDPType=IPV4
+	PDPAddress=www.wid.com
+	Precedence=1
+	Delay=1
+	Reliability=1
+	PeakThroughput=1
+	MeanThroughput=1
+	MinPrecedence=1
+	MinDelay=1
+	MinReliability=1
+	MinPeakThroughput=1
+	MinMeanThroughput=1
+	DataCompression=TRUE
+	HeaderCompression=TRUE
+	GprsUseEdge=FALSE
+	AnonymousAccess=TRUE
+	FIELD_COUNT=20
+END_ADD
+
+############################################################
+## APPrioritySelectionPolicyTable
+## 
+[APPrioritySelectionPolicyTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=SelectionPolicy1
+	AP1=Link.AccessPointTable.2
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## AccessPointTable
+## 
+[AccessPointTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=Network1
+	Tier=Link.TierTable.2048
+	MCpr=MCprTable.1
+	AccessPointSelectionPolicy=Link.APPrioritySelectionPolicyTable.1
+	Cpr=CprTable.1
+	SCpr=SCprTable.7
+	Protocol=ProtocolTable.1
+	Priority=1
+	FIELD_COUNT=9
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=IPProto1
+	Tier=Link.TierTable.271064560
+	MCpr=MCprTable.2
+	CustomSelectionPolicy=3
+	Cpr=CprTable.2
+	CprConfig=3
+	SCpr=SCprTable.2
+	Protocol=ProtocolTable.2
+	Priority=1
+	FIELD_COUNT=10
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=pppMappedFromIAP3
+	Tier=Link.TierTable.536978267
+	MCpr=MCprTable.10  #pdpmcpr
+	Cpr=CprTable.4  #vallinacpr
+	SCpr=SCprTable.4  #pdpscpr
+	Protocol=ProtocolTable.3   #ppp
+	Priority=1
+	FIELD_COUNT=8
+END_ADD
+
+
+
+############################################################
+## IAP
+## 
+[IAP]
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=Wavecom_GRPS
+	IAPServiceType=OutgoingGPRS
+	IAPService=1
+	IAPBearerType=ModemBearer
+	IAPBearer=1
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=3
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## ConnectionPreferences
+## 
+[ConnectionPreferences]
+ADD_SECTION
+# COMMDB_ID = 110
+	Id=110
+	Name=DefaultRecordName-1
+	Ranking=1
+	Direction=OUTGOING
+	BearerSet=PSD
+	DialogPref=DONOTPROMPT
+	IAP=3
+	FIELD_COUNT=7
+END_ADD
+
+
+############################################################
+## TierTable
+## 
+[TierTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=2048
+    TierImplUid=271064536
+	Name=Tier1
+	TierThreadName=ESock_IP
+	TierManagerName=NetworkTierManager
+	DefaultAccessPoint=Link.AccessPointTable.1
+	PromptUser=0
+	FIELD_COUNT=7
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=271064560
+    TierImplUid=271064560
+	Name=Tier2
+	TierThreadName=ESock_IP
+	TierManagerName=ProtoTierManager
+	DefaultAccessPoint=Link.AccessPointTable.2
+	PromptUser=0
+	FIELD_COUNT=7
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Id=536978267
+    TierImplUid=536978267
+	Name=Tier4
+	TierThreadName=ESock_IP
+	TierManagerName=LinkTierManager
+	DefaultAccessPoint=Link.AccessPointTable.3
+	PromptUser=0
+	FIELD_COUNT=7
+END_ADD
+
+
+############################################################
+## MCprTable
+## 
+[MCprTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=netmcpr
+	MCprUid=271009095
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=ipprotomcpr
+	MCprUid=271064558
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=pppmcpr
+	MCprUid=271064556
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Id=4
+	Name=ethmcpr
+	MCprUid=271064572
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Id=5
+	Name=rawipmcpr
+	MCprUid=271064576
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Id=6
+	Name=tunnelmcpr
+	MCprUid=271064578
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Id=7
+	Name=qospppmcpr
+	MCprUid=271064556
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Id=8
+	Name=dummynifmcpr
+	MCprUid=271064580
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Id=9
+	Name=hungrynifmcpr
+	MCprUid=271064580
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Id=10
+	Name=pdpmcpr
+	MCprUid=271065840
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## CprTable
+## 
+[CprTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=ipcpr
+	CprUid=270561519
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=ipprotocpr
+	CprUid=271064531
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=agentcpr
+	CprUid=271064552
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Id=4
+	Name=vanillacpr
+	CprUid=271065843
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Id=5
+	Name=pdpcpr
+	CprUid=271065826
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## SCprTable
+## 
+[SCprTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=ipscpr
+	SCprUid=270549768
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=ipprotoscpr
+	SCprUid=271064529
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=agentscpr
+	SCprUid=271064554
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Id=4
+	Name=pdpscpr
+	SCprUid=271065824
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Id=5
+	Name=pppscpr
+	SCprUid=271065852
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Id=6
+	Name=vanillascpr
+	SCprUid=271065844
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Id=7
+	Name=qosscpr
+	SCprUid=271065811
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Id=8
+	Name=ipqosprotoscpr
+	SCprUid=271065816
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## ProtocolTable
+## 
+[ProtocolTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Id=1
+	Name=sapshim
+	ProtocolUid=270496898
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Id=2
+	Name=ipshim4
+	ProtocolUid=271064118
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Id=3
+	Name=ppp
+	ProtocolUid=271064143
+	FIELD_COUNT=3
+END_ADD
+
+
+[UmtsR99QoSAndOn]
+ADD_SECTION
+# COMMDB_ID = 1
+  	Name=PRIMARY1
+        ReqTrafficClass=8
+        MinTrafficClass=8
+        ReqDeliveryOrder=1
+        MinDeliveryOrder=1
+        ReqDeliverErroneousSDU=8
+        MinDeliverErroneousSDU=8
+        ReqMaxSDUSize=0
+        MinAcceptableMaxSDUSize=0
+        ReqMaxUplinkRate=0
+        ReqMinUplinkRate=0
+        ReqMaxDownlinkRate=0
+        ReqMinDownlinkRate=0
+        ReqBER=1
+        MaxBER=1
+        ReqSDUErrorRatio=1
+        MaxSDUErrorRatio=1
+        ReqTrafficHandlingPriority=8
+        MinTrafficHandlingPriority=8
+        ReqTransferDelay=0
+        MaxTransferDelay=0
+        ReqGuaranteedUplinkRate=0
+        MinGuaranteedUplinkRat=0
+        ReqGuaranteedDownlinkRate=0
+        MinGuaranteedDownlinkRate=0
+        SignallingIndication=FALSE
+        IMCNSignallingIndication=FALSE
+        SourceStatisticsDescriptor=0
+	FIELD_COUNT=28
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+  	Name=SECONDARY1
+        ReqTrafficClass=4
+        MinTrafficClass=4
+        ReqDeliveryOrder=1
+        MinDeliveryOrder=1
+        ReqDeliverErroneousSDU=8
+        MinDeliverErroneousSDU=8
+        ReqMaxSDUSize=768
+        MinAcceptableMaxSDUSize=512
+        ReqMaxUplinkRate=1024
+        ReqMinUplinkRate=1024
+        ReqMaxDownlinkRate=1024
+        ReqMinDownlinkRate=1024
+        ReqBER=0
+        MaxBER=0
+        ReqSDUErrorRatio=1
+        MaxSDUErrorRatio=1
+        ReqTrafficHandlingPriority=1
+        MinTrafficHandlingPriority=1
+        ReqTransferDelay=250
+        MaxTransferDelay=250
+        ReqGuaranteedUplinkRate=1024
+        MinGuaranteedUplinkRat=1024
+        ReqGuaranteedDownlinkRate=1024
+        MinGuaranteedDownlinkRate=1024
+        SignallingIndication=FALSE
+        IMCNSignallingIndication=FALSE
+        SourceStatisticsDescriptor=0
+	FIELD_COUNT=28
+END_ADD
+
+[PolicySelectorTable]
+ADD_SECTION
+# COMMDB_ID = 1
+  PolicyId=1
+  AppUid=0
+  SrcAddress=0.0.0.0
+  SrcMask=255.255.255.255
+  DstAddress=0.0.0.0
+  DstMask=255.255.255.255
+  SrcPort=0
+  SrcPortMax=1031
+  DstPort=3461
+  DstPortMax=3461
+  ProtocolId=17
+  IapId=2
+  Priority=1
+  FIELD_COUNT=13
+END_ADD  
+
+ADD_SECTION
+# COMMDB_ID = 2
+  PolicyId=2
+  AppUid=0
+  SrcPort=0
+  SrcPortMax=0
+  ProtocolId=1
+  IapId=2
+  Priority=1
+  FIELD_COUNT=7
+END_ADD  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/data/systemtest.cfg	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,2400 @@
+############################################################
+## AUTO-GENERATED CONFIGURATION FILE
+## CommsDat Database Dump Utility
+## 1.0
+############################################################
+
+############################################################
+## Network
+## 
+[Network]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Intranet
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=mRouter
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=Vodafone
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=Orange
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=O2
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=TMobile
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=Airtel
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=Hutch
+	FIELD_COUNT=1
+END_ADD
+
+
+############################################################
+## ModemBearer
+## 
+[ModemBearer]
+ADD_TEMPLATE
+	Name=Default Modem
+	IfName=PPP
+	PortName=COMM::1
+	TSYName=MM
+	CSYName=ECUART
+	LastSocketActivityTimeout=600
+	LastSessionClosedTimeout=600
+	LastSocketClosedTimeout=600
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=0
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	IspInitString=*99***1#
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOff=Q0
+	QuietOn=Q1
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	CommRole=0
+	ControlChannelPortName=COMM::0
+	SIRSettings=0
+	Agent=CSD.agt
+	FIELD_COUNT=71
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=GsmPhone1
+	IfName=PPP
+	PortName=COMM::1
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	ModemInitString=AT
+	MessageCentreNumber=+447973100973
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=CSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=NTRAS (Com0) Null Modem 115200bps
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=NTRAS
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	ModemInitString=AT
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=TRUE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=CSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=NTRAS (Com1) Null Modem 115200bps
+	IfName=PPP
+	PortName=COMM::1
+	TSYName=NTRAS
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	ModemInitString=AT
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=TRUE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=CSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=GsmPhone2
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=phonetsywithdispatcher
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	ModemInitString=AT
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=TRUE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=PSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=SimulatorPhone
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=SIM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=19200
+	Handshaking=196
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	ModemInitString=ATZ
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=CSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=GsmPhone3
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	ModemInitString=ATZ
+	MessageCentreNumber=+447973100973
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=PSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=GsmPhone4
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=DMM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=19200
+	Handshaking=196
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	ModemInitString=ATZ
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	ControlChannelPortName=COMM::0
+	Agent=CSD.agt
+	FIELD_COUNT=20
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Name=mRouterWinsBearer
+	IfName=PPP
+	PortName=WINS::0
+	TSYName=MM
+	CSYName=WINSCSY
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOff=Q0
+	QuietOn=Q1
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	CommRole=0
+	SIRSettings=0
+	Agent=mRouterAgent.agt
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Name=mRouterUsbBearer
+	IfName=PPP
+	PortName=ACM::0
+	TSYName=MM
+	CSYName=ECACM
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOff=Q0
+	QuietOn=Q1
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	CommRole=0
+	SIRSettings=0
+	Agent=mRouterAgent.agt
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 11
+	Name=trpat_psd
+	Agent=trp.agt
+	IfName=rawip
+	PortName=not used
+	BCAStack=C32Bca
+	ControlChannelPortName=COMM::0
+	TSYName=TRPAT
+	CSYName=CSY27010
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+447973100973
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=300
+	LastSessionClosedTimeout=300
+	LastSocketClosedTimeout=300
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=71
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 12
+	Name=trpat_csd
+	Agent=csd.agt
+	IfName=PPP
+	PortName=not used
+	ControlChannelPortName=COMM::0
+	TSYName=TRPAT
+	CSYName=CSY27010
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+447973100973
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=300
+	LastSessionClosedTimeout=300
+	LastSocketClosedTimeout=300
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=70
+END_ADD
+
+
+############################################################
+## LANBearer
+## 
+[LANBearer]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Ethernet 001
+	IfName=ethint
+	LDDFilename=enet
+	LDDName=Ethernet
+	PDDFilename=ethernet
+	PDDName=ethernet.wins
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	Agent=nullagt.agt
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Ethernet 002
+	IfName=ethint
+	LDDName=EtherCard
+	PDDName=EtherWins
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	Agent=nullagt.agt
+	FIELD_COUNT=8
+END_ADD
+
+
+############################################################
+## Location
+## 
+[Location]
+ADD_TEMPLATE
+	Name=Default Location
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=44
+	DialOutCode=44
+	DisableCallWaitingCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Office
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=171
+	DialOutCode=9,
+	DisableCallWaitingCode=9,
+	Mobile=FALSE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=Office Direct Dial
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=171
+	DialOutCode=171
+	DisableCallWaitingCode=171
+	Mobile=FALSE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=Mobile
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=44
+	DialOutCode=44
+	DisableCallWaitingCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=Home
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=181
+	DialOutCode=181
+	DisableCallWaitingCode=181
+	Mobile=FALSE
+	UsePulseDial=TRUE
+	WaitForDialTone=TRUE
+	PauseAfterDialout=0
+	FIELD_COUNT=11
+END_ADD
+
+
+############################################################
+## Chargecard
+## 
+[Chargecard]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Dummy BT Chargecard
+	AccountNumber=144,12345678
+	Pin=0000
+	LocalRule=HG
+	NatRule=HFG
+	IntlRule=HEFG
+	FIELD_COUNT=6
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Dummy Mercury Chargecard
+	AccountNumber=0500800800,,12345678
+	Pin=****
+	LocalRule=HG
+	NatRule=J,K,0FG
+	IntlRule=HEFG
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## GlobalSettings
+## 
+[GlobalSettings]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=DefaultRecordName-1
+	WAPAccessPoint=1
+	ConnectionAttempts=2
+	RedialAttempts=3
+	SmsBearer=1
+	SmsReceiveMode=2
+	GPRSAttachMode=1
+	AcceptIncomingGprs=1
+	GPRSClassCBearer=GSM
+	ModemForDataAndFax=2
+	ModemForPhoneServicesAndSMS=5
+	LocationForDataAndFax=2
+	LocationForPhoneServicesAndSMS=5
+	MaxMBufHeap=2
+	DefaultNetwork=1
+	BearerAvailabilityCheckTSY=phonetsywithdispatcher
+	FIELD_COUNT=16
+END_ADD
+
+
+############################################################
+## DialOutISP
+## 
+[DialOutISP]
+ADD_TEMPLATE
+	Name=Default Dial Out ISP
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=TRUE
+	DisplayPCT=FALSE
+	IfPromptForAuth=TRUE
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=28
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Pipex CSD
+	Description=Pipex Service Provider
+	Type=INTERNETONLY
+	DefaultTelNum=08450885336
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=solabf75
+	IfAuthPass=oodifama
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=FALSE
+	IpNameServer1=158.43.128.1
+	IpNameServer2=158.43.192.1
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=NT RAS
+	Description=Test
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=TRUE
+	LoginScript=CHARMAP \[windows-1252\]\nLOOP 10\n{\nSEND "CLIENT"+<0x0d>\nWAIT 3\n{\n"SERVER" OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip,ip6
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=43
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=WSP Test CSD
+	Description=Symbian WSP Test Server
+	Type=INTERNETANDWAP
+	DefaultTelNum=02071541211
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=wapusr
+	IfAuthPass=train2
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=FALSE
+	IpNameServer1=158.43.128.1
+	IpNameServer2=158.43.192.1
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=Auth CSD
+	Description=Authentication Service Provider
+	Type=INTERNETONLY
+	DefaultTelNum=+358331520777
+	DialResolution=TRUE
+	UseLoginScript=TRUE
+	PromptForLogin=FALSE
+	LoginName=mailtst1
+	LoginPass=mailtest1
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=mailtst1
+	IfAuthPass=mailtest1
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=TRUE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=IP6 Dial Test
+	Description=4th Floor Test Lab
+	Type=INTERNETONLY
+	DefaultTelNum=02071541455
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip,ip6
+	IfPromptForAuth=FALSE
+	IfAuthName=ipv6test
+	IfAuthPass=Symbian
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=FALSE
+	IpNameServer1=192.168.10.2
+	IpNameServer2=192.168.20.2
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=USIM Test NT RAS
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=TRUE
+	LoginScript=CHARMAP \[windows-1252\]\nLOOP 10\n{\nSEND "CLIENT"+<0x0d>\nWAIT 3\n{\n"SERVER" OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=33
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=CityOnlines CSD India
+	Description=CityOnlines Indian Service Provider
+	Type=INTERNETONLY
+	DefaultTelNum=+9180172388
+	DialResolution=TRUE
+	UseLoginScript=TRUE
+	PromptForLogin=FALSE
+	LoginName=ktl1@blr.cityonlines.com
+	LoginPass=1234
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=ktl1
+	IfAuthPass=1234
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=TRUE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Name=Vodafone WAP GSM
+	Description=Vodafone WAP GSM
+	Type=INTERNETANDWAP
+	DefaultTelNum=+447836900808
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=user@vodafone.net
+	IfAuthPass=user
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	BearerProtocol=V110
+	FIELD_COUNT=18
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Name=Orange WAP GSM
+	Description=Orange WAP GSM
+	Type=INTERNETANDWAP
+	DefaultTelNum=+447973100500
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=Orange
+	IfAuthPass=Multimedia
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	BearerProtocol=V110
+	FIELD_COUNT=18
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 11
+	Name=O2 WAP GSM
+	Description=O2 WAP GSM
+	Type=INTERNETANDWAP
+	DefaultTelNum=+447712927927
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=O2wap
+	IfAuthPass=password
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	BearerProtocol=V110
+	FIELD_COUNT=18
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 12
+	Name=Test Network CSD
+	Description=Symbian Test Network
+	Type=INTERNETONLY
+	DefaultTelNum=02071541259
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=Systemtest09
+	IfAuthPass=l33ds
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=43
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 13
+	Name=IP6 Dial Test
+	Description=Symbian Test Network
+	Type=INTERNETONLY
+	DefaultTelNum=02077248525
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip,ip6
+	IfPromptForAuth=FALSE
+	IfAuthName=ipv6test
+	IfAuthPass=Symbian
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=FALSE
+	IpNameServer1=192.168.10.2
+	IpNameServer2=192.168.20.2
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerName=ASYNCHRONOUS
+	BearerSpeed=UNSPECIFIED
+	BearerCE=UNSPECIFIED
+	BearerType=CSD
+	ChannelCoding=UNSPECIFIED
+	Aiur=0
+	RequestedTimeSlots=0
+	MaximumTimeSlots=0
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=45
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 14
+	Name=mRouterDialOutIsp
+	Description=mRouterDialOutIsp
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=IfAuthPass=
+	IfAuthPass=AuthRetries=0
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+
+
+############################################################
+## DialInISP
+## 
+[DialInISP]
+ADD_TEMPLATE
+	Name=Default Dial In ISP
+	UseLoginScript=FALSE
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=9
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Dial In ISP01
+	UseLoginScript=FALSE
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## OutgoingGPRS
+## 
+[OutgoingGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Vodafone GPRS
+	APN=internet
+	PDPType=IPV4
+	ReqPrecedence=0
+	ReqDelay=0
+	ReqReliability=0
+	ReqPeakThroughput=0
+	ReqMeanThroughput=0
+	MinPrecedence=0
+	MinDelay=0
+	MinReliability=0
+	MinPeakThroughput=0
+	MinMeanThroughput=0
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=web
+	IfAuthPass=web
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpAddr=0.0.0.0
+	IpDNSAddrFromServer=TRUE
+	Ip6DNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=33
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Vodafone WAP GPRS
+	APN=wap.vodafone.co.uk
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=wap
+	IfAuthPass=wap
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpAddr=0.0.0.0
+	IpDNSAddrFromServer=TRUE
+	Ip6DNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=33
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=Orange GPRS
+	APN=orangeinternet
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=29
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=Orange WAP GPRS
+	APN=orangewap
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=29
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=O2 GPRS
+	APN=mobile.o2.co.uk
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=web
+	IfAuthPass=password
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=0.0.0.0
+	IpNameServer2=0.0.0.0
+	Ip6DNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=O2 WAP GPRS
+	APN=wap.o2.co.uk
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=o2wap
+	IfAuthPass=o2wap
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=1.2.3.4
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=0.0.0.0
+	IpNameServer2=0.0.0.0
+	Ip6DNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=Hutch GPRS
+	APN=portalnmms
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=8
+	MinDelay=16
+	MinReliability=32
+	MinPeakThroughput=2
+	MinMeanThroughput=2
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfParams=nullagt
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpGateway=10.10.1.100
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=28
+END_ADD
+
+
+############################################################
+## IncomingGPRS
+## 
+[IncomingGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Incoming GPRS Settings PlaceHolder
+	APN=Test
+	PDPType=IPV4
+	PDPAddress=0.0.0.0
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=1
+	MinDelay=1
+	MinReliability=1
+	MinPeakThroughput=1
+	MinMeanThroughput=1
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=1
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=0.0.0.0
+	IpNameServer2=0.0.0.0
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	FIELD_COUNT=29
+END_ADD
+
+
+############################################################
+## DefaultGPRS
+## 
+[DefaultGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Dummy Default GPRS Settings
+	Usage=1
+	APN=Access point name
+	PDPType=IPV6
+	PDPAddress=www.wid.com
+	Precedence=1
+	Delay=150
+	Reliability=1
+	PeakThroughput=1
+	MinReliability=1
+	MinPeakThroughput=1
+	MinMeanThroughput=1
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=TRUE
+	FIELD_COUNT=16
+END_ADD
+
+
+############################################################
+## CDMA2000PacketServiceTable
+## 
+[CDMA2000PacketServiceTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=test name cdma2000
+	IwfName=Test2000
+	ServiceOption=HIGHSPEEDCDMA2000DATA
+	PDPType=IPV4
+	ReqFwdPriority=PRIORITY04
+	ReqRevPriority=PRIORITY04
+	ReqFwdBitrate=32KBPS
+	ReqRevBitrate=32KBPS
+	ReqFwdLoss=LOSS1
+	ReqRevLoss=LOSS1
+	ReqFwdMaxdelay=40MS
+	ReqRevMaxdelay=40MS
+	MinFwdBitrate=32KBPS
+	MinRevBitrate=32KBPS
+	AccptFwdLoss=LOSS2
+	AccptRevLoss=LOSS2
+	AccptFwdMaxdelay=120MS
+	AccptRevMaxdelay=120MS
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=1
+	IpNetMask=0.255.255.255
+	IpGateway=10.0.0.1
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableLCPExtension=TRUE
+	DisablePlainTextAuth=TRUE
+	ApType=2
+	QosWarningTimeout=1000000
+	RlpMode=TRANSPARENT
+	CDMANaiType=0
+	EnableIPHeaderComp=FALSE
+	CDMAMobileIP=FALSE
+	CDMAMobileIPTimeout=10000000
+	FIELD_COUNT=37
+END_ADD
+
+
+############################################################
+## LANService
+## 
+[LANService]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=IP4 DHCP Ethernet
+	IfNetworks=ip
+	IpNetMask=255.255.252.0
+	IpGateway=10.192.203.254
+	IpAddrFromServer=TRUE
+	IpAddr=10.192.200.59
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=10.192.59.6
+	IpNameServer2=10.192.58.49
+	ConfigDaemonManagerName=NetCfgExtnDhcp
+	ConfigDaemonName=!DhcpServ
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=IP6 Ethernet
+	IfNetworks=ip,ip6
+	IpNetMask=255.255.255.0
+	IpGateway=194.72.6.1
+	IpAddrFromServer=TRUE
+	IpAddr=192.168.0.100
+	IpDNSAddrFromServer=FALSE
+	IpNameServer1=192.168.10.2
+	IpNameServer2=192.168.20.2
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## IAP
+## 
+[IAP]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Pipex CSD
+	IAPServiceType=DialOutISP
+	IAPService=2
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Ethernet IP4
+	IAPServiceType=LANService
+	IAPService=1
+	IAPBearerType=LANBearer
+	IAPBearer=1
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=NT RAS Com 0
+	IAPServiceType=DialOutISP
+	IAPService=3
+	IAPBearerType=ModemBearer
+	IAPBearer=3
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=3
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=NT RAS Com 1
+	IAPServiceType=DialOutISP
+	IAPService=3
+	IAPBearerType=ModemBearer
+	IAPBearer=4
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=3
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=WSP Test CSD
+	IAPServiceType=DialOutISP
+	IAPService=4
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=Msg Test CSD
+	IAPServiceType=DialOutISP
+	IAPService=2
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=Msg Test Auth CSD
+	IAPServiceType=DialOutISP
+	IAPService=5
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=WinTunnel on Epoc Com1
+	IAPServiceType=DialOutISP
+	IAPService=3
+	IAPBearerType=ModemBearer
+	IAPBearer=5
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=3
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Name=Ethernet IP6
+	IAPServiceType=LANService
+	IAPService=2
+	IAPBearerType=LANBearer
+	IAPBearer=1
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Name=IP6 Dial
+	IAPServiceType=DialOutISP
+	IAPService=6
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 11
+	Name=GSMPhone1
+	IAPServiceType=DialOutISP
+	IAPService=2
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 12
+	Name=USIM Test
+	IAPServiceType=DialOutISP
+	IAPService=7
+	IAPBearerType=ModemBearer
+	IAPBearer=6
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 13
+	Name=Vodafone GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=1
+	IAPBearerType=ModemBearer
+	IAPBearer=5
+	IAPNetwork=3
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 14
+	Name=Vodafone WAP GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=2
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=3
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 15
+	Name=Orange GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=3
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=4
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 16
+	Name=Orange WAP GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=4
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=4
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 17
+	Name=O2 GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=5
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=5
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 18
+	Name=O2 WAP GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=6
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=5
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 19
+	Name=CityOnlines CSD India
+	IAPServiceType=DialOutISP
+	IAPService=8
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 20
+	Name=Hutch GPRS
+	IAPServiceType=OutgoingGPRS
+	IAPService=7
+	IAPBearerType=ModemBearer
+	IAPBearer=7
+	IAPNetwork=6
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 21
+	Name=Vodafone WAP GSM
+	IAPServiceType=DialOutISP
+	IAPService=9
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=3
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 22
+	Name=Orange WAP GSM
+	IAPServiceType=DialOutISP
+	IAPService=10
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=4
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 23
+	Name=O2 WAP GSM
+	IAPServiceType=DialOutISP
+	IAPService=11
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=5
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 24
+	Name=Test Network CSD
+	IAPServiceType=DialOutISP
+	IAPService=12
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 25
+	Name=Test Network CSD IP6
+	IAPServiceType=DialOutISP
+	IAPService=13
+	IAPBearerType=ModemBearer
+	IAPBearer=2
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 26
+	Name=Cisco VPN IAP
+	IAPServiceType=VpnService
+	IAPService=3
+	IAPBearerType=VirtualBearer
+	IAPBearer=3
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 27
+	Name=DUMMY TSY
+	IAPServiceType=DialOutISP
+	IAPService=3
+	IAPBearerType=ModemBearer
+	IAPBearer=8
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 28
+	Name=mRouter USB
+	IAPServiceType=DialOutISP
+	IAPService=14
+	IAPBearerType=ModemBearer
+	IAPBearer=10
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 29
+	Name=mRouter Wins
+	IAPServiceType=DialOutISP
+	IAPService=14
+	IAPBearerType=ModemBearer
+	IAPBearer=9
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+
+############################################################
+## ConnectionPreferences
+## 
+[ConnectionPreferences]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=DefaultRecordName-1
+	Ranking=1
+	Direction=OUTGOING
+	BearerSet=PSD
+	DialogPref=DONOTPROMPT
+	IAP=13
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## Proxies
+## 
+[Proxies]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=DefaultRecordName-1
+	ISP=4
+	ProxyServiceType=DialOutISP
+	UseProxyServer=TRUE
+	ProxyServerName=www.dummyproxy.com
+	ProtocolName=http
+	PortNumber=80
+	Exceptions=www.dummyproxy.com/exception
+	FIELD_COUNT=8
+END_ADD
+
+
+############################################################
+## WAPAccessPoint
+## 
+[WAPAccessPoint]
+ADD_TEMPLATE
+	Name=Default Dial In ISP
+	CurrentBearer=WAPIPBearer
+	FIELD_COUNT=2
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Vodafone WAP GPRS
+	CurrentBearer=WAPIPBearer
+	StartPage=wap:1999/vodafone.wml
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=Orange WAP GPRS
+	CurrentBearer=WAPIPBearer
+	StartPage=orange.multimedia
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=O2 WAP GPRS
+	CurrentBearer=WAPIPBearer
+	StartPage=wap.o2.co.uk
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## WAPIPBearer
+## 
+[WAPIPBearer]
+ADD_TEMPLATE
+	Name=DefaultRecordName-1
+	AccessPointId=0
+	GatewayAddress=0
+	IAP=0
+	WSPOption=CONNECTIONLESS
+	Security=FALSE
+	ProxyPortNumber=0
+	ProxyLogin=0
+	ProxyPassword=0
+	FIELD_COUNT=9
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=DefaultRecordName-2
+	AccessPointId=2
+	GatewayAddress=wap.closedtest.intra
+	IAP=24
+	WSPOption=CONNECTIONORIENTED
+	Security=FALSE
+	ProxyPortNumber=1
+	ProxyLogin=1
+	ProxyPassword=1
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## WAPSMSBearer
+## 
+[WAPSMSBearer]
+ADD_TEMPLATE
+	Name=DefaultRecordName-1
+	AccessPointId=0
+	GatewayAddress=0
+	ServiceCentreAddress=0
+	WSPOption=CONNECTIONLESS
+	Security=FALSE
+	FIELD_COUNT=6
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=DefaultRecordName-2
+	AccessPointId=2
+	GatewayAddress=+4412345678901
+	ServiceCentreAddress=+442071234567
+	WSPOption=CONNECTIONORIENTED
+	Security=FALSE
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## SecureSocketTable
+## 
+[SecureSocketTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=DefaultRecordName-1
+	ProtocolName=ssl3.0
+	ProtoLibrary=ssladaptor.dll
+	FIELD_COUNT=3
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=DefaultRecordName-2
+	ProtocolName=tls1.0
+	ProtoLibrary=ssladaptor.dll
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## VirtualBearer
+## 
+[VirtualBearer]
+ADD_TEMPLATE
+	Name=Default VPN Bearer
+	IfName=VPN.nif
+	LastSocketActivityTimeout=600
+	LastSessionClosedTimeout=600
+	LastSocketClosedTimeout=600
+	Agent=VPN.agt
+	FIELD_COUNT=6
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=VPN Bearer1
+	IfName=ppp.nif
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	Agent=ntras.agt
+	FIELD_COUNT=6
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=VPN Bearer2
+	IfName=tunnelnif
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	Agent=vpnconnagt.agt
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## VpnService
+## 
+[VpnService]
+ADD_TEMPLATE
+	Name=Default VPN
+	Policy=DefaultVPNpolicy
+	HomeIAP=1
+	HomeNetwork=0
+	FIELD_COUNT=4
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=VPN1
+	Policy=VPNpolicy1
+	HomeIAP=2
+	HomeNetwork=1
+	FIELD_COUNT=4
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=cisco tunnel
+	Policy=cisco_all
+	HomeIAP=8
+	HomeNetwork=1
+	FIELD_COUNT=4
+END_ADD
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/eabi/licenseeskeletontsyu.def	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,206 @@
+EXPORTS
+	_Z12LTsyFactoryLv @ 1 NONAME
+	_ZTI10CATDtmfVts @ 2 NONAME
+	_ZTI10CATGetImei @ 3 NONAME
+	_ZTI10CATSIMCard @ 4 NONAME
+	_ZTI10CAtManager @ 5 NONAME
+	_ZTI10CAtSmsNack @ 6 NONAME
+	_ZTI10CAtSmsSend @ 7 NONAME
+	_ZTI10CTsyConfig @ 8 NONAME
+	_ZTI11CATGetModel @ 9 NONAME
+	_ZTI11CCommEngine @ 10 NONAME
+	_ZTI11CCommReader @ 11 NONAME
+	_ZTI11CCommWriter @ 12 NONAME
+	_ZTI11CGetPhoneID @ 13 NONAME
+	_ZTI12CATDialVoice @ 14 NONAME
+	_ZTI12CATGetSignal @ 15 NONAME
+	_ZTI12CRequestBase @ 16 NONAME
+	_ZTI13CATGetBattery @ 17 NONAME
+	_ZTI13CATGprsAttach @ 18 NONAME
+	_ZTI13CATGprsDetach @ 19 NONAME
+	_ZTI13CAtPhbkEnRead @ 20 NONAME
+	_ZTI13CAtSmsReceive @ 21 NONAME
+	_ZTI13CGetFdnStatus @ 22 NONAME
+	_ZTI13CStringParser @ 23 NONAME
+	_ZTI14CATGetCellInfo @ 24 NONAME
+	_ZTI14CATGetRevision @ 25 NONAME
+	_ZTI14CATNetworkInfo @ 26 NONAME
+	_ZTI14CATUnsolicited @ 27 NONAME
+	_ZTI14CAtCommandBase @ 28 NONAME
+	_ZTI14CLtsyFactoryV1 @ 29 NONAME
+	_ZTI15CATGetFdnStatus @ 30 NONAME
+	_ZTI15CAtSmsStoreInfo @ 31 NONAME
+	_ZTI15CAtSmsStoreRead @ 32 NONAME
+	_ZTI15CLtsySatHandler @ 33 NONAME
+	_ZTI15CLtsySimHandler @ 34 NONAME
+	_ZTI15CLtsySmsHandler @ 35 NONAME
+	_ZTI16CATDetectNetwork @ 36 NONAME
+	_ZTI16CATGPRSSetConfig @ 37 NONAME
+	_ZTI16CATGetFdnSupport @ 38 NONAME
+	_ZTI16CATHelperCommand @ 39 NONAME
+	_ZTI16CATSelectNetwork @ 40 NONAME
+	_ZTI16CAtPhbkEnGetInfo @ 41 NONAME
+	_ZTI16CAtPhbkEnReadAll @ 42 NONAME
+	_ZTI16CAtPhbkStoreRead @ 43 NONAME
+	_ZTI16CAtSmsStoreWrite @ 44 NONAME
+	_ZTI16CGetOperatorNmae @ 45 NONAME
+	_ZTI16CInitializePhone @ 46 NONAME
+	_ZTI17CATGetModemStatus @ 47 NONAME
+	_ZTI17CATNotifyCellInfo @ 48 NONAME
+	_ZTI17CAtPhbkStoreCache @ 49 NONAME
+	_ZTI17CAtPhbkStoreWrite @ 50 NONAME
+	_ZTI17CAtSmsStoreDelete @ 51 NONAME
+	_ZTI17CLtsyPhoneHandler @ 52 NONAME
+	_ZTI17CRespondBufParser @ 53 NONAME
+	_ZTI18CATGetManufacturer @ 54 NONAME
+	_ZTI18CAtPhbkStoreDelete @ 55 NONAME
+	_ZTI18CAtSmsStoreReadAll @ 56 NONAME
+	_ZTI19CATGetPhoneCellInfo @ 57 NONAME
+	_ZTI19CATSwitchOnLineMode @ 58 NONAME
+	_ZTI19CActiveCommandStore @ 59 NONAME
+	_ZTI19CAsyncHelperRequest @ 60 NONAME
+	_ZTI19CAtMessageStoreInfo @ 61 NONAME
+	_ZTI19CGlobalPhonemanager @ 62 NONAME
+	_ZTI20CATGprsContextDelete @ 63 NONAME
+	_ZTI20CATGprsNtwkRegStatus @ 64 NONAME
+	_ZTI20CATGprsSetProfileReq @ 65 NONAME
+	_ZTI20CATSelectNetworkMode @ 66 NONAME
+	_ZTI20CATSetNotifyCellInfo @ 67 NONAME
+	_ZTI20CAtSmsStoreDeleteAll @ 68 NONAME
+	_ZTI20CLtsySecurityHandler @ 69 NONAME
+	_ZTI21CATCommandControlBase @ 70 NONAME
+	_ZTI21CATGPRSGetContextAddr @ 71 NONAME
+	_ZTI21CATGprsContextConnect @ 72 NONAME
+	_ZTI21CATWaitForCallHandler @ 73 NONAME
+	_ZTI21CInitialisePdpContext @ 74 NONAME
+	_ZTI21CLtsyPhonebookHandler @ 75 NONAME
+	_ZTI22CATGprsContextActivate @ 76 NONAME
+	_ZTI22CATNetworkRegistration @ 77 NONAME
+	_ZTI22CAtPhbkStoreInitialise @ 78 NONAME
+	_ZTI22CGetCurrentNetworkInfo @ 79 NONAME
+	_ZTI23CATHangupCommandRecords @ 80 NONAME
+	_ZTI23CLtsyCallControlHandler @ 81 NONAME
+	_ZTI23CLtsyPhonebookEnHandler @ 82 NONAME
+	_ZTI23CLtsyPhonebookOnHandler @ 83 NONAME
+	_ZTI23CNotifyBatteryAndSignal @ 84 NONAME
+	_ZTI24CATGprsContextDeactivate @ 85 NONAME
+	_ZTI24CAtPhbkGetPhoneStoreInfo @ 86 NONAME
+	_ZTI24CUnsolicitedEventMonitor @ 87 NONAME
+	_ZTI25CATNetworkRegStatusChange @ 88 NONAME
+	_ZTI25CActivatContextAndGetAddr @ 89 NONAME
+	_ZTI25CLtsyCellBroadcastHandler @ 90 NONAME
+	_ZTI26CATGprsNtwkRegStatusChange @ 91 NONAME
+	_ZTI26CLtsyPacketServicesHandler @ 92 NONAME
+	_ZTI27CLtsyCallInformationManager @ 93 NONAME
+	_ZTI33CLtsyCallControlMultipartyHandler @ 94 NONAME
+	_ZTI33CLtsySupplementaryServicesHandler @ 95 NONAME
+	_ZTI37CUnsolicitedCommandCallControlHandler @ 96 NONAME
+	_ZTI7CATChld @ 97 NONAME
+	_ZTI7CATClcc @ 98 NONAME
+	_ZTI7CATRing @ 99 NONAME
+	_ZTI9CATAnswer @ 100 NONAME
+	_ZTI9CATHangUp @ 101 NONAME
+	_ZTI9CAtSmsAck @ 102 NONAME
+	_ZTT15CLtsySimHandler @ 103 NONAME
+	_ZTV10CATDtmfVts @ 104 NONAME
+	_ZTV10CATGetImei @ 105 NONAME
+	_ZTV10CATSIMCard @ 106 NONAME
+	_ZTV10CAtManager @ 107 NONAME
+	_ZTV10CAtSmsNack @ 108 NONAME
+	_ZTV10CAtSmsSend @ 109 NONAME
+	_ZTV10CTsyConfig @ 110 NONAME
+	_ZTV11CATGetModel @ 111 NONAME
+	_ZTV11CCommEngine @ 112 NONAME
+	_ZTV11CCommReader @ 113 NONAME
+	_ZTV11CCommWriter @ 114 NONAME
+	_ZTV11CGetPhoneID @ 115 NONAME
+	_ZTV12CATDialVoice @ 116 NONAME
+	_ZTV12CATGetSignal @ 117 NONAME
+	_ZTV12CRequestBase @ 118 NONAME
+	_ZTV13CATGetBattery @ 119 NONAME
+	_ZTV13CATGprsAttach @ 120 NONAME
+	_ZTV13CATGprsDetach @ 121 NONAME
+	_ZTV13CAtPhbkEnRead @ 122 NONAME
+	_ZTV13CAtSmsReceive @ 123 NONAME
+	_ZTV13CGetFdnStatus @ 124 NONAME
+	_ZTV13CStringParser @ 125 NONAME
+	_ZTV14CATGetCellInfo @ 126 NONAME
+	_ZTV14CATGetRevision @ 127 NONAME
+	_ZTV14CATNetworkInfo @ 128 NONAME
+	_ZTV14CATUnsolicited @ 129 NONAME
+	_ZTV14CAtCommandBase @ 130 NONAME
+	_ZTV14CLtsyFactoryV1 @ 131 NONAME
+	_ZTV15CATGetFdnStatus @ 132 NONAME
+	_ZTV15CAtSmsStoreInfo @ 133 NONAME
+	_ZTV15CAtSmsStoreRead @ 134 NONAME
+	_ZTV15CLtsySatHandler @ 135 NONAME
+	_ZTV15CLtsySimHandler @ 136 NONAME
+	_ZTV15CLtsySmsHandler @ 137 NONAME
+	_ZTV16CATDetectNetwork @ 138 NONAME
+	_ZTV16CATGPRSSetConfig @ 139 NONAME
+	_ZTV16CATGetFdnSupport @ 140 NONAME
+	_ZTV16CATHelperCommand @ 141 NONAME
+	_ZTV16CATSelectNetwork @ 142 NONAME
+	_ZTV16CAtPhbkEnGetInfo @ 143 NONAME
+	_ZTV16CAtPhbkEnReadAll @ 144 NONAME
+	_ZTV16CAtPhbkStoreRead @ 145 NONAME
+	_ZTV16CAtSmsStoreWrite @ 146 NONAME
+	_ZTV16CGetOperatorNmae @ 147 NONAME
+	_ZTV16CInitializePhone @ 148 NONAME
+	_ZTV17CATGetModemStatus @ 149 NONAME
+	_ZTV17CATNotifyCellInfo @ 150 NONAME
+	_ZTV17CAtPhbkStoreCache @ 151 NONAME
+	_ZTV17CAtPhbkStoreWrite @ 152 NONAME
+	_ZTV17CAtSmsStoreDelete @ 153 NONAME
+	_ZTV17CLtsyPhoneHandler @ 154 NONAME
+	_ZTV17CRespondBufParser @ 155 NONAME
+	_ZTV18CATGetManufacturer @ 156 NONAME
+	_ZTV18CAtPhbkStoreDelete @ 157 NONAME
+	_ZTV18CAtSmsStoreReadAll @ 158 NONAME
+	_ZTV19CATGetPhoneCellInfo @ 159 NONAME
+	_ZTV19CATSwitchOnLineMode @ 160 NONAME
+	_ZTV19CActiveCommandStore @ 161 NONAME
+	_ZTV19CAsyncHelperRequest @ 162 NONAME
+	_ZTV19CAtMessageStoreInfo @ 163 NONAME
+	_ZTV19CGlobalPhonemanager @ 164 NONAME
+	_ZTV20CATGprsContextDelete @ 165 NONAME
+	_ZTV20CATGprsNtwkRegStatus @ 166 NONAME
+	_ZTV20CATGprsSetProfileReq @ 167 NONAME
+	_ZTV20CATSelectNetworkMode @ 168 NONAME
+	_ZTV20CATSetNotifyCellInfo @ 169 NONAME
+	_ZTV20CAtSmsStoreDeleteAll @ 170 NONAME
+	_ZTV20CLtsySecurityHandler @ 171 NONAME
+	_ZTV21CATCommandControlBase @ 172 NONAME
+	_ZTV21CATGPRSGetContextAddr @ 173 NONAME
+	_ZTV21CATGprsContextConnect @ 174 NONAME
+	_ZTV21CATWaitForCallHandler @ 175 NONAME
+	_ZTV21CInitialisePdpContext @ 176 NONAME
+	_ZTV21CLtsyPhonebookHandler @ 177 NONAME
+	_ZTV22CATGprsContextActivate @ 178 NONAME
+	_ZTV22CATNetworkRegistration @ 179 NONAME
+	_ZTV22CAtPhbkStoreInitialise @ 180 NONAME
+	_ZTV22CGetCurrentNetworkInfo @ 181 NONAME
+	_ZTV23CATHangupCommandRecords @ 182 NONAME
+	_ZTV23CLtsyCallControlHandler @ 183 NONAME
+	_ZTV23CLtsyPhonebookEnHandler @ 184 NONAME
+	_ZTV23CLtsyPhonebookOnHandler @ 185 NONAME
+	_ZTV23CNotifyBatteryAndSignal @ 186 NONAME
+	_ZTV24CATGprsContextDeactivate @ 187 NONAME
+	_ZTV24CAtPhbkGetPhoneStoreInfo @ 188 NONAME
+	_ZTV24CUnsolicitedEventMonitor @ 189 NONAME
+	_ZTV25CATNetworkRegStatusChange @ 190 NONAME
+	_ZTV25CActivatContextAndGetAddr @ 191 NONAME
+	_ZTV25CLtsyCellBroadcastHandler @ 192 NONAME
+	_ZTV26CATGprsNtwkRegStatusChange @ 193 NONAME
+	_ZTV26CLtsyPacketServicesHandler @ 194 NONAME
+	_ZTV27CLtsyCallInformationManager @ 195 NONAME
+	_ZTV33CLtsyCallControlMultipartyHandler @ 196 NONAME
+	_ZTV33CLtsySupplementaryServicesHandler @ 197 NONAME
+	_ZTV37CUnsolicitedCommandCallControlHandler @ 198 NONAME
+	_ZTV7CATChld @ 199 NONAME
+	_ZTV7CATClcc @ 200 NONAME
+	_ZTV7CATRing @ 201 NONAME
+	_ZTV9CATAnswer @ 202 NONAME
+	_ZTV9CATHangUp @ 203 NONAME
+	_ZTV9CAtSmsAck @ 204 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/eabi/stltsyu.def	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,209 @@
+EXPORTS
+	_Z12LTsyFactoryLv @ 1 NONAME
+	_ZTI10CATDtmfVts @ 2 NONAME
+	_ZTI10CATGetImei @ 3 NONAME
+	_ZTI10CATSIMCard @ 4 NONAME
+	_ZTI10CAtManager @ 5 NONAME
+	_ZTI10CAtSmsNack @ 6 NONAME
+	_ZTI10CAtSmsSend @ 7 NONAME
+	_ZTI10CTsyConfig @ 8 NONAME
+	_ZTI11CATGetModel @ 9 NONAME
+	_ZTI11CCommEngine @ 10 NONAME
+	_ZTI11CCommReader @ 11 NONAME
+	_ZTI11CCommWriter @ 12 NONAME
+	_ZTI11CGetPhoneID @ 13 NONAME
+	_ZTI12CATDialVoice @ 14 NONAME
+	_ZTI12CATGetSignal @ 15 NONAME
+	_ZTI12CRequestBase @ 16 NONAME
+	_ZTI13CATGetBattery @ 17 NONAME
+	_ZTI13CATGprsAttach @ 18 NONAME
+	_ZTI13CATGprsDetach @ 19 NONAME
+	_ZTI13CAtPhbkEnRead @ 20 NONAME
+	_ZTI13CAtSmsReceive @ 21 NONAME
+	_ZTI13CGetFdnStatus @ 22 NONAME
+	_ZTI13CStringParser @ 23 NONAME
+	_ZTI14CATGetCellInfo @ 24 NONAME
+	_ZTI14CATGetRevision @ 25 NONAME
+	_ZTI14CATNetworkInfo @ 26 NONAME
+	_ZTI14CATUnsolicited @ 27 NONAME
+	_ZTI14CAtCommandBase @ 28 NONAME
+	_ZTI14CLtsyFactoryV1 @ 29 NONAME
+	_ZTI15CATGetFdnStatus @ 30 NONAME
+	_ZTI15CAtSmsStoreInfo @ 31 NONAME
+	_ZTI15CAtSmsStoreRead @ 32 NONAME
+	_ZTI15CLtsySatHandler @ 33 NONAME
+	_ZTI15CLtsySimHandler @ 34 NONAME
+	_ZTI15CLtsySmsHandler @ 35 NONAME
+	_ZTI16CATDetectNetwork @ 36 NONAME
+	_ZTI16CATGPRSSetConfig @ 37 NONAME
+	_ZTI16CATGetFdnSupport @ 38 NONAME
+	_ZTI16CATHelperCommand @ 39 NONAME
+	_ZTI16CATSelectNetwork @ 40 NONAME
+	_ZTI16CAtPhbkEnGetInfo @ 41 NONAME
+	_ZTI16CAtPhbkEnReadAll @ 42 NONAME
+	_ZTI16CAtPhbkStoreRead @ 43 NONAME
+	_ZTI16CAtSmsStoreWrite @ 44 NONAME
+	_ZTI16CGetOperatorNmae @ 45 NONAME
+	_ZTI16CInitializePhone @ 46 NONAME
+	_ZTI17CATGetModemStatus @ 47 NONAME
+	_ZTI17CATNotifyCellInfo @ 48 NONAME
+	_ZTI17CAtPhbkStoreCache @ 49 NONAME
+	_ZTI17CAtPhbkStoreWrite @ 50 NONAME
+	_ZTI17CAtSmsStoreDelete @ 51 NONAME
+	_ZTI17CLtsyPhoneHandler @ 52 NONAME
+	_ZTI17CRespondBufParser @ 53 NONAME
+	_ZTI18CATGetManufacturer @ 54 NONAME
+	_ZTI18CAtPhbkStoreDelete @ 55 NONAME
+	_ZTI18CAtSmsStoreReadAll @ 56 NONAME
+	_ZTI19CATGetPhoneCellInfo @ 57 NONAME
+	_ZTI19CATSwitchOnLineMode @ 58 NONAME
+	_ZTI19CActiveCommandStore @ 59 NONAME
+	_ZTI19CAsyncHelperRequest @ 60 NONAME
+	_ZTI19CAtMessageStoreInfo @ 61 NONAME
+	_ZTI19CGlobalPhonemanager @ 62 NONAME
+	_ZTI20CATGprsContextDelete @ 63 NONAME
+	_ZTI20CATGprsNtwkRegStatus @ 64 NONAME
+	_ZTI20CATGprsSetProfileReq @ 65 NONAME
+	_ZTI20CATSelectNetworkMode @ 66 NONAME
+	_ZTI20CATSetNotifyCellInfo @ 67 NONAME
+	_ZTI20CAtSmsStoreDeleteAll @ 68 NONAME
+	_ZTI20CLtsySecurityHandler @ 69 NONAME
+	_ZTI21CATCommandControlBase @ 70 NONAME
+	_ZTI21CATGPRSGetContextAddr @ 71 NONAME
+	_ZTI21CATGprsContextConnect @ 72 NONAME
+	_ZTI21CATWaitForCallHandler @ 73 NONAME
+	_ZTI21CInitialisePdpContext @ 74 NONAME
+	_ZTI21CLtsyPhonebookHandler @ 75 NONAME
+	_ZTI22CATGprsContextActivate @ 76 NONAME
+	_ZTI22CATNetworkRegistration @ 77 NONAME
+	_ZTI22CAtPhbkStoreInitialise @ 78 NONAME
+	_ZTI22CGetCurrentNetworkInfo @ 79 NONAME
+	_ZTI23CATHangupCommandRecords @ 80 NONAME
+	_ZTI23CLtsyCallControlHandler @ 81 NONAME
+	_ZTI23CLtsyPhonebookEnHandler @ 82 NONAME
+	_ZTI23CLtsyPhonebookOnHandler @ 83 NONAME
+	_ZTI23CNotifyBatteryAndSignal @ 84 NONAME
+	_ZTI24CATGprsContextDeactivate @ 85 NONAME
+	_ZTI24CAtPhbkGetPhoneStoreInfo @ 86 NONAME
+	_ZTI24CUnsolicitedEventMonitor @ 87 NONAME
+	_ZTI25CATNetworkRegStatusChange @ 88 NONAME
+	_ZTI25CActivatContextAndGetAddr @ 89 NONAME
+	_ZTI25CLtsyCellBroadcastHandler @ 90 NONAME
+	_ZTI26CATGprsNtwkRegStatusChange @ 91 NONAME
+	_ZTI26CLtsyPacketServicesHandler @ 92 NONAME
+	_ZTI27CLtsyCallInformationManager @ 93 NONAME
+	_ZTI33CLtsyCallControlMultipartyHandler @ 94 NONAME
+	_ZTI33CLtsySupplementaryServicesHandler @ 95 NONAME
+	_ZTI37CUnsolicitedCommandCallControlHandler @ 96 NONAME
+	_ZTI7CATChld @ 97 NONAME
+	_ZTI7CATClcc @ 98 NONAME
+	_ZTI7CATRing @ 99 NONAME
+	_ZTI9CATAnswer @ 100 NONAME
+	_ZTI9CATHangUp @ 101 NONAME
+	_ZTI9CAtSmsAck @ 102 NONAME
+	_ZTT15CLtsySimHandler @ 103 NONAME
+	_ZTT17CLtsyPhoneHandler @ 104 NONAME
+	_ZTT20CLtsySecurityHandler @ 105 NONAME
+	_ZTT23CLtsyCallControlHandler @ 106 NONAME
+	_ZTV10CATDtmfVts @ 107 NONAME
+	_ZTV10CATGetImei @ 108 NONAME
+	_ZTV10CATSIMCard @ 109 NONAME
+	_ZTV10CAtManager @ 110 NONAME
+	_ZTV10CAtSmsNack @ 111 NONAME
+	_ZTV10CAtSmsSend @ 112 NONAME
+	_ZTV10CTsyConfig @ 113 NONAME
+	_ZTV11CATGetModel @ 114 NONAME
+	_ZTV11CCommEngine @ 115 NONAME
+	_ZTV11CCommReader @ 116 NONAME
+	_ZTV11CCommWriter @ 117 NONAME
+	_ZTV11CGetPhoneID @ 118 NONAME
+	_ZTV12CATDialVoice @ 119 NONAME
+	_ZTV12CATGetSignal @ 120 NONAME
+	_ZTV12CRequestBase @ 121 NONAME
+	_ZTV13CATGetBattery @ 122 NONAME
+	_ZTV13CATGprsAttach @ 123 NONAME
+	_ZTV13CATGprsDetach @ 124 NONAME
+	_ZTV13CAtPhbkEnRead @ 125 NONAME
+	_ZTV13CAtSmsReceive @ 126 NONAME
+	_ZTV13CGetFdnStatus @ 127 NONAME
+	_ZTV13CStringParser @ 128 NONAME
+	_ZTV14CATGetCellInfo @ 129 NONAME
+	_ZTV14CATGetRevision @ 130 NONAME
+	_ZTV14CATNetworkInfo @ 131 NONAME
+	_ZTV14CATUnsolicited @ 132 NONAME
+	_ZTV14CAtCommandBase @ 133 NONAME
+	_ZTV14CLtsyFactoryV1 @ 134 NONAME
+	_ZTV15CATGetFdnStatus @ 135 NONAME
+	_ZTV15CAtSmsStoreInfo @ 136 NONAME
+	_ZTV15CAtSmsStoreRead @ 137 NONAME
+	_ZTV15CLtsySatHandler @ 138 NONAME
+	_ZTV15CLtsySimHandler @ 139 NONAME
+	_ZTV15CLtsySmsHandler @ 140 NONAME
+	_ZTV16CATDetectNetwork @ 141 NONAME
+	_ZTV16CATGPRSSetConfig @ 142 NONAME
+	_ZTV16CATGetFdnSupport @ 143 NONAME
+	_ZTV16CATHelperCommand @ 144 NONAME
+	_ZTV16CATSelectNetwork @ 145 NONAME
+	_ZTV16CAtPhbkEnGetInfo @ 146 NONAME
+	_ZTV16CAtPhbkEnReadAll @ 147 NONAME
+	_ZTV16CAtPhbkStoreRead @ 148 NONAME
+	_ZTV16CAtSmsStoreWrite @ 149 NONAME
+	_ZTV16CGetOperatorNmae @ 150 NONAME
+	_ZTV16CInitializePhone @ 151 NONAME
+	_ZTV17CATGetModemStatus @ 152 NONAME
+	_ZTV17CATNotifyCellInfo @ 153 NONAME
+	_ZTV17CAtPhbkStoreCache @ 154 NONAME
+	_ZTV17CAtPhbkStoreWrite @ 155 NONAME
+	_ZTV17CAtSmsStoreDelete @ 156 NONAME
+	_ZTV17CLtsyPhoneHandler @ 157 NONAME
+	_ZTV17CRespondBufParser @ 158 NONAME
+	_ZTV18CATGetManufacturer @ 159 NONAME
+	_ZTV18CAtPhbkStoreDelete @ 160 NONAME
+	_ZTV18CAtSmsStoreReadAll @ 161 NONAME
+	_ZTV19CATGetPhoneCellInfo @ 162 NONAME
+	_ZTV19CATSwitchOnLineMode @ 163 NONAME
+	_ZTV19CActiveCommandStore @ 164 NONAME
+	_ZTV19CAsyncHelperRequest @ 165 NONAME
+	_ZTV19CAtMessageStoreInfo @ 166 NONAME
+	_ZTV19CGlobalPhonemanager @ 167 NONAME
+	_ZTV20CATGprsContextDelete @ 168 NONAME
+	_ZTV20CATGprsNtwkRegStatus @ 169 NONAME
+	_ZTV20CATGprsSetProfileReq @ 170 NONAME
+	_ZTV20CATSelectNetworkMode @ 171 NONAME
+	_ZTV20CATSetNotifyCellInfo @ 172 NONAME
+	_ZTV20CAtSmsStoreDeleteAll @ 173 NONAME
+	_ZTV20CLtsySecurityHandler @ 174 NONAME
+	_ZTV21CATCommandControlBase @ 175 NONAME
+	_ZTV21CATGPRSGetContextAddr @ 176 NONAME
+	_ZTV21CATGprsContextConnect @ 177 NONAME
+	_ZTV21CATWaitForCallHandler @ 178 NONAME
+	_ZTV21CInitialisePdpContext @ 179 NONAME
+	_ZTV21CLtsyPhonebookHandler @ 180 NONAME
+	_ZTV22CATGprsContextActivate @ 181 NONAME
+	_ZTV22CATNetworkRegistration @ 182 NONAME
+	_ZTV22CAtPhbkStoreInitialise @ 183 NONAME
+	_ZTV22CGetCurrentNetworkInfo @ 184 NONAME
+	_ZTV23CATHangupCommandRecords @ 185 NONAME
+	_ZTV23CLtsyCallControlHandler @ 186 NONAME
+	_ZTV23CLtsyPhonebookEnHandler @ 187 NONAME
+	_ZTV23CLtsyPhonebookOnHandler @ 188 NONAME
+	_ZTV23CNotifyBatteryAndSignal @ 189 NONAME
+	_ZTV24CATGprsContextDeactivate @ 190 NONAME
+	_ZTV24CAtPhbkGetPhoneStoreInfo @ 191 NONAME
+	_ZTV24CUnsolicitedEventMonitor @ 192 NONAME
+	_ZTV25CATNetworkRegStatusChange @ 193 NONAME
+	_ZTV25CActivatContextAndGetAddr @ 194 NONAME
+	_ZTV25CLtsyCellBroadcastHandler @ 195 NONAME
+	_ZTV26CATGprsNtwkRegStatusChange @ 196 NONAME
+	_ZTV26CLtsyPacketServicesHandler @ 197 NONAME
+	_ZTV27CLtsyCallInformationManager @ 198 NONAME
+	_ZTV33CLtsyCallControlMultipartyHandler @ 199 NONAME
+	_ZTV33CLtsySupplementaryServicesHandler @ 200 NONAME
+	_ZTV37CUnsolicitedCommandCallControlHandler @ 201 NONAME
+	_ZTV7CATChld @ 202 NONAME
+	_ZTV7CATClcc @ 203 NONAME
+	_ZTV7CATRing @ 204 NONAME
+	_ZTV9CATAnswer @ 205 NONAME
+	_ZTV9CATHangUp @ 206 NONAME
+	_ZTV9CAtSmsAck @ 207 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/group/bld.inf	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,26 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// system test system build description file for stltsy.dll
+// 
+//
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+stltsy.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/group/bld.inf~	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,26 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// system test system build description file for stltsy.dll
+// 
+//
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+stltsy.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/group/stltsy.mmp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,179 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file stltsy.mmp
+// 
+
+TARGETTYPE      DLL
+TARGET          licenseeskeletontsy.dll
+UID             0x1000008D 0x102870ED
+
+CAPABILITY      All -Tcb
+VENDORID        0x70000001
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+
+USERINCLUDE 	../handler/inc
+USERINCLUDE 	../comms/inc 
+USERINCLUDE 	../atcommand/generic/inc 
+USERINCLUDE 	../atcommand/pktservice/inc 
+USERINCLUDE 	../atcommand/phone/inc 
+USERINCLUDE     ../atcommand/sms/inc
+USERINCLUDE 	../atcommand/callcontrol/inc 
+USERINCLUDE     ../atcommand/phonebook/inc
+USERINCLUDE     ../atcommand/phonebooken/inc
+//USERINCLUDE     ../../ctsydispatcher/exportinc
+
+SOURCEPATH      ../handler/src
+SOURCE 			cltsyfactoryv1.cpp
+SOURCE 			cltsycallcontrolhandler.cpp
+SOURCE 			cltsyphonehandler.cpp
+SOURCE 			cltsysecurityhandler.cpp
+SOURCE 			cltsyphonebookenhandler.cpp
+SOURCE 			cltsycellbroadcasthandler.cpp
+SOURCE 			cltsyphonebookonhandler.cpp
+SOURCE 			cltsyphonebookhandler.cpp
+SOURCE 			cltsysimhandler.cpp
+SOURCE 			cltsysmshandler.cpp
+SOURCE 			cltsycallcontrolmultipartyhandler.cpp
+SOURCE 			cltsysupplementaryserviceshandler.cpp
+SOURCE 			cltsypacketserviceshandler.cpp
+SOURCE 			cltsysathandler.cpp
+
+SOURCEPATH      ../comms/src
+SOURCE          stringparser.cpp
+SOURCE			commengine.cpp 
+SOURCE			commreader.cpp 
+SOURCE			commwriter.cpp
+
+SOURCEPATH      ../atcommand/generic/src
+SOURCE          tsyconfg.cpp
+SOURCE          mslogger.cpp
+SOURCE          panic.cpp
+SOURCE 			atcommandbase.cpp
+SOURCE 			activecommandstore.cpp 
+SOURCE			atmanager.cpp 
+SOURCE			globalphonemanager.cpp 
+SOURCE          respondbufparser.cpp
+SOURCE          atunsolicited.cpp
+SOURCE          unsolicitedparams.cpp
+SOURCE 			unsolicitedeventmonitor.cpp
+SOURCE 		    atcommandcontrolbase.cpp 
+SOURCE          requestbase.cpp
+SOURCE          ltsycallinformation.cpp
+SOURCE          ltsycallinformationmanager.cpp
+SOURCE          asynchelperrequest.cpp
+SOURCE          athelpercommand.cpp
+SOURCE          atswitchonlinemode.cpp
+
+
+SOURCEPATH      ../atcommand/phone/src
+SOURCE			atdetectnetwork.cpp
+SOURCE			atgetbatteryinfo.cpp
+SOURCE			atgetimei.cpp
+SOURCE			atgetmanufacturer.cpp
+SOURCE			atgetmodel.cpp
+SOURCE			atgetmodemstatus.cpp
+SOURCE			atgetnetworkinfo.cpp
+SOURCE			atgetnetworkregistrationstatus.cpp
+SOURCE			atgetrevision.cpp
+SOURCE			atgetsignalstrength.cpp
+SOURCE			atgetsimstatusready.cpp
+SOURCE			atselectnetwork.cpp
+SOURCE			atselectnetworkmode.cpp
+SOURCE			atsetnotifycell.cpp
+SOURCE			atgetphonecellinfo.cpp
+SOURCE			atgetcellinfo.cpp
+SOURCE			atnetworkregstatuschange.cpp
+SOURCE			atnotifycellinfo.cpp
+SOURCE			atgetfdnstatus.cpp
+SOURCE			atgetfdnsupport.cpp
+SOURCE			getphoneid.cpp
+SOURCE			getoperatorname.cpp
+SOURCE			getfdnstatus.cpp
+SOURCE			getcurrentnetworkinfo.cpp
+SOURCE			initializephone.cpp
+SOURCE			notifybatteryandsignal.cpp
+
+
+SOURCEPATH      ../atcommand/pktservice/src
+SOURCE			atgprsattach.cpp
+SOURCE			atgprsdetach.cpp
+SOURCE			atgprsntwkregstatus.cpp
+SOURCE			atgprscontextactivate.cpp
+SOURCE			atgprscontextdeactivate.cpp
+SOURCE			atgprscontextdelete.cpp
+SOURCE			atgprsconfig.cpp
+SOURCE			atgprssetqosprofile.cpp
+SOURCE			initialisepdpcontext.cpp
+SOURCE			atgprsntwkregstatuschange.cpp
+SOURCE			activatecontextandgetaddr.cpp
+SOURCE			atgprsgetcontextaddr.cpp
+//SOURCE			gprscontextdeactivate.cpp
+SOURCE			atgprscontextconnect.cpp
+
+SOURCEPATH      ../atcommand/callcontrol/src
+SOURCE          atdialvoice.cpp
+SOURCE          athangup.cpp
+SOURCE          atclcc.cpp
+SOURCE          atring.cpp
+SOURCE          atwaitforcallhandler.cpp
+SOURCE          atanswer.cpp
+SOURCE          atchld.cpp
+SOURCE          unsolicitedcommandcallcontrolhandler.cpp
+SOURCE          atdtmfvts.cpp
+SOURCE          athangupcommandrecords.cpp
+
+SOURCEPATH      ../atcommand/sms/src
+SOURCE          smsatutil.cpp
+SOURCE          atsmsack.cpp
+SOURCE          atsmsstoreinfo.cpp 
+SOURCE          atmessagestoreinfo.cpp
+SOURCE          atsmssend.cpp
+SOURCE          atsmsstorewrite.cpp   
+SOURCE          atsmsstoreread.cpp
+SOURCE          atsmsreceive.cpp
+SOURCE          atsmsstoredelete.cpp
+SOURCE          atsmsstorereadall.cpp
+
+SOURCEPATH      ../atcommand/phonebook/src
+SOURCE          atphbkgetphonestoreinfo.cpp
+SOURCE          atphbkstoreinitialise.cpp
+SOURCE          atphbkstorewrite.cpp
+SOURCE          atphbkstoreread.cpp
+SOURCE          atphbkstorecache.cpp
+SOURCE          atphbkstoredelete.cpp
+
+SOURCEPATH      ../atcommand/phonebooken/src
+SOURCE          atphbkengetinfo.cpp
+SOURCE          atphbkenread.cpp
+SOURCE          atphbkenreadall.cpp
+
+LIBRARY 		euser.lib
+LIBRARY         ctsydispatcher.lib
+LIBRARY			etelmm.lib
+LIBRARY			etelpckt.lib
+LIBRARY         flogger.lib
+LIBRARY			estlib.lib
+LIBRARY 		estor.lib
+LIBRARY         customapi.lib
+LIBRARY	        commsdat.lib
+LIBRARY         c32.lib
+LIBRARY         secutil.lib
+LIBRARY         efsrv.lib
+
+// For logging
+#include <comms-infras/commsdebugutility.mmh>
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsycallcontrolhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,198 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCallControlHandler
+
+#ifndef __CLTSYDISPATCHCALLCONTROLHANDLER_H_
+#define __CLTSYDISPATCHCALLCONTROLHANDLER_H_
+
+//system include
+#include <e32std.h>
+#include <e32base.h>
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchcallcontrolinterface.h>
+#include "misdispatchinterfacesupported.h"
+
+//user include
+#include "ltsymacros.h"
+
+
+// FORWARD DECLARATIONS
+class CATDialVoice;
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+class CATWaitForCallHandler;
+class MLtsyUnsolicitedCommandObserver;
+class CUnsolicitedCommandCallControlHandler;
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyCallControlHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported,
+							public MLtsyDispatchCallControlAnswer,
+							public MLtsyDispatchCallControlHold,
+							public MLtsyDispatchCallControlDialEmergency,
+							public MLtsyDispatchCallControlStopDtmfTone,
+							public MLtsyDispatchCallControlSetActiveAlsLine,
+							public MLtsyDispatchCallControlSendDtmfTonesCancel,
+							public MLtsyDispatchCallControlHangUp,
+							public MLtsyDispatchCallControlResume,
+							public MLtsyDispatchCallControlSetDynamicHscsdParams,
+							public MLtsyDispatchCallControlDialVoice,
+							public MLtsyDispatchCallControlTransfer,
+							public MLtsyDispatchCallControlSendDtmfTones,
+							public MLtsyDispatchCallControlGetIdentityServiceStatus,
+							public MLtsyDispatchCallControlSwap,
+							public MLtsyDispatchCallControlLoanDataPort,
+							public MLtsyDispatchCallControlRecoverDataPort,
+							public MLtsyDispatchCallControlStartDtmfTone,
+							public MLtsyDispatchCallControlGetActiveAlsLine,
+							public MLtsyDispatchCallControlDialData,
+                            public MLtsyDispatchCallControlQueryIsEmergencyNumber,
+                            public MLtsyDispatchCallControlGetAlsPpSupport,
+                            public MLtsyDispatchCallControlGetAlsBlockedStatus,
+                            public MLtsyDispatchCallControlSetAlsBlocked,
+                            public MLtsyDispatchCallControlGetLifeTime,
+                            public MLtsyDispatchCallControlTerminateErrorCall,
+                            public MLtsyDispatchCallControlTerminateAllCalls,
+                            public MLtsyDispatchCallControlGetCallForwardingIndicator,
+							public MLtsyDispatchCallControlUpdateLifeTimer
+	{
+public:
+
+	virtual ~CLtsyCallControlHandler();
+	static CLtsyCallControlHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,  CGlobalPhonemanager* aGloblePhone);
+	static CLtsyCallControlHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback, CGlobalPhonemanager* aGloblePhone);
+
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+
+
+
+    // From MLtsyDispatchCallControlAnswer
+    virtual TInt HandleAnswerReqL(TInt aCallId, TBool aIsIsvCall);
+
+    // From MLtsyDispatchCallControlHold
+    virtual TInt HandleHoldReqL(TInt aCallId);
+
+    // From MLtsyDispatchCallControlDialEmergency
+    virtual TInt HandleDialEmergencyReqL(const TDes& aEmergencyNumber);
+
+    // From MLtsyDispatchCallControlStopDtmfTone
+    virtual TInt HandleStopDtmfToneReqL(TInt aCallId);
+
+    // From MLtsyDispatchCallControlSetActiveAlsLine
+    virtual TInt HandleSetActiveAlsLineReqL(RMobilePhone::TMobilePhoneALSLine aAlsLine);
+
+    // From MLtsyDispatchCallControlSendDtmfTonesCancel
+    virtual TInt HandleSendDtmfTonesCancelReqL(TInt aCallId);
+
+    // From MLtsyDispatchCallControlHangUp
+    virtual TInt HandleHangUpReqL(TInt aCallId, TInt aHangupCause);
+
+    // From MLtsyDispatchCallControlResume
+    virtual TInt HandleResumeReqL(TInt aCallId);
+
+    // From MLtsyDispatchCallControlSetDynamicHscsdParams
+    virtual TInt HandleSetDynamicHscsdParamsReqL(TInt aCallId, const RMobileCall::TMobileHscsdCallParamsV1& aHscsdParams);
+
+    // From MLtsyDispatchCallControlDialVoice  void CallbackCallControlDialVoiceComp(TInt aError, TInt aCallId);
+    virtual TInt HandleDialVoiceReqL(RMobilePhone::TMobilePhoneALSLine aLine, const RMobilePhone::TMobileAddress& aDialledParty, const RMobileCall::TMobileCallParamsV1& aCallParamsV1, TBool aIsIsvCall, RMobileCall::TCallParamOrigin aCallOrigin, TBool aPerformFdnCheck);
+
+    // From MLtsyDispatchCallControlTransfer
+    virtual TInt HandleTransferReqL(TInt aHeldCallId, TInt aSecondCallId);
+
+    // From MLtsyDispatchCallControlSendDtmfTones
+    virtual TInt HandleSendDtmfTonesReqL(TInt aCallId, const TDesC &aTones);
+
+    // From MLtsyDispatchCallControlGetIdentityServiceStatus
+    virtual TInt HandleGetIdentityServiceStatusReqL(RMobilePhone::TMobilePhoneIdService aService);
+
+    // From MLtsyDispatchCallControlSwap
+    virtual TInt HandleSwapReqL(TInt aHeldCallId, TInt aConnectedCallId);
+
+    // From MLtsyDispatchCallControlLoanDataPort
+    virtual TInt HandleLoanDataPortSyncL(TInt aCallId, RCall::TCommPort& aCommPort);
+
+    // From MLtsyDispatchCallControlRecoverDataPort
+    virtual TInt HandleRecoverDataPortSyncL(TInt aCallId, RCall::TCommPort& aCommPort);
+
+    // From MLtsyDispatchCallControlStartDtmfTone
+    virtual TInt HandleStartDtmfToneReqL(TInt aCallId, const TChar& aTone);
+
+	// From MLtsyDispatchCallControlGetActiveAlsLine
+	virtual TInt HandleGetActiveAlsLineReqL();
+
+	// From MLtsyDispatchCallControlDialData
+	virtual TInt HandleDialDataReqL(const RMobilePhone::TMobileAddress& aDialledParty, const RMobileCall::TMobileDataCallParamsV1& aCallParamsV1, TBool aPerformFdnCheck);
+
+	// From MLtsyDispatchCallControlQueryIsEmergencyNumber
+	virtual TInt HandleQueryIsEmergencyNumberSyncL(const TDesC& aNumber, TBool& aIsEmergencyNumber);
+	
+	// From MLtsyDispatchCallControlUpdateLifeTimer
+	virtual TInt HandleUpdateLifeTimerReqL(TUint32 aDuration);
+
+    // From MLtsyDispatchCallControlGetAlsPpSupport
+    virtual TInt HandleGetAlsPpSupportL();
+
+    // From MLtsyDispatchCallControlGetAlsBlockedStatus
+    virtual TInt HandleGetAlsBlockedStatusL();
+
+    // From MLtsyDispatchCallControlSetAlsBlocked
+    virtual TInt HandleSetAlsBlockedL(RMmCustomAPI::TSetAlsBlock aBlocked);
+
+    // From MLtsyDispatchCallControlGetLifeTime
+    virtual TInt HandleGetLifeTimeL();
+
+    // From MLtsyDispatchCallControlTerminateErrorCall
+    virtual TInt HandleTerminateErrorCallL(TInt aCallId);
+
+    // From MLtsyDispatchCallControlTerminateAllCalls
+    virtual TInt HandleTerminateAllCallsL();
+
+    // From MLtsyDispatchCallControlGetCallForwardingIndicatorStatus
+    virtual TInt HandleGetCallForwardingIndicatorL();
+    
+public:
+	MLtsyUnsolicitedCommandObserver* GetUnsolicitedCallControlHandler() const;
+    
+private:
+
+	CLtsyCallControlHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback, CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+
+private:
+
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 *
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+	//Not Owned
+	CGlobalPhonemanager* iGloblePhone;
+	
+	//monitor incoming call
+	CATWaitForCallHandler* iWaitForCall;
+	
+	//Process unsolicited command
+	CUnsolicitedCommandCallControlHandler* iUnsolicitedHandler;
+	
+	//Emergency call
+	CATDialVoice* iEmergencyCall;
+	}; // class CLtsyCallControlHandler
+
+#endif // __CLTSYDISPATCHCALLCONTROLHANDLER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsycallcontrolmultipartyhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCallControlMultipartyHandler
+
+#ifndef __CLTSYDISPATCHCALLCONTROLMULTIPARTYHANDLER_H_
+#define __CLTSYDISPATCHCALLCONTROLMULTIPARTYHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchcallcontrolmultipartyinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyCallControlMultipartyHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported,
+							public MLtsyDispatchCallControlMultipartyConferenceHangUp,
+							public MLtsyDispatchCallControlMultipartyConferenceAddCall,
+							public MLtsyDispatchCallControlMultipartyCreateConference,
+							public MLtsyDispatchCallControlMultipartyConferenceSwap,
+							public MLtsyDispatchCallControlMultipartyConferenceGoOneToOne
+	{
+public:
+
+	virtual ~CLtsyCallControlMultipartyHandler();
+	static CLtsyCallControlMultipartyHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsyCallControlMultipartyHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+
+
+
+    // From MLtsyDispatchCallControlMultipartyConferenceHangUp
+    virtual TInt HandleConferenceHangUpReqL(const RArray<TInt>& aCallIds);
+
+    // From MLtsyDispatchCallControlMultipartyConferenceAddCall
+    virtual TInt HandleConferenceAddCallReqL(TInt aCallId, TInt aExistingCallId);
+
+    // From MLtsyDispatchCallControlMultipartyCreateConference
+    virtual TInt HandleCreateConferenceReqL(TInt aHeldCallId, TInt aSecondCallId);
+
+    // From MLtsyDispatchCallControlMultipartyConferenceSwap
+    virtual TInt HandleConferenceSwapReqL(TInt aHeldCallId, TInt aConnectedCallId);
+
+    // From MLtsyDispatchCallControlMultipartyConferenceGoOneToOne
+    virtual TInt HandleConferenceGoOneToOneReqL(TInt aCallId);
+
+private:
+
+	CLtsyCallControlMultipartyHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+
+	// Not owned
+
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 *
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+
+public:
+
+
+	}; // class CLtsyCallControlMultipartyHandler
+
+#endif // __CLTSYDISPATCHCALLCONTROLMULTIPARTYHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsycellbroadcasthandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCellBroadcastHandler
+
+#ifndef __CLTSYDISPATCHCELLBROADCASTHANDLER_H_
+#define __CLTSYDISPATCHCELLBROADCASTHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchcellbroadcastinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyCellBroadcastHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchCellBroadcastSetBroadcastFilterSetting,
+							public MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage,
+							public MLtsyDispatchCellBroadcastReceiveMessageCancel,
+							public MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing,
+							public MLtsyDispatchCellBroadcastDeleteSimCbTopic
+							
+	{
+public:
+
+	virtual ~CLtsyCellBroadcastHandler();
+	static CLtsyCellBroadcastHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsyCellBroadcastHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+	
+    // From MLtsyDispatchCellBroadcastSetBroadcastFilterSetting
+    virtual TInt HandleSetBroadcastFilterSettingReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter aFilterSetting);
+
+    // From MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage
+    virtual TInt HandleActivateBroadcastReceiveMessageReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter aFilterSetting);
+
+    // From MLtsyDispatchCellBroadcastReceiveMessageCancel
+    virtual TInt HandleReceiveMessageCancelReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter aFilterSetting);
+    
+    // From MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing
+    virtual TInt HandleStartSimCbTopicBrowsingReqL();
+    
+    // From MLtsyDispatchCellDeleteSimCbTopic
+    virtual TInt HandleDeleteSimCbTopicReqL(TUint aIndex, TBool aDeleteFlag);
+
+private:
+	
+	CLtsyCellBroadcastHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsyCellBroadcastHandler
+
+#endif // __CLTSYDISPATCHCELLBROADCASTHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsyfactoryv1.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,94 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file ltsyfactoryv1.h
+// This contains CLtsyFactoryV1 which acting an interface for Lincesee dll
+//
+#ifndef CLTSYFACTORYV1_H
+#define CLTSYFACTORYV1_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32def.h>
+#include <ctsy/ltsy/ltsylogger.h>
+#include <ctsy/ltsy/mltsydispatchfactory.h>
+#include "ltsymacros.h"
+
+//user include
+#include "atunsolicitedobserver.h"
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+class CLtsyCallControlHandler;
+class CLtsyPhoneHandler;
+class CLtsySecurityHandler;
+class CLtsyPhonebookEnHandler;
+class CLtsyCellBroadcastHandler;
+class CLtsyPhonebookOnHandler;
+class CLtsyPhonebookHandler;
+class CLtsySimHandler;
+class CLtsySmsHandler;
+class CLtsyCallControlMultipartyHandler;
+class CLtsySupplementaryServicesHandler;
+class CLtsyPacketServicesHandler;
+class CLtsySatHandler;
+class CGlobalPhonemanager;
+class CUnsolicitedEventMonitor;
+
+class CLtsyFactoryV1 : public CBase, public MLtsyDispatchFactoryV1  
+	{
+public:
+	
+	// Public constructor because this object is constructed in two phases where
+	// the second phase ConstructL() is called explicitly by the creator.
+	CLtsyFactoryV1(); 
+	
+	virtual ~CLtsyFactoryV1();
+
+	// From MLtsyDispatchFactoryV1 (or its base class)
+	virtual void Release();
+	virtual TInt GetDispatchHandler(
+			TLtsyDispatchInterfaceApiId aDispatchInterfaceId,
+			TAny*& aDispatchInterface);
+	virtual MLtsyFactoryBase::TCtsyInterfaceVersion Version();
+	virtual void ConstructL(CCtsyDispatcherCallback& aCallback);
+	virtual TBool IsDispatchInterfaceSupported(TInt aFuncUnitId, TLtsyDispatchInterfaceApiId aDispatchApiId);
+	virtual void IsCallbackIndicatorSupported(TInt aFuncUnitId, TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	virtual CTsySatMessagingBase* GetSatMessagingService(MCtsySatService& aSatMessagingService);
+private:
+	// To prevent explicit construction in this way
+	void NewL() {};
+	void NewLC() {};
+	
+private: // Owned
+	// Dispatch Handlers
+	CLtsyCallControlHandler* iLtsyDispatchCallControlHandler;
+	CLtsyPhoneHandler* iLtsyDispatchPhoneHandler;
+	CLtsySecurityHandler* iLtsyDispatchSecurityHandler;
+	CLtsyPhonebookEnHandler* iLtsyDispatchPhonebookEnHandler;
+	CLtsyCellBroadcastHandler* iLtsyDispatchCellBroadcastHandler;
+	CLtsyPhonebookOnHandler* iLtsyDispatchPhonebookOnHandler;
+	CLtsyPhonebookHandler* iLtsyDispatchPhonebookHandler;
+	CLtsySimHandler* iLtsyDispatchSimHandler;
+	CLtsySmsHandler* iLtsyDispatchSmsHandler;
+	CLtsyCallControlMultipartyHandler* iLtsyDispatchCallControlMultipartyHandler;
+	CLtsySupplementaryServicesHandler* iLtsyDispatchSupplementaryServicesHandler;
+	CLtsyPacketServicesHandler* iLtsyDispatchPacketServicesHandler;
+	CLtsySatHandler* iLtsyDispatchSatHandler;
+	CUnsolicitedEventMonitor* iUnsolicitedEventMonitor;
+public:	
+	CGlobalPhonemanager* iGlobalPhone;
+	}; // class CLtsyFactoryV1
+
+#endif // CLTSYFACTORYV1_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsypacketserviceshandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,224 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPacketServicesHandler
+
+#ifndef __CLTSYDISPATCHPACKETSERVICESHANDLER_H_
+#define __CLTSYDISPATCHPACKETSERVICESHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchpacketservicesinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+struct TContextInfomation
+	{
+	RPacketContext::TContextConfigGPRS iDefContextConfigGPRS;
+	RPacketQoS::TQoSGPRSRequested iQoSConfig;
+	RPacketService::TContextInfo iInfo;
+	TInt iContextID;
+	};
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+class CAsyncHelperRequest;
+class CATGprsNtwkRegStatusChange;
+class CInitialisePdpContext;
+
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyPacketServicesHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchPacketServicesPacketAttach,
+							public MLtsyDispatchPacketServicesGetPacketAttachMode,
+							public MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus,
+							public MLtsyDispatchPacketServicesPacketDetach,
+							public MLtsyDispatchPacketServicesSetPdpContextConfig,
+							public MLtsyDispatchPacketServicesModifyActivePdpContext,
+							public MLtsyDispatchPacketServicesInitialisePdpContext,
+							public MLtsyDispatchPacketServicesDeletePdpContext,
+							public MLtsyDispatchPacketServicesSetPacketAttachMode,
+							public MLtsyDispatchPacketServicesNotifyPacketStatusChange,
+							public MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams,
+							public MLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params,
+							public MLtsyDispatchPacketServicesActivatePdpContext,
+							public MLtsyDispatchPacketServicesSetPdpContextQosGprs,
+							public MLtsyDispatchPacketServicesSetPdpContextQosR99R4,
+							public MLtsyDispatchPacketServicesSetPdpContextQosR5,
+							public MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest,
+							public MLtsyDispatchPacketServicesDeactivatePdpContext,
+							public MLtsyDispatchPacketServicesAddPacketFilter,
+							public MLtsyDispatchPacketServicesGetStatus,
+							public MLtsyDispatchPacketServicesGetStaticCapabilities,
+							public MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists,
+							public MLtsyDispatchPacketServicesGetMaxNoActiveServices,
+							public MLtsyDispatchPacketServicesInitialiseMbmsContext,
+							public MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus,
+							public MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList,
+							public MLtsyDispatchPacketServicesUpdateMbmsSessionList,
+							public MLtsyDispatchPacketServicesRemovePacketFilter
+
+							
+	{
+public:
+
+	virtual ~CLtsyPacketServicesHandler();
+	static CLtsyPacketServicesHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	static CLtsyPacketServicesHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchPacketServicesPacketAttach  //finished
+    virtual TInt HandlePacketAttachReqL();
+
+    // From MLtsyDispatchPacketServicesGetPacketAttachMode  //Nosupport
+    virtual TInt HandleGetPacketAttachModeReqL();
+
+    // From MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus //finished
+    virtual TInt HandleGetPacketNetworkRegistrationStatusReqL();
+
+    // From MLtsyDispatchPacketServicesPacketDetach  //finished
+    virtual TInt HandlePacketDetachReqL();
+
+    // From MLtsyDispatchPacketServicesSetPdpContextConfig  //implementing
+    virtual TInt HandleSetPdpContextConfigReqL(const TDesC& aContextId,
+    				const TDesC8& aAccessPointName,
+    				const RPacketContext::TProtocolType aPdpType,
+    				const TDesC8& aPdpAddress,
+    				const TDesC8& aPcoBuffer);
+
+    // From MLtsyDispatchPacketServicesModifyActivePdpContext
+    virtual TInt HandleModifyActivePdpContextReqL(const TDesC& aContextName);
+
+    // From MLtsyDispatchPacketServicesInitialisePdpContext  //implementing
+    virtual TInt HandleInitialisePdpContextReqL(const TDesC& aPrimaryContextName, const TDesC& aSecondaryContextName);
+
+    // From MLtsyDispatchPacketServicesDeletePdpContext
+    virtual TInt HandleDeletePdpContextReqL(const TDesC& aContextName);
+
+    // From MLtsyDispatchPacketServicesSetPacketAttachMode
+    virtual TInt HandleSetPacketAttachModeReqL(RPacketService::TAttachMode aAttachMode);
+
+    // From MLtsyDispatchPacketServicesNotifyPacketStatusChange
+    virtual TInt HandleNotifyPacketStatusChangeReqL();
+
+    // From MLtsyDispatchPacketServicesSetDefaultPdpGprsContextParams
+    virtual TInt HandleSetDefaultPdpContextGprsParamsReqL(const RPacketContext::TContextConfigGPRS& aContextConfigGprs);
+
+    // From MLtsyDispatchPacketServicesSetDefaultPdpR99R4ContextParams
+    virtual TInt HandleSetDefaultPdpContextR99R4ParamsReqL(const RPacketContext::TContextConfigR99_R4& aContextConfigR99R4);    
+    
+    // From MLtsyDispatchPacketServicesActivatePdpContext
+    virtual TInt HandleActivatePdpContextReqL(const TDesC& aContextName);
+
+    // From MLtsyDispatchPacketServicesSetPdpContextQosGprs    
+    virtual TInt HandleSetPdpContextQosGprsReqL(const TDesC& aContextName, const RPacketQoS::TQoSGPRSRequested& aQoSConfig);
+    
+    // From MLtsyDispatchPacketServicesSetPdpContextQosGprs    
+    virtual TInt HandleSetPdpContextQosR99R4ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR99_R4Requested& aQoSConfig);
+        
+    // From MLtsyDispatchPacketServicesSetPdpContextQosGprs    
+    virtual TInt HandleSetPdpContextQosR5ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR5Requested& aQoSConfig);        
+
+    // From MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest
+    virtual TInt HandleRejectNetworkInitiatedContextActivationRequestReqL();
+
+    // From MLtsyDispatchPacketServicesDeactivatePdpContext
+    virtual TInt HandleDeactivatePdpContextReqL(const TDesC& aContextName);
+
+    // From MLtsyDispatchPacketServicesAddPacketFilter
+    virtual TInt HandleAddPacketFilterSyncL(const TDesC& aContextName,  CArrayFixFlat<RPacketContext::TPacketFilterV2>& aContextFilter);
+    
+    // From MLtsyDispatchPacketServicesGetStatus
+    virtual TInt HandleGetStatusReqL();
+    
+    // From MLtsyDispatchPacketServicesRemovePacketFilter
+    virtual TInt HandleRemovePacketFilterSyncL(const TDesC& aContextName,  TInt aFilterId);
+    
+
+    // From MLtsyDispatchPacketServicesGetStaticCapabilities
+    virtual TInt HandleGetStaticCapabilitiesReqL();
+    
+    // From MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists
+    virtual TInt HandleGetMaxNoMonitoredServiceListsReqL();
+    
+    // From MLtsyDispatchPacketServicesGetMaxNoActiveServices
+    virtual TInt HandleGetMaxNoActiveServicesReqL();
+    
+    // From MLtsyDispatchPacketServicesInitialiseMbmsContext
+    virtual TInt HandleInitialiseMbmsContextReqL(const TDesC& aContextName);
+    
+    // From MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus
+    virtual TInt HandleGetMbmsNetworkServiceStatusReqL(TBool aAttemptAttach);
+
+    // From MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList
+    virtual TInt HandleUpdateMbmsMonitorServiceListsReqL(TMbmsAction aAction, const CPcktMbmsMonitoredServiceList& aServiceList, const CPcktMbmsMonitoredServiceList& aChangeList);
+
+    // From MLtsyDispatchPacketServicesUpdateMbmsSessionList
+    virtual TInt HandleUpdateMbmsSessionListReqL(const TDesC& aContextName, TMbmsAction aAction, TMbmsSessionId aSessionId, const TMbmsSessionIdList& aServiceList);
+    
+
+    
+
+	TDes* NameOfLastAddedContext();
+	TInt MaxNumberOfContexts();
+	TInt GetContext(const TDesC& aName);
+
+private:
+	
+	
+	CLtsyPacketServicesHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+	
+	
+	TInt GenerateNewContextCid(const TDesC& aName);
+	void SetDefaultContextConfigGPRS(const RPacketContext::TContextConfigGPRS* aContextConfigGPRS);
+	//void ContextConfigGPRS(RPacketContext::TContextConfigGPRS* aContextConfigGPRS);
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	CGlobalPhonemanager* iGloblePhone;
+	CAsyncHelperRequest* iAsyncHelperRequest;
+	CATGprsNtwkRegStatusChange* iNtwkRegStatusChange;
+	CInitialisePdpContext* iInitialisePdpContext;
+		
+	RPacketContext::TContextConfigGPRS iDefContextConfigGPRS;
+	}; // class CLtsyPacketServicesHandler
+
+#endif // __CLTSYDISPATCHPACKETSERVICESHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookenhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,96 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookEnHandler
+
+#ifndef __CLTSYDISPATCHPHONEBOOKENHANDLER_H_
+#define __CLTSYDISPATCHPHONEBOOKENHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchphonebookeninterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyPhonebookEnHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchPhonebookEnStoreGetInfo,
+							public MLtsyDispatchPhonebookEnStoreReadAll,
+							public MLtsyDispatchPhonebookEnStoreReadEntry
+							
+	{
+public:
+
+	virtual ~CLtsyPhonebookEnHandler();
+	static CLtsyPhonebookEnHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	static CLtsyPhonebookEnHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchPhonebookEnStoreGetInfo
+    virtual TInt HandleStoreGetInfoReqL();
+
+    // From MLtsyDispatchPhonebookEnStoreReadAll
+    virtual TInt HandleStoreReadAllReqL();
+
+    // From MLtsyDispatchPhonebookEnStoreReadEntry
+    virtual TInt HandleStoreReadEntryReqL(TInt aIndex);
+
+
+private:
+	
+	CLtsyPhonebookEnHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+	//Not Owned
+	CGlobalPhonemanager* iGloblePhone;
+	
+public:
+
+
+	}; // class CLtsyPhonebookEnHandler
+
+#endif // __CLTSYDISPATCHPHONEBOOKENHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,142 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookHandler
+
+#ifndef __CLTSYDISPATCHPHONEBOOKHANDLER_H_
+#define __CLTSYDISPATCHPHONEBOOKHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchphonebookinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyPhonebookHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchPhonebookStoreReadEntry,
+							public MLtsyDispatchPhonebookStoreDeleteEntry,
+							public MLtsyDispatchPhonebookStoreCache,
+							public MLtsyDispatchPhonebookStoreCacheCancel,
+							public MLtsyDispatchPhonebookStoreGetPhonebookInfo,
+							public MLtsyDispatchPhonebookStoreInitialise,
+							public MLtsyDispatchPhonebookStoreDeleteAll,
+							public MLtsyDispatchPhonebookSmsStoreReadAll,
+							public MLtsyDispatchPhonebookStoreWriteEntry,
+							public MLtsyDispatchPhonebookGetPhoneStoreInfo,
+							public MLtsyDispatchPhonebookSmsStoreDeleteEntry,
+							public MLtsyDispatchPhonebookSmsStoreDeleteAll,
+							public MLtsyDispatchPhonebookSmsStoreGetInfo,
+							public MLtsyDispatchPhonebookSmsStoreReadEntry,
+							public MLtsyDispatchPhonebookSmsStoreWriteEntry
+			
+	{
+public:
+
+	virtual ~CLtsyPhonebookHandler();
+	static CLtsyPhonebookHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	static CLtsyPhonebookHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchPhonebookStoreReadEntry
+    virtual TInt HandleStoreReadEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, TInt aIndex, TInt aNumberOfSlots);
+
+    // From MLtsyDispatchPhonebookStoreDeleteEntry
+    virtual TInt HandleStoreDeleteEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, TInt aIndex);
+
+    // From MLtsyDispatchPhonebookStoreCache
+    virtual TInt HandleStoreCacheReqL(DispatcherPhonebook::TPhonebook aPhonebook);
+    
+    // From MLtsyDispatchPhonebookStoreCacheCancel
+    virtual TInt HandleStoreCacheCancelReqL(DispatcherPhonebook::TPhonebook aPhonebook);
+
+    // From MLtsyDispatchPhonebookStoreGetPhonebookInfo
+    virtual TInt HandleStoreGetPhonebookInfoReqL(DispatcherPhonebook::TPhonebook aPhonebook);
+
+    // From MLtsyDispatchPhonebookStoreInitialise
+    virtual TInt HandleStoreInitialiseReqL();
+
+    // From MLtsyDispatchPhonebookStoreDeleteAll
+    virtual TInt HandleStoreDeleteAllReqL(DispatcherPhonebook::TPhonebook aPhonebook);
+
+    // From MLtsyDispatchPhonebookStoreWriteEntry
+    virtual TInt HandleStoreWriteEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, const TDesC8& aEntry);
+
+    // From MLtsyDispatchPhonebookGetPhoneStoreInfo
+    virtual TInt HandleGetPhoneStoreInfoReqL(const TDesC& aStoreName);
+    
+    // From MLtsyDispatchPhonebookSmsStoreReadAll
+    virtual TInt HandleSmsStoreReadAllReqL();
+
+    // From MLtsyDispatchPhonebookSmsStoreDeleteEntry
+    virtual TInt HandleSmsStoreDeleteEntryReqL(TInt aIndex);
+
+    // From MLtsyDispatchPhonebookSmsStoreDeleteAll
+    virtual TInt HandleSmsStoreDeleteAllReqL();
+
+    // From MLtsyDispatchPhonebookSmsStoreGetInfo
+    virtual TInt HandleSmsStoreGetInfoReqL();
+
+    // From MLtsyDispatchPhonebookSmsStoreReadEntry
+    virtual TInt HandleSmsStoreReadEntryReqL(TInt aIndex);
+
+    // From MLtsyDispatchPhonebookSmsStoreWriteEntry
+    virtual TInt HandleSmsStoreWriteEntryReqL(const RMobileSmsStore::TMobileGsmSmsEntryV1& aMobileGsmEntry);
+public:
+	
+	/*virtual void LtsyIPCDataCallBack(TInt aIpc, TInt aError, TAny* aParams);
+	
+	virtual void LtsyINDDataCallBack(TInt aInd, TInt aError, TAny* aParams);*/
+private:
+	
+	CLtsyPhonebookHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	CGlobalPhonemanager*     iGloblePhone;
+public:
+
+
+	}; // class CLtsyPhonebookHandler
+
+#endif // __CLTSYDISPATCHPHONEBOOKHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsyphonebookonhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookOnHandler
+
+#ifndef __CLTSYDISPATCHPHONEBOOKONHANDLER_H_
+#define __CLTSYDISPATCHPHONEBOOKONHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchphonebookoninterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyPhonebookOnHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchPhonebookOnStoreRead,
+							public MLtsyDispatchPhonebookOnStoreDeleteAll,
+							public MLtsyDispatchPhonebookOnStoreReadEntry,
+							public MLtsyDispatchPhonebookOnStoreGetInfo,
+							public MLtsyDispatchPhonebookOnStoreGetReadStoreSize,
+							public MLtsyDispatchPhonebookOnStoreDeleteEntry,
+							public MLtsyDispatchPhonebookOnStoreWriteEntry,
+							public MLtsyDispatchPhonebookOnStoreWrite,
+							public MLtsyDispatchPhonebookOnStoreGetStoreSize
+							
+	{
+public:
+
+	virtual ~CLtsyPhonebookOnHandler();
+	static CLtsyPhonebookOnHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsyPhonebookOnHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchPhonebookOnStoreRead
+    virtual TInt HandleStoreReadReqL(TInt aIndex);
+
+    // From MLtsyDispatchPhonebookOnStoreDeleteAll
+    virtual TInt HandleStoreDeleteAllReqL();
+
+    // From MLtsyDispatchPhonebookOnStoreReadEntry
+    virtual TInt HandleStoreReadEntryReqL(TInt aIndex);
+
+    // From MLtsyDispatchPhonebookOnStoreGetInfo
+    virtual TInt HandleStoreGetInfoReqL();
+
+    // From MLtsyDispatchPhonebookOnStoreGetReadStoreSize
+    virtual TInt HandleStoreGetReadStoreSizeReqL();
+
+    // From MLtsyDispatchPhonebookOnStoreDeleteEntry
+    virtual TInt HandleStoreDeleteEntryReqL(TInt aIndex);
+
+    // From MLtsyDispatchPhonebookOnStoreWriteEntry
+    virtual TInt HandleStoreWriteEntryReqL(const RMobileONStore::TMobileONEntryV1& aMobileOnEntry);
+
+    // From MLtsyDispatchPhonebookOnStoreWrite
+    virtual TInt HandleStoreWriteReqL(const RMobileONStore::TMobileONEntryV1& aMobileOnEntry);
+
+    // From MLtsyDispatchPhonebookOnStoreGetStoreSize
+    virtual TInt HandleStoreGetStoreSizeReqL();
+
+
+private:
+	
+	CLtsyPhonebookOnHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsyPhonebookOnHandler
+
+#endif // __CLTSYDISPATCHPHONEBOOKONHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsyphonehandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,249 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhoneHandler
+
+#ifndef __CLTSYDISPATCHPHONEHANDLER_H_
+#define __CLTSYDISPATCHPHONEHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+#include "globalphonemanager.h"
+
+
+#include "requestbase.h"
+
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+class CRequestBase;
+
+class CInitializePhone;
+class CAsyncHelperRequest;
+class CATNetworkRegStatusChange;
+class CATNotifyCellInfo;
+class CNotifyBatteryAndSignal;
+class CATDetectNetwork;
+class CATSelectNetwork;
+
+
+class MLtsyUnsolicitedCommandObserver;
+class CUnsolicitedWindPhoneHandler;
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsyPhoneHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 		
+							public MLtsyDispatchPhoneGetFdnStatus,
+							public MLtsyDispatchPhoneGetNetworkRegistrationStatus,
+							public MLtsyDispatchPhoneGetHomeNetwork,
+							public MLtsyDispatchPhoneBootNotifyModemStatusReady,
+							public MLtsyDispatchPhoneBootNotifySimStatusReady,
+							public MLtsyDispatchPhoneSimRefreshRegister,
+							public MLtsyDispatchPhoneGetServiceProviderName,
+							public MLtsyDispatchPhoneGetPhoneId,
+							public MLtsyDispatchPhoneGetDetectedNetworks,
+							public MLtsyDispatchPhoneGetDetectedNetworksCancel,
+							public MLtsyDispatchPhoneSelectNetwork,
+							public MLtsyDispatchPhoneSelectNetworkCancel,
+							public MLtsyDispatchPhoneSetNetworkSelectionSetting,
+							public MLtsyDispatchPhoneGetCurrentNetworkInfo,
+							public MLtsyDispatchPhoneGetNetworkMode,
+							public MLtsyDispatchPhoneGetNitzInfo,
+							public MLtsyDispatchPhoneGetSignalStrength,
+							public MLtsyDispatchPhoneGetBatteryInfo,
+							public MLtsyDispatchPhoneNspsWakeup,
+                            public MLtsyDispatchPhoneSetSystemNetworkMode,
+                            public MLtsyDispatchPhoneGetCurrentSystemNetworkModes,
+                            public MLtsyDispatchPhoneResetNetServer,
+                            public MLtsyDispatchPhoneSetAlwaysOnMode,
+                            public MLtsyDispatchPhoneSetDriveMode,
+                            public MLtsyDispatchPhoneGetHspaStatus,
+                            public MLtsyDispatchPhoneSetHspaStatus,
+                            public MLtsyDispatchPhoneGetNetworkProviderName,
+                            public MLtsyDispatchPhoneGetOperatorName,
+                            public MLtsyDispatchPhoneGetCellInfo,
+							public MLtsyDispatchPhoneRegisterCellInfoChangeNotification,
+							public MLtsyDispatchPhoneGetPhoneCellInfo,
+							public MLtsyDispatchPhoneGetUsimServiceSupport,
+							public MLtsyDispatchPhoneGetCurrentActiveUsimApplication,
+							public MLtsyDispatchPhoneTerminateAllCalls,
+							public MLtsyDispatchPhoneGetSystemNetworkBand,
+							public MLtsyDispatchPhoneSetSystemNetworkBand,
+							public MIpcRequestCompleteObserver
+							
+	{
+public:
+	virtual ~CLtsyPhoneHandler();
+	static CLtsyPhoneHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	static CLtsyPhoneHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+	// From MLtsyDispatchPhoneGetFdnStatus
+	virtual TInt HandleGetFdnStatusReqL();
+
+	// From MLtsyDispatchPhoneGetNetworkRegistrationStatus
+	virtual TInt HandleGetNetworkRegistrationStatusReqL();
+
+	// From MLtsyDispatchPhoneGetHomeNetwork
+	virtual TInt HandleGetHomeNetworkReqL();
+
+	// From MLtsyDispatchPhoneBootNotifyModemStatusReady
+	virtual TInt HandleBootNotifyModemStatusReadyReqL();
+
+	// From MLtsyDispatchPhoneBootNotifySimStatusReady
+	virtual TInt HandleBootNotifySimStatusReadyReqL();
+
+	// From MLtsyDispatchPhoneSimRefreshRegister
+	virtual TInt HandleSimRefreshRegisterReqL(TUint16 aFilesToRegister);
+	
+    // From MLtsyDispatchPhoneGetServiceProviderName
+    virtual TInt HandleGetServiceProviderNameReqL();
+
+    // From MLtsyDispatchPhoneGetPhoneId
+    virtual TInt HandleGetPhoneIdReqL();
+
+    // From MLtsyDispatchPhoneGetDetectedNetworks
+    virtual TInt HandleGetDetectedNetworksReqL();
+
+    // From MLtsyDispatchPhoneGetDetectedNetworksCancel
+    virtual TInt HandleGetDetectedNetworksCancelReqL();
+
+    // From MLtsyDispatchPhoneSelectNetwork
+    virtual TInt HandleSelectNetworkReqL(TBool aIsManual, const RMobilePhone::TMobilePhoneNetworkManualSelection& aNetworkManualSelection);
+
+    // From MLtsyDispatchPhoneSelectNetworkCancel
+    virtual TInt HandleSelectNetworkCancelReqL();
+
+    // From MLtsyDispatchPhoneSetNetworkSelectionSetting
+    virtual TInt HandleSetNetworkSelectionSettingReqL(const RMobilePhone::TMobilePhoneNetworkSelectionV1& aPhoneNetworkSelection);
+    
+    // From MLtsyDispatchPhoneGetCurrentNetworkInfo
+    virtual TInt HandleGetCurrentNetworkInfoReqL();
+    
+    // From MLtsyDispatchPhoneGetNetworkMode
+    virtual TInt HandleGetNetworkModeReqL();
+    
+    // From MLtsyDispatchPhoneGetNitzInfo
+    virtual TInt HandleGetNitzInfoReqL();
+    
+    // From MLtsyDispatchPhoneGetSignalStrength
+    virtual TInt HandleGetSignalStrengthReqL();
+    
+    // From MLtsyDispatchPhoneGetBatteryInfo
+    virtual TInt HandleGetBatteryInfoReqL();
+
+	// From MLtsyDispatchPhoneNspsWakeup
+	virtual TInt HandleNspsWakeupReqL();
+
+	// From MLtsyDispatchPhoneSetSystemNetworkMode
+	virtual TInt HandleSetSystemNetworkModeReqL(RMmCustomAPI::TNetworkModeCaps aMode);
+
+	// From MLtsyDispatchPhoneGetCurrentSystemNetworkModes
+	virtual TInt HandleGetCurrentSystemNetworkModesReqL();
+
+	// From MLtsyDispatchPhoneResetNetServer
+	virtual TInt HandleResetNetServerReqL();
+
+	// From MLtsyDispatchPhoneSetAlwaysOnMode
+	virtual TInt HandleSetAlwaysOnModeReqL(RMmCustomAPI::TSetAlwaysOnMode aMode);
+
+	// From MLtsyDispatchPhoneSetDriveMode
+	virtual TInt HandleSetDriveModeReqL(RMmCustomAPI::TSetDriveMode aMode);
+    
+	// From MLtsyDispatchPhoneGetHspaStatus
+	virtual TInt HandleGetHspaStatusReqL();
+
+	// From MLtsyDispatchPhoneSetHspaStatus
+	virtual TInt HandleSetHspaStatusReqL(RMmCustomAPI::THSxPAStatus aStatus);
+    
+	// From MLtsyDispatchPhoneGetNetworkProviderName
+	virtual TInt HandleGetNetworkProviderNameReqL();
+    
+	// From MLtsyDispatchPhoneGetOperatorName
+	virtual TInt HandleGetOperatorNameReqL();
+    
+	// From MLtsyDispatchPhoneGetCellInfo
+	virtual TInt HandleGetCellInfoReqL();
+
+	// From MLtsyDispatchPhoneRegisterCellInfoChangeNotification
+    virtual TInt HandleRegisterCellInfoChangeNotificationReqL();
+    
+    // From MLtsyDispatchPhoneGetPhoneCellInfo
+    virtual TInt HandleGetPhoneCellInfoReqL();
+    
+    // From MLtsyDispatchPhoneGetUsimServiceSupport
+    virtual TInt HandleGetGetUsimServiceSupportReqL(TInt aApplicationNumber);
+    
+    // From MLtsyDispatchPhoneGetCurrentActiveUsimApplication
+    virtual TInt HandleGetCurrentActiveUsimApplicationReqL();
+
+	// From MLtsyDispatchPhoneTerminateAllCalls
+    virtual TInt HandleTerminateAllCallsReqL(TInt aCallId);
+    
+	// From MLtsyDispatchPhoneGetSystemNetworkBand
+    virtual TInt HandleGetSystemNetworkBandReqL();
+    
+    // From MLtsyDispatchPhoneSetSystemNetworkBand
+    virtual TInt HandleSetSystemNetworkBandReqL(RMmCustomAPI::TBandSelection aBand, RMmCustomAPI::TNetworkModeCaps aMode);
+    
+    // From MIpcRequestCompleteObserver
+    virtual void NotifyIpcRequestComplete(TInt aIpcId);
+       
+public:
+	MLtsyUnsolicitedCommandObserver* GetUnsolicitedCallControlHandler() const;	
+private:
+	CLtsyPhoneHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+private:
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	CGlobalPhonemanager* iGloblePhone;
+	CInitializePhone* iInitializePhone;
+	CAsyncHelperRequest* iAsyncHelperRequest;
+	CATNetworkRegStatusChange* iNetworkRegStatusChange;
+	CATNotifyCellInfo* iNotifyCellInfo;
+	CNotifyBatteryAndSignal* iNotifyBatteryAndSignal;
+	CATDetectNetwork* iATDetectNetwork;
+	CATSelectNetwork* iATSelectNetwork;
+	
+	/**
+	 * Process unsolicited command
+	 */
+	CUnsolicitedWindPhoneHandler* iUnsolicitedHandler;
+	
+	/**
+	 * Store the one IPC Id which identify next possible IPC request to be run
+	 */
+	TInt iPendingIpcId;
+	}; // class CLtsyPhoneHandler
+
+#endif // __CLTSYDISPATCHPHONEHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsysathandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,182 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySatHandler
+
+#ifndef __CLTSYDISPATCHSATHANDLER_H_
+#define __CLTSYDISPATCHSATHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchsatinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsySatHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchSatSmsDeliverReport,
+							public MLtsyDispatchSatGetImageInstance,
+							public MLtsyDispatchSatGetIconData,
+							public MLtsyDispatchSatGetClut,
+							public MLtsyDispatchSatGetDefaultBearerCapability,
+							public MLtsyDispatchSatGetSmsPpDownloadSupported,
+							public MLtsyDispatchSatGetSmsControlActivated,
+							public MLtsyDispatchSatCellBroadcastEnvelope,
+							public MLtsyDispatchSatTimingAdvance,
+							public MLtsyDispatchSatSmControlResponseData,
+							public MLtsyDispatchSatProvideLocationInfo,
+							public MLtsyDispatchSatSetPollingInterval,
+							public MLtsyDispatchSatSmsPpDownloadEnvelope,
+							public MLtsyDispatchSatLocalInformationNmr,
+							public MLtsyDispatchSatGetAccessTechnology,
+							public MLtsyDispatchSatGetUssdControlSupported,
+							public MLtsyDispatchSatCallAndSmsControlEnvelope,
+							public MLtsyDispatchSatRefreshAllowed,
+							public MLtsyDispatchSatReady,
+							public MLtsyDispatchSatPCmdNotification,
+							public MLtsyDispatchSatUssdControlEnvelopeError,
+							public MLtsyDispatchSatTimerExpirationEnvelope,
+							public MLtsyDispatchSatTerminalRsp,
+							public MLtsyDispatchSatMenuSelectionEnvelope,
+							public MLtsyDispatchSatEventDownloadEnvelope
+							
+	{
+public:
+
+	virtual ~CLtsySatHandler();
+	static CLtsySatHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsySatHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchSatSmsDeliverReport
+    virtual TInt HandleSmsDeliverReportReqL(const TDesC8& aSmsDeliverReportTpdu);
+
+    // From MLtsyDispatchSatGetImageInstance
+    virtual TInt HandleGetImageInstanceReqL(TUint8 aEfImgRecordNumber, TUint8 aInstanceNumberInEfImgRecord);
+
+    // From MLtsyDispatchSatGetIconData
+    virtual TInt HandleGetIconDataReqL(TUint8 aEfImgRecordNumber, const TDesC8& aSimFilePath);
+
+    // From MLtsyDispatchSatGetClut
+    virtual TInt HandleGetClutReqL(TUint8 aEfImgRecordNumber, TUint8 aInstanceNumberInEfImgRecord);
+
+    // From MLtsyDispatchSatGetDefaultBearerCapability
+    virtual TInt HandleGetDefaultBearerCapabilityReqL();
+
+    // From MLtsyDispatchSatGetSmsPpDownloadSupported
+    virtual TInt HandleGetSmsPpDownloadSupportedReqL();
+
+    // From MLtsyDispatchSatGetSmsControlActivated
+    virtual TInt HandleGetSmsControlActivatedReqL();
+
+    // From MLtsyDispatchSatCellBroadcastEnvelope
+    virtual TInt HandleCellBroadcastEnvelopeReqL(const TDesC8& aEnvelope);
+
+    // From MLtsyDispatchSatTimingAdvance
+    virtual TInt HandleTimingAdvanceReqL();
+
+    // From MLtsyDispatchSatSmControlResponseData
+    virtual TInt HandleSmControlResponseDataReqL(
+    		TUint8 aResult, const TDesC8& aRpDestinationAddress, const TDesC8& aTpDestinationAddress);
+
+	// From MLtsyDispatchSatGetAccessTechnology
+    virtual TInt HandleGetAccessTechnologyReqL();
+    
+    // From MLtsyDispatchSatProvideLocationInfo
+    virtual TInt HandleProvideLocationInfoReqL();
+
+    // From MLtsyDispatchSatSetPollingInterval
+    virtual TInt HandleSetPollingIntervalReqL(TUint8 aPollingInterval);
+
+    // From MLtsyDispatchSatSmsPpDownloadEnvelope
+    virtual TInt HandleSmsPpDownloadEnvelopeReqL(const TDesC8& aEnvelope);
+
+    // From MLtsyDispatchSatLocalInformationNmr
+    virtual TInt HandleLocalInformationNmrReqL();
+    
+    // From MLtsyDispatchSatGetUssdControlSupported
+    virtual TInt HandleGetUssdControlSupportedReqL();
+
+    // From MLtsyDispatchSatCallAndSmsControlEnvelope
+    virtual TInt HandleCallAndSmsControlEnvelopeReqL(const TDesC8& aEnvelope);
+
+    // From MLtsyDispatchSatRefreshAllowed
+    virtual TInt HandleRefreshAllowedReqL(const TDesC8& aRefreshFileList, const TDesC8& aAid, TUint16 aTsyCache);
+
+    // From MLtsyDispatchSatReady
+    virtual TInt HandleReadyReqL();
+
+    // From MLtsyDispatchSatPCmdNotification
+    virtual TInt HandlePCmdNotificationReqL(TUint8 aPCmdType);
+
+    // From MLtsyDispatchSatUssdControlEnvelopeError
+    virtual TInt HandleUssdControlEnvelopeErrorReqL();
+
+    // From MLtsyDispatchSatTimerExpirationEnvelope
+    virtual TInt HandleTimerExpirationEnvelopeReqL(const TDesC8& aEnvelope);
+
+    // From MLtsyDispatchSatTerminalRsp
+    virtual TInt HandleTerminalRspReqL(const TDesC8& aTerminalRsp);
+
+    // From MLtsyDispatchSatMenuSelectionEnvelope
+    virtual TInt HandleMenuSelectionEnvelopeReqL(const TDesC8& aEnvelope);
+
+    // From MLtsyDispatchSatEventDownloadEnvelope
+    virtual TInt HandleEventDownloadEnvelopeReqL(const TDesC8& aEnvelope);
+
+
+private:
+	
+	CLtsySatHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsySatHandler
+
+#endif // __CLTSYDISPATCHSATHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsysecurityhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,128 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySecurityHandler
+
+#ifndef __CLTSYDISPATCHSECURITYHANDLER_H_
+#define __CLTSYDISPATCHSECURITYHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchsecurityinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsySecurityHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchSecurityGetSecurityCodeInfo,
+							public MLtsyDispatchSecurityGetLockInfo,
+							public MLtsyDispatchSecurityAbortSecurityCode,
+							public MLtsyDispatchSecurityGetCurrentActivePin,
+							public MLtsyDispatchSecuritySetLockSetting,
+							public MLtsyDispatchSecurityVerifySecurityCode,
+							public MLtsyDispatchSecurityGetPin1DisableSupported,
+							public MLtsyDispatchSecurityCheckSecurityCode,
+							public MLtsyDispatchSecurityDisablePhoneLock,
+							public MLtsyDispatchSecurityGetCipheringInfo,
+							public MLtsyDispatchSecurityIsSecurityCodeBlocked,
+							public MLtsyDispatchSecurityCheckSecurityCodeCancel							
+	{
+public:
+
+	virtual ~CLtsySecurityHandler();
+	static CLtsySecurityHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsySecurityHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchSecurityGetSecurityCodeInfo
+    virtual TInt HandleGetSecurityCodeInfoReqL(RMobilePhone::TMobilePhoneSecurityCode aSecCode);
+
+    // From MLtsyDispatchSecurityGetLockInfo
+    virtual TInt HandleGetLockInfoReqL(RMobilePhone::TMobilePhoneLock aLockType);
+
+    // From MLtsyDispatchSecurityAbortSecurityCode
+    virtual TInt HandleAbortSecurityCodeReqL(RMobilePhone::TMobilePhoneSecurityCode aSecCode);
+
+    // From MLtsyDispatchSecurityGetCurrentActivePin
+    virtual TInt HandleGetCurrentActivePinReqL();
+
+    // From MLtsyDispatchSecuritySetLockSetting
+    virtual TInt HandleSetLockSettingReqL(RMobilePhone::TMobilePhoneLock aLock, RMobilePhone::TMobilePhoneLockSetting aSetting, const TDesC& aPassword);
+
+    // From MLtsyDispatchSecurityVerifySecurityCode
+    virtual TInt HandleVerifySecurityCodeReqL(RMobilePhone::TMobilePhoneSecurityCode aSecCode,
+    										  const RMobilePhone::TCodeAndUnblockCode& aCodes);
+
+	// From MLtsyDispatchSecurityGetPin1DisableSupported
+	virtual TInt HandleGetPin1DisableSupportedReqL();
+	
+    // From MLtsyDispatchSecurityCheckSecurityCode
+    virtual TInt HandleCheckSecurityCodeReqL(DispatcherSecurity::TSecurityCodeId aSecCodeID, const TDes& aSecCode);
+
+    // From MLtsyDispatchSecurityDisablePhoneLock
+    virtual TInt HandleDisablePhoneLockReqL(const TDesC& aSecCode);
+
+    // From MLtsyDispatchSecurityGetCipheringInfo
+    virtual TInt HandleGetCipheringInfoReqL();
+
+    // From MLtsyDispatchSecurityIsSecurityCodeBlocked
+    virtual TInt HandleIsSecurityCodeBlockedReqL(DispatcherSecurity::TSecurityCodeId aSecCodeID);
+    
+    // From MLtsyDispatchSecurityCheckSecurityCodeCancel
+    virtual TInt HandleCheckSecurityCodeCancelReqL(DispatcherSecurity::TSecurityCodeId aSecCodeID);    
+
+private:
+	
+	CLtsySecurityHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsySecurityHandler
+
+#endif // __CLTSYDISPATCHSECURITYHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsysimhandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,194 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySimHandler
+
+#ifndef __CLTSYDISPATCHSIMHANDLER_H_
+#define __CLTSYDISPATCHSIMHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchsiminterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsySimHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchSimGetApnControlListServiceStatus,
+							public MLtsyDispatchSimDeleteApnName,
+							public MLtsyDispatchSimEnumerateApnEntries,
+							public MLtsyDispatchSimChangeSecurityCode,
+							public MLtsyDispatchSimSetFdnSetting,
+							public MLtsyDispatchSimGetCustomerServiceProfile,
+							public MLtsyDispatchSimGetSubscriberId,
+							public MLtsyDispatchSimAppendApnName,
+							public MLtsyDispatchSimGetActiveIccApplicationType,
+							public MLtsyDispatchSimSetIccMessageWaitingIndicators,
+							public MLtsyDispatchSimSetApnControlListServiceStatus,
+							public MLtsyDispatchSimGetApnName,
+							public MLtsyDispatchSimSimRefreshDone,
+							public MLtsyDispatchSimGetServiceTable,
+							public MLtsyDispatchSimGetIccMessageWaitingIndicators,
+							public MLtsyDispatchSimSimLockActivate,
+							public MLtsyDispatchSimSimLockDeActivate,
+							public MLtsyDispatchSimGetAnswerToReset,
+							public MLtsyDispatchSimGetSimCardReaderStatus,
+							public MLtsyDispatchSimGetSimAuthenticationEapSimData,
+							public MLtsyDispatchSimGetSimAuthenticationEapAkaData,
+							public MLtsyDispatchSimPowerSimOff,
+							public MLtsyDispatchSimPowerSimOn,
+							public MLtsyDispatchSimReadSimFile,
+							public MLtsyDispatchSimSendApduRequest,
+							public MLtsyDispatchSimSendApduRequestV2,
+							public MLtsyDispatchSimSimWarmReset,
+							public MLtsyDispatchSimSetSimMessageStatusRead
+							
+	{
+public:
+
+	virtual ~CLtsySimHandler();
+	static CLtsySimHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsySimHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchSimGetApnControlListServiceStatus
+    virtual TInt HandleGetApnControlListServiceStatusReqL();
+
+    // From MLtsyDispatchSimDeleteApnName
+    virtual TInt HandleDeleteApnNameReqL(TUint32 aIndex);
+
+    // From MLtsyDispatchSimEnumerateApnEntries
+    virtual TInt HandleEnumerateApnEntriesReqL();
+
+    // From MLtsyDispatchSimChangeSecurityCode
+    virtual TInt HandleChangeSecurityCodeReqL(RMobilePhone::TMobilePhoneSecurityCode aSecCode,
+			   const RMobilePhone::TMobilePhonePasswordChangeV1& aPasswds);
+
+    // From MLtsyDispatchSimSetFdnSetting
+    virtual TInt HandleSetFdnSettingReqL(RMobilePhone::TMobilePhoneFdnSetting aFdnSetting);
+
+    // From MLtsyDispatchSimGetCustomerServiceProfile
+    virtual TInt HandleGetCustomerServiceProfileReqL();
+
+    // From MLtsyDispatchSimGetSubscriberId
+    virtual TInt HandleGetSubscriberIdReqL();
+
+    // From MLtsyDispatchSimAppendApnName
+    virtual TInt HandleAppendApnNameReqL(const RMobilePhone::TAPNEntryV3& aEntry);
+
+    // From MLtsyDispatchSimGetActiveIccApplicationType
+    virtual TInt HandleGetActiveIccApplicationTypeReqL();
+
+    // From MLtsyDispatchSimSetIccMessageWaitingIndicators
+    virtual TInt HandleSetIccMessageWaitingIndicatorsReqL(const RMobilePhone::TMobilePhoneMessageWaitingV1& aIndicators);
+
+    // From MLtsyDispatchSimSetApnControlListServiceStatus
+    virtual TInt HandleSetApnControlListServiceStatusReqL(RMobilePhone::TAPNControlListServiceStatus aStatus);
+
+    // From MLtsyDispatchSimGetApnName
+    virtual TInt HandleGetApnNameReqL(TUint32 aIndex);
+
+    // From MLtsyDispatchSimSimRefreshDone
+    virtual TInt HandleSimRefreshDoneReqL(TInt aError);
+    
+    // From MLtsyDispatchPhoneGetServiceTable
+    virtual TInt HandleGetServiceTableReqL(RMobilePhone::TMobilePhoneServiceTable aServiceTable);
+    
+	// From MLtsyDispatchSimGetIccMessageWaitingIndicators
+	virtual TInt HandleGetIccMessageWaitingIndicatorsReqL();
+	
+    // From MLtsyDispatchSimSimLockActivate
+    virtual TInt HandleSimLockActivateReqL(const TDesC& aPassword, RMmCustomAPI::TLockNumber aLockNumber);
+
+    // From MLtsyDispatchSimSimLockDeActivate
+    virtual TInt HandleSimLockDeActivateReqL(const TDesC& aPassword, RMmCustomAPI::TLockNumber aLockNumber);
+
+    // From MLtsyDispatchSimGetAnswerToReset
+    virtual TInt HandleGetAnswerToResetReqL(const TDesC8& aAnswerToReset);
+
+    // From MLtsyDispatchSimGetSimCardReaderStatus
+    virtual TInt HandleGetSimCardReaderStatusReqL();
+
+    // From MLtsyDispatchSimGetSimAuthenticationEapSimData
+    virtual TInt HandleGetSimAuthenticationEapSimDataReqL(const TDesC8& aRandomParameters, TInt aRFStateInfo);
+
+    // From MLtsyDispatchSimGetSimAuthenticationEapAkaData
+    virtual TInt HandleGetSimAuthenticationEapAkaDataReqL(const TDesC8& aRandomParameters, const TDesC8& aAUTN, TInt aRFStateInfo);
+    
+    // From MLtsyDispatchSimPowerSimOff
+    virtual TInt HandlePowerSimOffReqL();
+
+    // From MLtsyDispatchSimPowerSimOn
+    virtual TInt HandlePowerSimOnReqL();
+
+    // From MLtsyDispatchSimReadSimFile
+    virtual TInt HandleReadSimFileReqL(const TDesC8& aPath, TUint16 aOffset, TUint16 aSize);
+
+    // From MLtsyDispatchSimSendApduRequest
+    virtual TInt HandleSimSendApduRequestReqL(TUint8 aServiceType, TUint8 aCardReaderNumber, TUint8 aApplicationType, const TDesC8& aCommandData);
+    
+    // From MLtsyDispatchSimSendApduRequestV2
+    virtual TInt HandleSimSendApduRequestV2ReqL(TUint8 aCardReaderId, const TDesC8& aCommandData);
+
+    // From MLtsyDispatchSimSimWarmReset
+    virtual TInt HandleSimWarmResetReqL();
+
+    // From MLtsyDispatchSimSetSimMessageStatusRead
+    virtual TInt HandleSetSimMessageStatusReadReqL(const TTime& aTimestamp, TInt aTimezoneDiff);
+
+
+private:
+	
+	CLtsySimHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsySimHandler
+
+#endif // __CLTSYDISPATCHSIMHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsysmshandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,138 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySmsHandler
+
+#ifndef __CLTSYDISPATCHSMSHANDLER_H_
+#define __CLTSYDISPATCHSMSHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchsmsinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+class CGlobalPhonemanager;
+class CAtSmsReceive;
+class CAsyncHelperRequest;
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsySmsHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchSmsSendSatSms,
+							public MLtsyDispatchSmsGetSmsStoreInfo,
+							public MLtsyDispatchSmsGetSmspList,
+							public MLtsyDispatchSmsNackSmsStored,
+							public MLtsyDispatchSmsAckSmsStored,
+							public MLtsyDispatchSmsResumeSmsReception,
+							public MLtsyDispatchSmsSendSmsMessage,
+							public MLtsyDispatchSmsSendSmsMessageNoFdnCheck,
+							public MLtsyDispatchSmsSetMoSmsBearer,
+							public MLtsyDispatchSmsStoreSmspListEntry
+{
+public:
+
+	virtual ~CLtsySmsHandler();
+	static CLtsySmsHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	static CLtsySmsHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchSmsSendSatSms
+    virtual TInt HandleSendSatSmsReqL( const TDesC8& aSmsTpdu,
+    										   RMobileSmsMessaging::TMobileSmsDataFormat aDataFormat,
+    										   const RMobilePhone::TMobileAddress& aGsmServiceCentre,
+    										   TBool aMoreMessages
+    										  );
+    
+    // From MLtsyDispatchSmsGetSmsStoreInfo
+    virtual TInt HandleGetSmsStoreInfoReqL(/* TODO: Add request params here */);
+
+    // From MLtsyDispatchSmsGetSmspList
+    virtual TInt HandleGetSmspListReqL(/* TODO: Add request params here */);
+
+    // From MLtsyDispatchSmsNackSmsStored
+    virtual TInt HandleNackSmsStoredReqL(const TDesC8& aMsgPtr, TInt aRpCause);
+    
+    // From MLtsyDispatchSmsNackSmsStored
+    virtual TInt HandleNackSmsStoredReqL(TInt aRpCause);
+
+    // From MLtsyDispatchSmsAckSmsStored
+    virtual TInt HandleAckSmsStoredReqL(const TDesC8& aMsgPtr);
+    
+    // From MLtsyDispatchSmsAckSmsStored
+    virtual TInt HandleAckSmsStoredReqL();
+
+    // From MLtsyDispatchSmsResumeSmsReception
+    virtual TInt HandleResumeSmsReceptionReqL(/* TODO: Add request params here */);
+
+    // From MLtsyDispatchSmsSendSmsMessage
+    virtual TInt HandleSendSmsMessageReqL( const RMobilePhone::TMobileAddress& aDestination,
+        								   const TDesC8& aSmsTpdu,
+        								   RMobileSmsMessaging::TMobileSmsDataFormat aDataFormat,
+        								   const RMobilePhone::TMobileAddress& aGsmServiceCentre,
+        								   TBool aMoreMessages
+        								  ) ;
+
+    // From MLtsyDispatchSmsSendSmsMessageNoFdnCheck
+    virtual TInt HandleSendSmsMessageNoFdnCheckReqL( const RMobilePhone::TMobileAddress& aDestination,
+    												 const TDesC8& aSmsTpdu,
+    											     RMobileSmsMessaging::TMobileSmsDataFormat aDataFormat,
+    											     const RMobilePhone::TMobileAddress& aGsmServiceCentre,
+    											     TBool aMoreMessages
+    											    ) ;
+
+    // From MLtsyDispatchSmsSetMoSmsBearer
+    virtual TInt HandleSetMoSmsBearerReqL(RMobileSmsMessaging::TMobileSmsBearer aBearer);
+
+    // From MLtsyDispatchSmsStoreSmspList
+    virtual TInt HandleStoreSmspListEntryReqL(const RMobileSmsMessaging::TMobileSmspEntryV1& aSmsParam);
+   
+private:
+	
+	CLtsySmsHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	CGlobalPhonemanager* iGloblePhone;
+	CAtSmsReceive       *iAtSmsReceive;
+	CAsyncHelperRequest* iAsyncHelperRequest;
+	
+	}; // class CLtsySmsHandler
+
+#endif // __CLTSYDISPATCHSMSHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/cltsysupplementaryserviceshandler.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,145 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySupplementaryServicesHandler
+
+#ifndef __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_
+#define __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/mltsydispatchsupplementaryservicesinterface.h>
+#include "misdispatchinterfacesupported.h"
+#include "ltsymacros.h"
+
+
+
+// FORWARD DECLARATIONS
+class CCtsyDispatcherCallback;
+
+// Can be removed in real LTSY implementation
+MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+
+// CLASS DECLARATION
+
+/**
+ * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
+ * interfaces to make requests to the Licensee LTSY.
+ */
+class CLtsySupplementaryServicesHandler : 	public CBase,
+							public MIsDispatchInterfaceSupported, 
+							public MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck,
+							public MLtsyDispatchSupplementaryServicesGetCallWaitingStatus,
+							public MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest,
+							public MLtsyDispatchSupplementaryServicesGetCallBarringStatus,
+							public MLtsyDispatchSupplementaryServicesSetCallBarringStatus,
+							public MLtsyDispatchSupplementaryServicesSetCallForwardingStatus,
+							public MLtsyDispatchSupplementaryServicesSetCallWaitingStatus,
+							public MLtsyDispatchSupplementaryServicesSetSsPassword,
+							public MLtsyDispatchSupplementaryServicesGetCallForwardingStatus,
+							public MLtsyDispatchSupplementaryServicesSendUssdMessage,
+							public MLtsyDispatchSupplementaryServicesSendUssdMessageNoFdnCheck,
+                            public MLtsyDispatchSupplementaryServicesSendUssdRelease,
+                            public MLtsyDispatchSupplementaryServicesClearBlacklist
+							
+	{
+public:
+
+	virtual ~CLtsySupplementaryServicesHandler();
+	static CLtsySupplementaryServicesHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	static CLtsySupplementaryServicesHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+
+	// From MIsDispatchInterfaceSupported
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
+	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
+	
+
+
+    // From MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck
+    virtual TInt HandleSendNetworkServiceRequestNoFdnCheckReqL(const TDesC& aRequest);
+
+    // From MLtsyDispatchSupplementaryServicesGetCallWaitingStatus
+    virtual TInt HandleGetCallWaitingStatusReqL();
+
+    // From MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest
+    virtual TInt HandleSendNetworkServiceRequestReqL(const TDesC& aRequest);
+
+    // From MLtsyDispatchSupplementaryServicesGetCallBarringStatus
+    virtual TInt HandleGetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition aCondition);
+
+    // From MLtsyDispatchSupplementaryServicesSetCallBarringStatus
+    virtual TInt HandleSetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition aCondition,
+        RMobilePhone::TMobilePhoneServiceAction aAction,
+        RMobilePhone::TMobileService aGroup,
+        const TDesC& aPassword);
+
+    // From MLtsyDispatchSupplementaryServicesSetCallForwardingStatus
+    virtual TInt HandleSetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition aCondition,
+    		RMobilePhone::TMobileService aServiceGroup,
+    		RMobilePhone::TMobilePhoneServiceAction aAction,
+    		const TDesC& aNumber,
+    		TInt aTimeout);
+
+    // From MLtsyDispatchSupplementaryServicesSetCallWaitingStatus
+    virtual TInt HandleSetCallWaitingStatusReqL(RMobilePhone::TMobileService aService,
+    		RMobilePhone::TMobilePhoneServiceAction aAction);
+
+    // From MLtsyDispatchSupplementaryServicesSetSsPassword
+    virtual TInt HandleSetSsPasswordReqL(const TDesC& aOldPassword,
+			const TDesC& aNewPassword,
+    		MLtsyDispatchSupplementaryServicesSetSsPassword::TServiceType aService);
+
+    // From MLtsyDispatchSupplementaryServicesGetCallForwardingStatus
+    virtual TInt HandleGetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition aCondition, RMobilePhone::TMobileService aService);
+
+    // From MLtsyDispatchSupplementaryServicesSendUssdMessage
+    virtual TInt HandleSendUssdMessageReqL(const TDesC8& aData, TUint8 aDcs, 
+			RMobileUssdMessaging::TMobileUssdDataFormat aFormat, RMobileUssdMessaging::TMobileUssdMessageType aType);
+    
+    // From MLtsyDispatchSupplementaryServicesSendUssdMessagenoFdnCheck
+    virtual TInt HandleSendUssdMessageNoFdnCheckReqL(const TDesC8& aData, TUint8 aDcs, 
+			RMobileUssdMessaging::TMobileUssdDataFormat aFormat, RMobileUssdMessaging::TMobileUssdMessageType aType);
+
+    // From MLtsyDispatchSupplementaryServicesSendUssdRelease
+    virtual TInt HandleSendUssdReleaseReqL();
+
+    // From MLtsyDispatchSupplementaryServicesClearBlacklist
+    virtual TInt HandleClearBlacklistReqL();
+
+
+private:
+	
+	CLtsySupplementaryServicesHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
+	void ConstructL();
+
+private:
+	
+	// Not owned
+	
+	/**
+	 * Callback object in the CTSY Dispatcher.
+	 * 
+	 * Used to complete a request back to the CTSY Dispatcher.
+	 */
+	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
+	
+public:
+
+
+	}; // class CLtsySupplementaryServicesHandler
+
+#endif // __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/ltsymacros.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,59 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+
+/**
+ * This file contains macros to allow the LTSY skeleton to be used with
+ * the Mock LTSY.
+ */
+
+#ifndef __LTSYMACROS_H_
+#define __LTSYMACROS_H_
+
+	#ifdef BUILD_AS_LTSY_STUB
+#define MOCKLTSYREQ(A)//to remove
+		#define MTEST_ISSUE_MOCKLTSYENGINE_REQ(A, B, C, ARGS...)  A = iMockLtsy->ExtFuncL(B,C,##ARGS)
+		#define MTEST_DECLARE_MOCKLTSYENGINE CMockLtsyEngine* iMockLtsy;
+		#define MTEST_FORWARD_DECLARE_MOCKLTSYENGINE class CMockLtsyEngine;
+		#define MTEST_DELETE_MOCKLTSYENGINE delete iMockLtsy
+		#define MTEST_CREATE_MOCKLTSYENGINE(A)  iMockLtsy = CMockLtsyEngine::NewL(A);
+		#define MTEST_INCLUDE_MOCKLTSYENGINE_HEADER "cmockltsyengine.h"
+		#define MTEST_SET_MOCKLTSYENGINE(A) A->iMockLtsy = iMockLtsy
+		#define MTEST_QUERY_SUPPORT_MOCKLTSYENGINE(A,B) return iMockLtsy->IsInterfaceSupported(A, B)
+		#define MTEST_QUERY_IND_SUPPORT_MOCKLTSYENGINE(A,B, C) return iMockLtsy->IsCallbackIndSupported(A, B, C)
+		#define MTEST_DECLARE_EVENT_COUNTER TInt iCounter;
+//all we are doing is is simulating "events from received from baseband occuring at interval of 5s.
+		#define MTEST_WAIT_FOR_NEXT_EVENT	User::After(500000);iCounter++;	
+				
+		#define MTEST_LOG_RECEIVE_EVENT_NO LOG(_L8("LtsyReceiveThread simulated event = %d"), iCounter);
+		#define MTEST_COUNTER_EXCEEDED_SHUTDOWN_RECEIVETHREAD   if(iCounter>3) err = KShutdownLtsyReceiveThread;
+
+	#else
+#define MOCKLTSYREQ(A) //to remove
+		#define MTEST_ISSUE_MOCKLTSYENGINE_REQ(A, B, C, ARGS...)
+		#define MTEST_DECLARE_MOCKLTSYENGINE 
+		#define MTEST_FORWARD_DECLARE_MOCKLTSYENGINE
+		#define MTEST_DELETE_MOCKLTSYENGINE
+		#define MTEST_CREATE_MOCKLTSYENGINE(A)
+		#define MTEST_INCLUDE_MOCKLTSYENGINE_HEADER <e32std.h> //does not reallymatter what header is put here
+		#define MTEST_SET_MOCKLTSYENGINE(A)
+		#define MTEST_QUERY_SUPPORT_MOCKLTSYENGINE(A,B)
+		#define MTEST_QUERY_IND_SUPPORT_MOCKLTSYENGINE(A,B, C)
+		#define MTEST_DECLARE_EVENT_COUNTER
+		#define MTEST_WAIT_FOR_NEXT_EVENT
+		#define MTEST_LOG_RECEIVE_EVENT_NO
+		#define MTEST_COUNTER_EXCEEDED_SHUTDOWN_RECEIVETHREAD   
+	#endif
+
+#endif // __LTSYMACROS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/inc/misdispatchinterfacesupported.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// MIsDispatchInterfaceSupported
+
+#ifndef MISDISPATCHINTERFACESUPPORTED_H_
+#define MISDISPATCHINTERFACESUPPORTED_H_
+
+#include <ctsy/ltsy/mltsydispatchfactory.h>
+
+class MIsDispatchInterfaceSupported
+/**
+ * Interface implemented by the functional unit handlers to return whether a 
+ * specific interface is supported. 
+ */
+	{
+public:
+	
+	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId) = 0;
+	
+	}; // class MIsDispatchInterfaceSupported
+
+#endif // MISDISPATCHINTERFACESUPPORTED_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsycallcontrolhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,1155 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCallControlHandler
+
+//system include
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+#include <ctsy/ltsy/ltsylogger.h>
+//#include <e32des16.h> 
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>
+
+//user include
+#include "cltsycallcontrolhandler.h"
+#include "globalphonemanager.h"
+#include "ltsycommondefine.h"
+#include "mslogger.h"
+#include "ltsymacros.h"
+#include "tsyconfg.h"
+#include "atwaitforcallhandler.h"
+#include "atdialvoice.h"
+#include "athangup.h"
+#include "atanswer.h"
+#include "atchld.h"
+#include "unsolicitedcommandcallcontrolhandler.h"
+#include "atdtmfvts.h"
+#include "ltsycallinformationmanager.h"
+#include "athangupcommandrecords.h"
+
+
+//const define
+_LIT16(KLtsyEmergencyCallNumber911, "911");
+_LIT16(KLtsyEmergencyCallNumber112, "112");
+
+CLtsyCallControlHandler::CLtsyCallControlHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback, CGlobalPhonemanager* aGloblePhone)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback), iGloblePhone(aGloblePhone)
+	{
+
+	}
+
+
+CLtsyCallControlHandler::~CLtsyCallControlHandler()
+	{
+	delete iEmergencyCall;
+	iEmergencyCall = NULL;
+	
+	delete iUnsolicitedHandler;
+	iUnsolicitedHandler = NULL;
+	
+	delete iWaitForCall;
+	iWaitForCall = NULL;
+	}
+
+
+CLtsyCallControlHandler* CLtsyCallControlHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+	CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCallControlHandler* self = new (ELeave) CLtsyCallControlHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyCallControlHandler* CLtsyCallControlHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback, CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCallControlHandler* self=
+			CLtsyCallControlHandler::NewLC(aCtsyDispatcherCallback, aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyCallControlHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{	
+	//Emergency Call
+	iEmergencyCall = CATDialVoice::NewL((*iGloblePhone),iCtsyDispatcherCallback);
+	iEmergencyCall->SetEmergnecyCallFlag(ETrue);
+	
+	//Process unsolicited command
+	iUnsolicitedHandler = CUnsolicitedCommandCallControlHandler::NewL((*iGloblePhone), 
+			                                                          iCtsyDispatcherCallback);
+	
+	//Monitor incoming call
+	iWaitForCall = CATWaitForCallHandler::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iWaitForCall->StartToWaitForCall();
+
+	} // CLtsyCallControlHandler::ConstructL
+
+TBool CLtsyCallControlHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface API is supported or not.
+ *
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+	TBool bFlag(EFalse);
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY
+		case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId :
+			bFlag =  ETrue;
+			break;		
+		case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
+			bFlag =  ETrue;
+			break;
+		case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId :
+			bFlag =  ETrue;
+			break;
+		case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId :
+			bFlag =  ETrue;
+			break;		
+		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId :
+			bFlag = ETrue;
+			break;
+		case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId :
+			bFlag = ETrue;
+			break;
+		default:
+			bFlag = EFalse;
+			break;
+		}
+	return bFlag;
+	}
+
+void CLtsyCallControlHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask)
+/**
+ * Returns the set of callback indicators that are supported.
+ *
+ * @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+ * @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchCallControlNotifyCallStatusChangeIndId |
+		KLtsyDispatchCallControlReceiveUuiIndId |
+		KLtsyDispatchCallControlNotifyDataCallCapsChangeIndId|
+		KLtsyDispatchCallControlNotifyIncomingCallIndId|
+		KLtsyDispatchCallControlNotifyHscsdInfoChangeIndId|
+		KLtsyDispatchCallControlNotifyCallEventIndId|
+		KLtsyDispatchCallControlGetCallInfoIndId|
+		KLtsyDispatchCallControlNotifyIccCallForwardingStatusChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	
+	}
+
+TInt CLtsyCallControlHandler::HandleAnswerReqL(TInt aCallId, TBool aIsIsvCall)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlAnswerComp()
+ *
+ * @param aCallId The Call ID of the call to answer.
+ *
+ * @param aIsIsvCall ETrue if the request to answer the call comes from a
+ * 3rd party application, EFalse otherwise. This parameter exists in case the
+ * LTSY wishes to perform special handling of ISV calls.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleAnswerReqL()"));
+	
+	TInt nEmergencyCallId = iGloblePhone->GetCallInfoManager().FindEmergencyCallId();
+	if (nEmergencyCallId != KErrNotFound)
+		{
+		const TLtsyCallInformation& tCallInfo(iGloblePhone->GetCallInfoManager().GetCallInformationByCallId(nEmergencyCallId));
+		if (TLtsyCallInformation::EHeldCall  !=  tCallInfo.GetCallState())
+			{
+			//Reset Ring state
+			iGloblePhone->GetCallInfoManager().SetIncomingCallFlag(EFalse);			
+			return KErrNotSupported;
+			}
+		}	
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Reset Ring state
+		iGloblePhone->GetCallInfoManager().SetIncomingCallFlag(EFalse);
+		
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		//Create answer call
+		CATAnswer* cAnswerCall = CATAnswer::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cAnswerCall);
+		cAnswerCall->SetAnswerCallId(aCallId);
+		cAnswerCall->SetIsIsvCall(aIsIsvCall);
+		//Start answer
+		cAnswerCall->StartRequest();		
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleAnswerReqL
+
+TInt CLtsyCallControlHandler::HandleHoldReqL(TInt aCallId)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlHoldComp()
+ *
+ * @param aCallId The Call ID of the call to hold.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleHoldReqL"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aCallId = %d"), aCallId);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create hold call
+		CATChld* cHoldCall = CATChld::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cHoldCall);
+		//Check call id is a hold call or not
+		if (cHoldCall->IsHoldCall(aCallId))
+			{
+			LOGTEXT2(_L8("[Ltsy CallControl] aCallId = %d is a hold call so return KErrNone"), aCallId);
+			iGloblePhone->iEventSignalActive = EFalse;
+			return KErrNotSupported;
+			}
+		
+		cHoldCall->SetCallId(aCallId);
+		cHoldCall->SetIpcType(CATChld::ELtsyReqCallHold);
+		cHoldCall->SetChldType(CATChld::EHeldAllActiveCallAndAcceptHeldWaiting);
+		cHoldCall->StartRequest();			
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleHoldReqL
+
+
+TInt CLtsyCallControlHandler::HandleDialEmergencyReqL(const TDes& aEmergencyNumber)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlDialEmergencyComp()
+ *
+ * @param aEmergencyNumber The emergency phone number to dial.  The descriptor
+ * should be of type RMobileENStore::TEmergencyNumber.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleDialEmergencyReqL()"));
+	
+	//Checking is have emergency call
+	if (iGloblePhone->GetCallInfoManager().FindEmergencyCallId() != KErrNotFound)
+		{
+		return KErrNotSupported;
+		}
+	
+	TBuf8<RMobilePhone::KMaxMobileTelNumberSize> tTelNum;
+	tTelNum.Copy(aEmergencyNumber.Left(tTelNum.MaxLength()));
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Init call
+		iEmergencyCall->InitVariable();
+		
+		//Set telnum
+		iEmergencyCall->SetTelephoneNumber(tTelNum);
+		iEmergencyCall->StartRequest();
+		}
+	else // KErrInUse
+		{
+		if (iGloblePhone->GetCallInfoManager().FindDialingOrAlertingCallId() != KErrNotFound)
+			{
+			//Delete last call
+			iGloblePhone->DeleteLastActiveRequest();
+			
+			//Setting Port active
+			iGloblePhone->iEventSignalActive = ETrue;
+			
+			//Init call
+			iEmergencyCall->InitVariable();
+			//Set telnum
+			iEmergencyCall->SetTelephoneNumber(tTelNum);
+			iEmergencyCall->StartRequest();
+			nRet = KErrNone;
+			}	
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleDialEmergencyReqL
+
+TInt CLtsyCallControlHandler::HandleStopDtmfToneReqL(TInt aCallId)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlStopDtmfToneComp()
+ *
+ * @param aCallId Call ID of the connected call the stop request will be sent
+ * through.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleStopDtmfToneReqL()"));
+	LOGTEXT2( _L8("[Ltsy CallControl] CallId = %d"), aCallId);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATDtmfVts* cDtmfVts = CATDtmfVts::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cDtmfVts);
+		
+		//Set CallId
+		nRet = cDtmfVts->SetCallId(aCallId);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}	
+		
+		//Set work type
+		cDtmfVts->SetDtmfWorkType(CATDtmfVts::EDtmfStopOneTone);
+		
+		//Start request
+		cDtmfVts->StartRequest();		
+		}	
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleStopDtmfToneReqL
+
+
+TInt CLtsyCallControlHandler::HandleSetActiveAlsLineReqL(RMobilePhone::TMobilePhoneALSLine /*aAlsLine*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSetActiveAlsLineComp()
+ *
+ * @param aAlsLine The new active ALS line.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleSetActiveAlsLineReqL
+
+
+TInt CLtsyCallControlHandler::HandleSendDtmfTonesCancelReqL(TInt aCallId)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSendDtmfTonesCancelComp()
+ *
+ * @param aCallId The Call ID through which the cancel request should be sent.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleSendDtmfTonesCancelReqL()"));
+	LOGTEXT2( _L8("[Ltsy CallControl] CallId = %d"), aCallId);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATDtmfVts* cDtmfVts = CATDtmfVts::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cDtmfVts);
+		
+		//Set CallId
+		nRet = cDtmfVts->SetCallId(aCallId);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}	
+		
+		//Set work type
+		cDtmfVts->SetDtmfWorkType(CATDtmfVts::EDtmfCancelMoreTones);
+		
+		//Start request
+		cDtmfVts->StartRequest();		
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleSendDtmfTonesCancelReqL
+
+
+TInt CLtsyCallControlHandler::HandleHangUpReqL(TInt aCallId, TInt aHangupCause)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlHangUpComp()
+ *
+ * @param aCallId The Call ID of the call to hang up.
+ *
+ * @param aHangupCause The reason for the hang up request.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleHangUpReqL"));
+	LOGTEXT3(_L8("[Ltsy CallControl]  aCallId = %d aHangupCause = %d"), aCallId, aHangupCause);
+
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Reset Ring state
+		iGloblePhone->GetCallInfoManager().SetIncomingCallFlag(EFalse);
+		
+		//Set hang up active
+		iGloblePhone->GetCallInfoManager().GetHangupCommandRecords().SetHangupActiveFlag(ETrue);
+		
+		//Create Hang up  
+		CATChld* cHangupCall = CATChld::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cHangupCall);
+		cHangupCall->SetCallId(aCallId);
+		cHangupCall->SetHangupCase(aHangupCause);
+		cHangupCall->SetIpcType(CATChld::ELtsyReqCallHangup);
+		cHangupCall->SetChldType(CATChld::ERleaseSpecificCall);
+		cHangupCall->StartRequest();			
+		}
+	else if (nRet == KErrInUse)
+		{
+		LOGTEXT( _L8("[Ltsy CallControl]  Starting Hang up in process so add hangup information"));
+		
+		const TLtsyCallInformation& tCallInfo(iGloblePhone->GetCallInfoManager().GetCallInformationByCallId(aCallId));
+		
+		if (iGloblePhone->GetCallInfoManager().GetHangupCommandRecords().GetHangupActiveFlag())
+			{
+			//Hang up is processing so add its information to array
+			nRet = iGloblePhone->GetCallInfoManager().GetHangupCommandRecords().AddHangupCommandInfo(aCallId, aHangupCause);					
+			}
+		else if (TLtsyCallInformation::EDialingCall  ==  tCallInfo.GetCallState() ||
+				 TLtsyCallInformation::EAlertingCall ==  tCallInfo.GetCallState())
+			{
+			
+			//Delete last call
+			iGloblePhone->DeleteLastActiveRequest();
+			
+			//Setting Port active
+			iGloblePhone->iEventSignalActive = ETrue;	
+			
+			//Set hang up active
+			iGloblePhone->GetCallInfoManager().GetHangupCommandRecords().SetHangupActiveFlag(ETrue);
+			
+			//Create Hang up  
+			CATChld* cHangupCall = CATChld::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+			iGloblePhone->SetActiveRequest(cHangupCall);
+			cHangupCall->SetCallId(aCallId);
+			cHangupCall->SetHangupCase(aHangupCause);
+			cHangupCall->SetIpcType(CATChld::ELtsyReqCallHangup);
+			cHangupCall->SetChldType(CATChld::ERleaseSpecificCall);
+			cHangupCall->StartRequest();
+			nRet = KErrNone;
+			}
+		}	
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleHangUpReqL
+
+
+TInt CLtsyCallControlHandler::HandleResumeReqL(TInt aCallId)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlResumeComp()
+ *
+ * @param aCallId The Call ID of the call to resume.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleResumeReqL"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aCallId = %d"), aCallId);	
+
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATChld* cResumeCall = CATChld::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cResumeCall);
+		if (cResumeCall->IsActiveCall(aCallId))
+			{
+			LOGTEXT2(_L8("[Ltsy CallControl] aCallId = %d is a active call so return KErrNone"), aCallId);
+			iGloblePhone->iEventSignalActive = EFalse;
+			return KErrNotSupported;
+			}
+		cResumeCall->SetCallId(aCallId);
+		cResumeCall->SetIpcType(CATChld::ELtsyReqCallResume);
+		cResumeCall->SetChldType(CATChld::EHeldAllActiveCallAndAcceptHeldWaiting);
+		cResumeCall->StartRequest();		
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleResumeReqL
+
+TInt CLtsyCallControlHandler::HandleSetDynamicHscsdParamsReqL(
+	TInt /*aCallId*/, const RMobileCall::TMobileHscsdCallParamsV1& /*aHscsdParams*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSetDynamicHscsdParamsComp()
+ *
+ * @param aCallId The call ID of the data call.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleSetDynamicHscsdParamsReqL
+
+
+TInt CLtsyCallControlHandler::HandleDialVoiceReqL(RMobilePhone::TMobilePhoneALSLine /*aLine*/,
+	const RMobilePhone::TMobileAddress& aDialledParty, const RMobileCall::TMobileCallParamsV1& /*aCallParamsV1*/,
+	TBool /*aIsIsvCall*/, RMobileCall::TCallParamOrigin /*aCallOrigin*/, TBool /*aPerformFdnCheck*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlDialVoiceComp()
+ *
+ * @param aCallLine The line to use to dial the call.
+ *
+ * @param aDialledParty Details about the dialled party including the phone
+ * number to dial.
+ *
+ * @param aCallParamsV1 The call parameters of the call to dial.
+ *
+ * @param aIsIsvCall Indicates whether the call originated from a third party
+ * application.
+ *
+ * @param aCallOrigin The origin of the dial request. e.g. Whether the dial
+ * came from an Etel client or the SIM or another source.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleDialVoiceReqL()"));
+	
+	TInt nEmergencyCallId = iGloblePhone->GetCallInfoManager().FindEmergencyCallId();
+	if (nEmergencyCallId != KErrNotFound)
+		{
+		const TLtsyCallInformation& tCallInfo(iGloblePhone->GetCallInfoManager().GetCallInformationByCallId(nEmergencyCallId));
+		if (TLtsyCallInformation::EHeldCall  !=  tCallInfo.GetCallState())
+			{
+			return KErrNotSupported;
+			}
+		}
+	
+	//Set telephone number
+	TBuf8<KCommsDbSvrMaxFieldLength> dialModifier;
+	TInt nRet = iGloblePhone->iConfiguration->ConfigModemStringL(
+								TPtrC(KCDTypeNameDialToneWaitModifier),
+								dialModifier);
+	if (nRet != KErrNone)
+		{
+		return nRet;
+		}
+	
+	TBuf8<RMobilePhone::KMaxMobileTelNumberSize> tTelNum;
+	tTelNum.Copy(aDialledParty.iTelNumber.Left(tTelNum.MaxLength()));
+	
+	nRet = tTelNum.FindF(dialModifier);
+	if (nRet != KErrNotFound)
+		{
+		tTelNum.Delete(nRet, 1);
+		}
+	
+	nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create dial voice
+		CATDialVoice* cDialVoice = CATDialVoice::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cDialVoice);
+		cDialVoice->SetTelephoneNumber(tTelNum);
+		cDialVoice->StartRequest();
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleDialReqL
+
+TInt CLtsyCallControlHandler::HandleTransferReqL(TInt /*aHeldCallId*/, TInt /*aSecondCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlTransferComp()
+ *
+ * @param aHeldCallId Call ID of the held call to transfer.
+ *
+ * @param aSecondCallId Call ID of the other to transfer the held call to.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleTransferReqL
+
+
+TInt CLtsyCallControlHandler::HandleSendDtmfTonesReqL(TInt aCallId, const TDesC &aTones)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSendDtmfTonesComp()
+ *
+ * @param aCallId The Call ID of the call through which the DTMF string will be
+ * sent.
+ *
+ * @param aTones Tones to send through the active call.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT( _L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleSendDtmfTonesReqL()"));
+	LOGTEXT3( _L8("[Ltsy CallControl] CallId = %d\tTones = %S"), aCallId, &aTones);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATDtmfVts* cDtmfVts = CATDtmfVts::NewL((*iGloblePhone), iCtsyDispatcherCallback);	
+		iGloblePhone->SetActiveRequest(cDtmfVts);
+		//Set CallId
+		TInt nRet = cDtmfVts->SetCallId(aCallId);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}	
+		
+		//Set Tones
+		nRet = cDtmfVts->SetDtmfString(aTones);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}	
+		
+		//set work type
+		cDtmfVts->SetDtmfWorkType(CATDtmfVts::EDtmfSendMoreTones);
+		cDtmfVts->StartRequest();
+		}	
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleSendDtmfTonesReqL
+
+
+TInt CLtsyCallControlHandler::HandleGetIdentityServiceStatusReqL(RMobilePhone::TMobilePhoneIdService /*aService*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetIdentityServiceStatusComp()
+ *
+ * @param aService The service whose status needs to be retrieved.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetIdentityServiceStatusReqL
+
+
+TInt CLtsyCallControlHandler::HandleSwapReqL(TInt aHeldCallId, TInt aConnectedCallId)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSwapComp()
+ *
+ * @param aHeldCallId The Call ID of the held call to swap.
+ *
+ * @param aConnectedCallId The Call ID of the connected call to swap.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleSwapReqL"));
+	LOGTEXT3(_L8("[Ltsy CallControl] aHeldCallId = %d\taConnectedCallId = %d"), aHeldCallId, aConnectedCallId);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATChld* cSwapCall = CATChld::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cSwapCall);
+		cSwapCall->SetCallId(aHeldCallId);
+		cSwapCall->SetConnectedCallId(aConnectedCallId);
+		cSwapCall->SetIpcType(CATChld::ELtsyReqCallSwap);
+		cSwapCall->SetChldType(CATChld::EHeldAllActiveCallAndAcceptHeldWaiting);
+		cSwapCall->StartRequest();			
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleSwapReqL
+
+TInt CLtsyCallControlHandler::HandleLoanDataPortSyncL(TInt /*aCallId*/, RCall::TCommPort& /*aCommPort*/)
+/**
+ * This request is part of
+ * MLtsyDispatchCallControlLoanDataPort::HandleLoanDataPortSyncL()
+ *
+ * @param aCallId Call ID of the data call requiring the data port.
+ *
+ * @param aCommPort Output parameter. The communications port information
+ * retrieved by a client using the RCall::LoanDataPort() API.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleLoanDataPortSyncL
+
+
+TInt CLtsyCallControlHandler::HandleRecoverDataPortSyncL(TInt /*aCallId*/, RCall::TCommPort& /*aCommPort*/)
+/**
+ * This request is part of
+ * MLtsyDispatchCallControlRecoverDataPort::HandleRecoverDataPortSyncL()
+ *
+ * @param aCallId Call ID of the data call requiring the data port.
+ *
+ * @param aCommPort The data port to recover.  This contains the details previously
+ * returned by a call to RCall::LoanDataPort()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleRecoverDataPortSyncL
+
+
+TInt CLtsyCallControlHandler::HandleStartDtmfToneReqL(TInt aCallId, const TChar& aTone)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlStartDtmfTone()
+ *
+ * @param aCallId Call ID of the connected call through which the DTMF tone
+ * will be sent.
+ *
+ * @param aTone The tone character to send through the call.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleStartDtmfToneReqL()"));
+	LOGTEXT2( _L8("[Ltsy CallControl] CallId = %d"), aCallId);
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Create DTMF 
+		CATDtmfVts* cDtmfVts = CATDtmfVts::NewL((*iGloblePhone), iCtsyDispatcherCallback);	
+		iGloblePhone->SetActiveRequest(cDtmfVts);
+		//Set CallId
+		TInt nRet = cDtmfVts->SetCallId(aCallId);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}	
+		
+		//Set Tones
+		TBuf<16> bufTone;
+		bufTone.Append(aTone);
+		nRet = cDtmfVts->SetDtmfString(bufTone);
+		if (nRet != KErrNone)
+			{
+			return nRet;
+			}
+		
+		//set work type
+		cDtmfVts->SetDtmfWorkType(CATDtmfVts::EDtmfSendOneTone);
+		cDtmfVts->StartRequest();
+		}
+	
+	return nRet;	
+	} // CLtsyCallControlHandler::HandleStartDtmfToneSyncL
+
+TInt CLtsyCallControlHandler::HandleGetActiveAlsLineReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetActiveAlsLineComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TO DO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetActiveAlsLineReqL
+
+TInt CLtsyCallControlHandler::HandleDialDataReqL(const RMobilePhone::TMobileAddress& /*aDialledParty*/, const RMobileCall::TMobileDataCallParamsV1& /*aCallParamsV1*/, TBool /*aPerformFdnCheck*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetActiveAlsLineComp()
+ *
+ * @param aLine The line to use to dial the call.
+ *
+ * @param aDialledParty Details about the dialled party including the phone
+ * number to dial.
+ *
+ * @param aCallParamsV1 The call parameters of the call to dial.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TO DO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleDialDataReqL
+
+TInt CLtsyCallControlHandler::HandleQueryIsEmergencyNumberSyncL(const TDesC& aNumber, TBool& aIsEmergencyNumber)
+/**
+ * This request is part of
+ * MLtsyDispatchCallControlQueryIsEmergencyNumber::HandleQueryIsEmergencyNumberSyncL()
+ *
+ * @param aNumber Input parameter. The phone number being queried to see
+ * if it is an emergency number or not.
+ *
+ * @param aIsEmergencyNumber Output parameter used to indicate whether the
+ * aNumber parameter is an emergency number. ETrue if it is, EFalse otherwise.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleQueryIsEmergencyNumberSyncL()"));
+	
+	TInt nEmergencyCallId = iGloblePhone->GetCallInfoManager().FindEmergencyCallId();
+	if (nEmergencyCallId != KErrNotFound)
+		{
+		const TLtsyCallInformation& tCallInfo(iGloblePhone->GetCallInfoManager().GetCallInformationByCallId(nEmergencyCallId));
+		if (TLtsyCallInformation::EHeldCall  !=  tCallInfo.GetCallState())
+			{			
+			return KErrNotSupported;
+			}
+		}	
+	
+	//Check Emergency call number	
+	if (aNumber.CompareF(KLtsyEmergencyCallNumber911) == 0 ||
+		aNumber.CompareF(KLtsyEmergencyCallNumber112) == 0 )
+		{
+		aIsEmergencyNumber = ETrue;
+		}
+	else
+		{
+		aIsEmergencyNumber = EFalse;
+		}
+	
+	return KErrNone;
+	} // CLtsyCallControlHandler::HandleQueryIsEmergencyNumberSyncL
+
+
+TInt CLtsyCallControlHandler::HandleGetAlsPpSupportL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetAlsPpSupportComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetAlsPp
+
+TInt CLtsyCallControlHandler::HandleGetAlsBlockedStatusL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetAlsBlockedStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetAlsBlockedStatus
+
+TInt CLtsyCallControlHandler::HandleSetAlsBlockedL(RMmCustomAPI::TSetAlsBlock /*aBlocked*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlSetAlsBlockedComp()
+ *
+ *
+ * @param aBlocked RMmCustomAPI::EDeactivateBlock when the ALS blocked needs to be deactivate,
+ *                 RMmCustomAPI::EActivateBlock when the  ALS blocked needs to be activate.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleSetAlsBlockedL
+
+TInt CLtsyCallControlHandler::HandleGetLifeTimeL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetLifeTimeComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetLifeTime
+
+TInt CLtsyCallControlHandler::HandleTerminateErrorCallL(TInt /*aCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlTerminateErrorCallComp()
+ *
+ *
+ * @param aCallId The Call ID of the call to terminate.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleTerminateErrorCallL
+
+TInt CLtsyCallControlHandler::HandleTerminateAllCallsL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::::CallbackCallControlTerminateAllCallsComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy CallControl]  Starting CLtsyCallControlHandler::HandleTerminateAllCallsL()"));
+	
+	TInt nRet = iGloblePhone->CheckGlobalPhoneStatus();
+	if (nRet == KErrNone)
+		{
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		
+		//Reset Ring state
+		iGloblePhone->GetCallInfoManager().SetIncomingCallFlag(EFalse);		
+		
+		CATHangUp* cTerminateAllCalls = CATHangUp::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->SetActiveRequest(cTerminateAllCalls);
+		cTerminateAllCalls->SetHangupOperator(CATHangUp::ECustomAPI);
+		cTerminateAllCalls->StartRequest();	
+		}
+	
+	return nRet;
+	} // CLtsyCallControlHandler::HandleTerminateAllCallsL
+
+TInt CLtsyCallControlHandler::HandleGetCallForwardingIndicatorL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlGetCallForwardingIndicatorComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler::HandleGetCallForwardingIndicator
+
+TInt CLtsyCallControlHandler::HandleUpdateLifeTimerReqL(TUint32 /*aDuration*/)
+/**
+ * This request is completed by invoking
+ *  CCtsyDispatcherCallback::CallbackCallControlUpdateLifeTimerComp
+ *
+ * @param aDuration Time spent on call since the last invocation of this method.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TO DO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlHandler:::HandleUpdateLifeTimerReqL
+
+
+MLtsyUnsolicitedCommandObserver* CLtsyCallControlHandler::GetUnsolicitedCallControlHandler() const
+	{
+	return static_cast<MLtsyUnsolicitedCommandObserver*>(iUnsolicitedHandler);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsycallcontrolmultipartyhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,233 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCallControlMultipartyHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsycallcontrolmultipartyhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsyCallControlMultipartyHandler::CLtsyCallControlMultipartyHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+
+CLtsyCallControlMultipartyHandler::~CLtsyCallControlMultipartyHandler()
+	{
+	}
+
+
+CLtsyCallControlMultipartyHandler* CLtsyCallControlMultipartyHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCallControlMultipartyHandler* self = new (ELeave) CLtsyCallControlMultipartyHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyCallControlMultipartyHandler* CLtsyCallControlMultipartyHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCallControlMultipartyHandler* self=
+			CLtsyCallControlMultipartyHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyCallControlMultipartyHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+
+	} // CLtsyCallControlMultipartyHandler::ConstructL
+
+TBool CLtsyCallControlMultipartyHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ *
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyCallControlMultipartyHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ *
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId |
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId |
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsyCallControlMultipartyHandler::HandleConferenceHangUpReqL(const RArray<TInt>& /*aCallIds*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlMultipartyConferenceHangUpComp()
+ *
+ * @param aCallIds Array of all Call IDs, which belong to the conference.
+ * This array will be destroyed after the function call returns. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlMultipartyHandler::HandleConferenceHangUpReqL
+
+
+TInt CLtsyCallControlMultipartyHandler::HandleConferenceAddCallReqL(TInt /*aCallId*/, TInt /*aExistingCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlMultipartyConferenceAddCallComp()
+ *
+ * @param aCallId The Call ID of the call to be added to the conference.
+ * @param aExistingCallId The Call ID of one of the calls which is already a part of the conference call.
+ * This can be the Call ID of any of the existing calls in the conference, not necessarily the first one that was added.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlMultipartyHandler::HandleConferenceAddCallReqL
+
+
+TInt CLtsyCallControlMultipartyHandler::HandleCreateConferenceReqL(TInt /*aHeldCallId*/, TInt /*aSecondCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlMultipartyCreateConferenceComp()
+ *
+ * @param aHeldCallId The Call ID of the held call.
+ *
+ * @param aSecondCallId The Call ID of the other call to create a conference with.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlMultipartyHandler::HandleCreateConferenceReqL
+
+
+TInt CLtsyCallControlMultipartyHandler::HandleConferenceSwapReqL(
+		TInt /*aHeldCallId*/, TInt /*aConnectedCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlMultipartyConferenceSwapComp()
+ *
+ * @param aHeldCallId The Call ID of the held call.
+ *
+ * @param aConnectedCallId The Call ID of the connected call.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlMultipartyHandler::HandleConferenceSwapReqL
+
+
+TInt CLtsyCallControlMultipartyHandler::HandleConferenceGoOneToOneReqL(TInt /*aCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCallControlMultipartyConferenceGoOneToOneComp()
+ *
+ * @param aCallId The Call ID of the call with which to go one to one.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCallControlMultipartyHandler::HandleConferenceGoOneToOneReqL
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsycellbroadcasthandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,209 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyCellBroadcastHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+#include "cltsycellbroadcasthandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsyCellBroadcastHandler::CLtsyCellBroadcastHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsyCellBroadcastHandler::~CLtsyCellBroadcastHandler()
+	{
+	}
+
+
+CLtsyCellBroadcastHandler* CLtsyCellBroadcastHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCellBroadcastHandler* self = new (ELeave) CLtsyCellBroadcastHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyCellBroadcastHandler* CLtsyCellBroadcastHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyCellBroadcastHandler* self=
+			CLtsyCellBroadcastHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyCellBroadcastHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsyCellBroadcastHandler::ConstructL
+
+TBool CLtsyCellBroadcastHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyCellBroadcastHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsyCellBroadcastHandler::HandleSetBroadcastFilterSettingReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter /*aFilterSetting*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCellBroadcastSetBroadcastFilterSettingComp
+ *
+ * @param aFilterSetting Broadcast filter setting
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCellBroadcastHandler::HandleSetBroadcastFilterSettingReqL
+
+
+TInt CLtsyCellBroadcastHandler::HandleActivateBroadcastReceiveMessageReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter /*aFilterSetting*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCellBroadcastActivateBroadcastReceiveMessageComp
+ *
+ * @param aFilterSetting Broadcast filter setting
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCellBroadcastHandler::HandleActivateBroadcastReceiveMessageReqL
+
+
+TInt CLtsyCellBroadcastHandler::HandleReceiveMessageCancelReqL(RMobileBroadcastMessaging::TMobilePhoneBroadcastFilter /*aFilterSetting*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCellBroadcastReceiveMessageCancelComp
+ *
+ * @param aFilterSetting Broadcast filter setting
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCellBroadcastHandler::HandleReceiveMessageCancelReqL
+	
+TInt CLtsyCellBroadcastHandler::HandleStartSimCbTopicBrowsingReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCellBroadcastStartSimCbTopicBrowsingComp
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCellBroadcastHandler::HandleStartSimCbTopicBrowsingReqL
+	
+TInt CLtsyCellBroadcastHandler::HandleDeleteSimCbTopicReqL(TUint /*aIndex*/, TBool /*aDeleteFlag*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackCellBroadcastDeleteSimCbTopicComp
+ *
+ * @param aIndex SimCb topic number.
+ * @param aDeleteFlag topic in sim memory delete flag.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyCellBroadcastHandler::HandleDeleteSimCbTopicReqL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsyfactoryv1.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,1211 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file ltsyfactoryv1.cpp
+// This contains CLtsyFactoryV1 which acting an interface for Lincesee dll
+// 
+// system include
+#include <ctsy/ltsy/mltsydispatchinterface.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+// use include
+#include "cltsyfactoryv1.h"
+#include "cltsycallcontrolhandler.h"
+#include "cltsyphonehandler.h"
+#include "cltsysecurityhandler.h"
+#include "cltsyphonebookenhandler.h"
+#include "cltsycellbroadcasthandler.h"
+#include "cltsyphonebookonhandler.h"
+#include "cltsyphonebookhandler.h"
+#include "cltsysimhandler.h"
+#include "cltsysmshandler.h"
+#include "cltsycallcontrolmultipartyhandler.h"
+#include "cltsysupplementaryserviceshandler.h"
+#include "cltsypacketserviceshandler.h"
+#include "cltsysathandler.h"
+#include "globalphonemanager.h"
+#include "unsolicitedeventmonitor.h"
+#include "unsolicitedcommandcallcontrolhandler.h"
+
+
+CLtsyFactoryV1::CLtsyFactoryV1()
+	{
+	}
+
+CLtsyFactoryV1::~CLtsyFactoryV1()
+	{
+	TSYLOGENTRYEXIT;
+
+	// Delete dispatch handlers
+	delete iLtsyDispatchCallControlHandler;
+	iLtsyDispatchCallControlHandler = NULL;
+
+	delete iLtsyDispatchPhoneHandler;
+	iLtsyDispatchPhoneHandler = NULL;
+
+	delete iLtsyDispatchSecurityHandler;
+	iLtsyDispatchSecurityHandler = NULL;
+
+	delete iLtsyDispatchPhonebookEnHandler;
+	iLtsyDispatchPhonebookEnHandler = NULL;
+
+	delete iLtsyDispatchCellBroadcastHandler;
+	iLtsyDispatchCellBroadcastHandler = NULL;
+
+	delete iLtsyDispatchPhonebookOnHandler;
+	iLtsyDispatchPhonebookOnHandler = NULL;
+
+	delete iLtsyDispatchPhonebookHandler;
+	iLtsyDispatchPhonebookHandler = NULL;
+
+	delete iLtsyDispatchSimHandler;
+	iLtsyDispatchSimHandler = NULL;
+
+	delete iLtsyDispatchSmsHandler;
+	iLtsyDispatchSmsHandler = NULL;
+
+	delete iLtsyDispatchCallControlMultipartyHandler;
+	iLtsyDispatchCallControlMultipartyHandler = NULL;
+
+	delete iLtsyDispatchSupplementaryServicesHandler;
+	iLtsyDispatchSupplementaryServicesHandler = NULL;
+
+	delete iLtsyDispatchPacketServicesHandler;
+	iLtsyDispatchPacketServicesHandler = NULL;
+
+	delete iLtsyDispatchSatHandler;
+	iLtsyDispatchSatHandler = NULL;
+	
+	delete iUnsolicitedEventMonitor;
+	iUnsolicitedEventMonitor = NULL;
+	
+	delete iGlobalPhone;
+	iGlobalPhone = NULL;
+	}
+
+MLtsyFactoryBase::TCtsyInterfaceVersion CLtsyFactoryV1::Version()
+	{
+	TSYLOGENTRYEXIT;
+	return EIfVersion1;
+	}
+
+void CLtsyFactoryV1::ConstructL(CCtsyDispatcherCallback& aCallback)
+/**
+ * Second phase constructor. This function must be called explicitly
+ * by the client to complete construction before any other functions in this
+ * class are called.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	// create global phone manager
+	iGlobalPhone = CGlobalPhonemanager::NewL();
+	
+	// create the call control handler
+	iLtsyDispatchCallControlHandler = CLtsyCallControlHandler::NewL(aCallback, iGlobalPhone);
+	
+	// create the phone control handler
+	iLtsyDispatchPhoneHandler = CLtsyPhoneHandler::NewL(aCallback,iGlobalPhone);
+	
+	// create the sms control handler
+	iLtsyDispatchSmsHandler = CLtsySmsHandler::NewL(aCallback,iGlobalPhone);
+	
+	// create the packect service control handler
+	iLtsyDispatchPacketServicesHandler = CLtsyPacketServicesHandler::NewL(aCallback,iGlobalPhone);
+    
+	// create the phone book control handler
+	iLtsyDispatchPhonebookHandler = CLtsyPhonebookHandler::NewL(aCallback,iGlobalPhone);
+
+	// create the security control handler
+	iLtsyDispatchSecurityHandler = CLtsySecurityHandler::NewL(aCallback);
+	
+	// create the EN phone book control handler
+	iLtsyDispatchPhonebookEnHandler = CLtsyPhonebookEnHandler::NewL(aCallback,iGlobalPhone);
+	
+	// create the cell broad cast control handler
+	iLtsyDispatchCellBroadcastHandler = CLtsyCellBroadcastHandler::NewL(aCallback);
+	
+	// create the ON phone book control handler
+	iLtsyDispatchPhonebookOnHandler = CLtsyPhonebookOnHandler::NewL(aCallback);
+		
+	// create the sim card control handler
+	iLtsyDispatchSimHandler = CLtsySimHandler::NewL(aCallback);
+	
+	// create the conference call control handler
+	iLtsyDispatchCallControlMultipartyHandler = CLtsyCallControlMultipartyHandler::NewL(aCallback);
+	
+	// create the supplementary service control handler
+	iLtsyDispatchSupplementaryServicesHandler = CLtsySupplementaryServicesHandler::NewL(aCallback);
+		
+	// create the sat control handler
+	iLtsyDispatchSatHandler = CLtsySatHandler::NewL(aCallback);
+	
+	//Create unsolicited observer
+	iUnsolicitedEventMonitor = CUnsolicitedEventMonitor::NewL(*iGlobalPhone, aCallback);
+	
+	// create the security control handler
+	iUnsolicitedEventMonitor->AddUnsolicitedObserver(iLtsyDispatchCallControlHandler->GetUnsolicitedCallControlHandler());
+	
+	// create the security control handler
+	iUnsolicitedEventMonitor->StartUnsolicitedObserver();
+	} // CLtsyFactoryV1::ConstructL
+
+
+TInt CLtsyFactoryV1::GetDispatchHandler(
+			TLtsyDispatchInterfaceApiId aDispatchInterfaceId,
+			TAny*& aDispatchInterface)
+/**
+ * Part of the MLtsyFactoryV1 interface.  Returns the requested dispatch handler.
+ * For more details see MLtsyFactoryV1::GetDispatchHandler
+ *
+ * @param aInterfaceId The dispatch interface identifier of the requested
+ * interface.
+ *
+ * @param aDispatchInterface If this function completes with KErrNone, will contain
+ * a reference to a pointer to the dispatch handler interface in the LTSY.
+ * aDispatchInterface may be NULL. Otherwise the parameter will remain unchanged.
+ *
+ * @return KErrNone if the requested interface was returned in the
+ * aDispatchInterface parameter; KErrNotFound if the requested interface
+ * was not found in the Licensee LTSY.
+ */
+	{
+	TSYLOGENTRYEXITARGS(_L8("aDispatchInterfaceId=%d"), aDispatchInterfaceId);
+
+	switch (aDispatchInterfaceId)
+		{
+
+		// Handlers for IPCs used in boot sequence
+
+	case MLtsyDispatchPhoneBootNotifyModemStatusReady::KLtsyDispatchPhoneBootNotifyModemStatusReadyApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneBootNotifyModemStatusReady*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneBootNotifySimStatusReady*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetNetworkRegistrationStatus*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSimRefreshRegister::KLtsyDispatchPhoneSimRefreshRegisterApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSimRefreshRegister*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetFdnStatus::KLtsyDispatchPhoneGetFdnStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetFdnStatus*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetHomeNetwork::KLtsyDispatchPhoneGetHomeNetworkApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetHomeNetwork*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneNspsWakeup::KLtsyDispatchPhoneNspsWakeupApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneNspsWakeup*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetSystemNetworkMode::KLtsyDispatchPhoneSetSystemNetworkModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetSystemNetworkMode*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetCurrentSystemNetworkModes::KLtsyDispatchPhoneGetCurrentSystemNetworkModesApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetCurrentSystemNetworkModes*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneResetNetServer::KLtsyDispatchPhoneResetNetServerApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneResetNetServer*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetAlwaysOnMode::KLtsyDispatchPhoneSetAlwaysOnModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetAlwaysOnMode*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetDriveMode::KLtsyDispatchPhoneSetDriveModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetDriveMode*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetHspaStatus::KLtsyDispatchPhoneGetHspaStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetHspaStatus*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetHspaStatus::KLtsyDispatchPhoneSetHspaStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetHspaStatus*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetNetworkProviderName::KLtsyDispatchPhoneGetNetworkProviderNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetNetworkProviderName*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetOperatorName::KLtsyDispatchPhoneGetOperatorNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetOperatorName*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetCellInfo::KLtsyDispatchPhoneGetCellInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetCellInfo*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+
+		// CallControl Functional Unit interface handlers
+
+	case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlAnswer*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlHold*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlDialEmergency*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlStopDtmfTone*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSetActiveAlsLine*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSendDtmfTonesCancel*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlHangUp*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlResume*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSetDynamicHscsdParams*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlDialVoice*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlTransfer*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSendDtmfTones*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetIdentityServiceStatus*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSwap*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlLoanDataPort*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlRecoverDataPort::KLtsyDispatchCallControlRecoverDataPortApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlRecoverDataPort*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlStartDtmfTone*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetActiveAlsLine*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlDialData*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlQueryIsEmergencyNumber*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetAlsPpSupport*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetAlsBlockedStatus*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlSetAlsBlocked*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetLifeTime*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlTerminateErrorCall*>
+												(iLtsyDispatchCallControlHandler);
+        break;
+	case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlTerminateAllCalls*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlGetCallForwardingIndicator*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+	case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlUpdateLifeTimer*>
+												(iLtsyDispatchCallControlHandler);
+		break;
+
+		// Phone Functional Unit interface handlers
+
+	case MLtsyDispatchPhoneGetServiceProviderName::KLtsyDispatchPhoneGetServiceProviderNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetServiceProviderName*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetPhoneId::KLtsyDispatchPhoneGetPhoneIdApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetPhoneId*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetDetectedNetworks::KLtsyDispatchPhoneGetDetectedNetworksApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetDetectedNetworks*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetDetectedNetworksCancel::KLtsyDispatchPhoneGetDetectedNetworksCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetDetectedNetworksCancel*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSelectNetwork::KLtsyDispatchPhoneSelectNetworkApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSelectNetwork*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSelectNetworkCancel::KLtsyDispatchPhoneSelectNetworkCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSelectNetworkCancel*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetNetworkSelectionSetting::KLtsyDispatchPhoneSetNetworkSelectionSettingApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetNetworkSelectionSetting*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetCurrentNetworkInfo*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetNetworkMode::KLtsyDispatchPhoneGetNetworkModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetNetworkMode*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetNitzInfo::KLtsyDispatchPhoneGetNitzInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetNitzInfo*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetSignalStrength::KLtsyDispatchPhoneGetSignalStrengthApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetSignalStrength*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetBatteryInfo::KLtsyDispatchPhoneGetBatteryInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetBatteryInfo*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneRegisterCellInfoChangeNotification::KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneRegisterCellInfoChangeNotification*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetPhoneCellInfo::KLtsyDispatchPhoneGetPhoneCellInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetPhoneCellInfo*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetUsimServiceSupport::KLtsyDispatchPhoneGetUsimServiceSupportApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetUsimServiceSupport*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetCurrentActiveUsimApplication::KLtsyDispatchPhoneGetCurrentActiveUsimApplicationApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetCurrentActiveUsimApplication*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneTerminateAllCalls::KLtsyDispatchPhoneTerminateAllCallsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneTerminateAllCalls*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneGetSystemNetworkBand::KLtsyDispatchPhoneGetSystemNetworkBandApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneGetSystemNetworkBand*>
+												(iLtsyDispatchPhoneHandler);
+		break;
+	case MLtsyDispatchPhoneSetSystemNetworkBand::KLtsyDispatchPhoneSetSystemNetworkBandApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhoneSetSystemNetworkBand*>
+												(iLtsyDispatchPhoneHandler);
+		break;		
+		
+		// Security Functional Unit interface handlers
+
+	case MLtsyDispatchSecurityGetSecurityCodeInfo::KLtsyDispatchSecurityGetSecurityCodeInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityGetSecurityCodeInfo*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityGetLockInfo::KLtsyDispatchSecurityGetLockInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityGetLockInfo*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityAbortSecurityCode::KLtsyDispatchSecurityAbortSecurityCodeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityAbortSecurityCode*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityGetCurrentActivePin::KLtsyDispatchSecurityGetCurrentActivePinApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityGetCurrentActivePin*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecuritySetLockSetting::KLtsyDispatchSecuritySetLockSettingApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecuritySetLockSetting*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityVerifySecurityCode::KLtsyDispatchSecurityVerifySecurityCodeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityVerifySecurityCode*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityGetPin1DisableSupported::KLtsyDispatchSecurityGetPin1DisableSupportedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityGetPin1DisableSupported*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityCheckSecurityCode::KLtsyDispatchSecurityCheckSecurityCodeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityCheckSecurityCode*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityDisablePhoneLock::KLtsyDispatchSecurityDisablePhoneLockApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityDisablePhoneLock*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityGetCipheringInfo::KLtsyDispatchSecurityGetCipheringInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityGetCipheringInfo*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityIsSecurityCodeBlocked::KLtsyDispatchSecurityIsSecurityCodeBlockedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityIsSecurityCodeBlocked*>
+												(iLtsyDispatchSecurityHandler);
+		break;
+	case MLtsyDispatchSecurityCheckSecurityCodeCancel::KLtsyDispatchSecurityCheckSecurityCodeCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSecurityCheckSecurityCodeCancel*>
+												(iLtsyDispatchSecurityHandler);
+		break;												
+				
+		// PhonebookEn Functional Unit interface handlers
+
+	case MLtsyDispatchPhonebookEnStoreGetInfo::KLtsyDispatchPhonebookEnStoreGetInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookEnStoreGetInfo*>
+												(iLtsyDispatchPhonebookEnHandler);
+		break;
+	case MLtsyDispatchPhonebookEnStoreReadAll::KLtsyDispatchPhonebookEnStoreReadAllApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookEnStoreReadAll*>
+												(iLtsyDispatchPhonebookEnHandler);
+		break;
+	case MLtsyDispatchPhonebookEnStoreReadEntry::KLtsyDispatchPhonebookEnStoreReadEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookEnStoreReadEntry*>
+												(iLtsyDispatchPhonebookEnHandler);
+		break;
+
+		// CellBroadcast Functional Unit interface handlers
+
+	case MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCellBroadcastSetBroadcastFilterSetting*>
+												(iLtsyDispatchCellBroadcastHandler);
+		break;
+	case MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage*>
+												(iLtsyDispatchCellBroadcastHandler);
+		break;
+	case MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCellBroadcastReceiveMessageCancel*>
+												(iLtsyDispatchCellBroadcastHandler);
+		break;
+	case MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing*>
+												(iLtsyDispatchCellBroadcastHandler);
+		break;		
+	case MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCellBroadcastDeleteSimCbTopic*>
+												(iLtsyDispatchCellBroadcastHandler);
+		break;		
+
+		// PhonebookOn Functional Unit interface handlers
+
+	case MLtsyDispatchPhonebookOnStoreRead::KLtsyDispatchPhonebookOnStoreReadApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreRead*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreDeleteAll::KLtsyDispatchPhonebookOnStoreDeleteAllApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreDeleteAll*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreReadEntry::KLtsyDispatchPhonebookOnStoreReadEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreReadEntry*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreGetInfo::KLtsyDispatchPhonebookOnStoreGetInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreGetInfo*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreGetReadStoreSize::KLtsyDispatchPhonebookOnStoreGetReadStoreSizeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreGetReadStoreSize*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreDeleteEntry::KLtsyDispatchPhonebookOnStoreDeleteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreDeleteEntry*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreWriteEntry::KLtsyDispatchPhonebookOnStoreWriteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreWriteEntry*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreWrite::KLtsyDispatchPhonebookOnStoreWriteApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreWrite*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+	case MLtsyDispatchPhonebookOnStoreGetStoreSize::KLtsyDispatchPhonebookOnStoreGetStoreSizeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookOnStoreGetStoreSize*>
+												(iLtsyDispatchPhonebookOnHandler);
+		break;
+
+		// Phonebook Functional Unit interface handlers
+
+	case MLtsyDispatchPhonebookStoreReadEntry::KLtsyDispatchPhonebookStoreReadEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreReadEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreDeleteEntry::KLtsyDispatchPhonebookStoreDeleteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreDeleteEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreCache::KLtsyDispatchPhonebookStoreCacheApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreCache*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreGetPhonebookInfo::KLtsyDispatchPhonebookStoreGetPhonebookInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreGetPhonebookInfo*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreInitialise::KLtsyDispatchPhonebookStoreInitialiseApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreInitialise*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreDeleteAll::KLtsyDispatchPhonebookStoreDeleteAllApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreDeleteAll*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreReadAll::KLtsyDispatchPhonebookSmsStoreReadAllApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreReadAll*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreWriteEntry::KLtsyDispatchPhonebookStoreWriteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreWriteEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookGetPhoneStoreInfo::KLtsyDispatchPhonebookGetPhoneStoreInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookGetPhoneStoreInfo*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreDeleteEntry::KLtsyDispatchPhonebookSmsStoreDeleteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreDeleteEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreDeleteAll::KLtsyDispatchPhonebookSmsStoreDeleteAllApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreDeleteAll*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreGetInfo::KLtsyDispatchPhonebookSmsStoreGetInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreGetInfo*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreReadEntry::KLtsyDispatchPhonebookSmsStoreReadEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreReadEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookSmsStoreWriteEntry::KLtsyDispatchPhonebookSmsStoreWriteEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookSmsStoreWriteEntry*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+	case MLtsyDispatchPhonebookStoreCacheCancel::KLtsyDispatchPhonebookStoreCacheCancelApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPhonebookStoreCacheCancel*>
+												(iLtsyDispatchPhonebookHandler);
+		break;
+
+		// Sim Functional Unit interface handlers
+
+	case MLtsyDispatchSimGetApnControlListServiceStatus::KLtsyDispatchSimGetApnControlListServiceStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetApnControlListServiceStatus*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimDeleteApnName::KLtsyDispatchSimDeleteApnNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimDeleteApnName*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimEnumerateApnEntries::KLtsyDispatchSimEnumerateApnEntriesApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimEnumerateApnEntries*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimChangeSecurityCode::KLtsyDispatchSimChangeSecurityCodeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimChangeSecurityCode*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSetFdnSetting::KLtsyDispatchSimSetFdnSettingApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSetFdnSetting*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetCustomerServiceProfile::KLtsyDispatchSimGetCustomerServiceProfileApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetCustomerServiceProfile*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetSubscriberId::KLtsyDispatchSimGetSubscriberIdApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetSubscriberId*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimAppendApnName::KLtsyDispatchSimAppendApnNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimAppendApnName*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetActiveIccApplicationType::KLtsyDispatchSimGetActiveIccApplicationTypeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetActiveIccApplicationType*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSetIccMessageWaitingIndicators::KLtsyDispatchSimSetIccMessageWaitingIndicatorsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSetIccMessageWaitingIndicators*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSetApnControlListServiceStatus::KLtsyDispatchSimSetApnControlListServiceStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSetApnControlListServiceStatus*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetApnName::KLtsyDispatchSimGetApnNameApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetApnName*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSimRefreshDone::KLtsyDispatchSimSimRefreshDoneApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSimRefreshDone*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetServiceTable::KLtsyDispatchSimGetServiceTableApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetServiceTable*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetIccMessageWaitingIndicators::KLtsyDispatchSimGetIccMessageWaitingIndicatorsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetIccMessageWaitingIndicators*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSimLockActivate::KLtsyDispatchSimSimLockActivateApiId:
+			aDispatchInterface = static_cast<MLtsyDispatchSimSimLockActivate*>
+													(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSimLockDeActivate::KLtsyDispatchSimSimLockDeActivateApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSimLockDeActivate*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetAnswerToReset::KLtsyDispatchSimGetAnswerToResetApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetAnswerToReset*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetSimCardReaderStatus::KLtsyDispatchSimGetSimCardReaderStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetSimCardReaderStatus*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetSimAuthenticationEapSimData::KLtsyDispatchSimGetSimAuthenticationEapSimDataApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetSimAuthenticationEapSimData*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimGetSimAuthenticationEapAkaData::KLtsyDispatchSimGetSimAuthenticationEapAkaDataApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimGetSimAuthenticationEapAkaData*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimPowerSimOff::KLtsyDispatchSimPowerSimOffApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimPowerSimOff*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimPowerSimOn::KLtsyDispatchSimPowerSimOnApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimPowerSimOn*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimReadSimFile::KLtsyDispatchSimReadSimFileApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimReadSimFile*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSendApduRequest::KLtsyDispatchSimSendApduRequestApiId:
+			aDispatchInterface = static_cast<MLtsyDispatchSimSendApduRequest*>
+													(iLtsyDispatchSimHandler);
+			break;
+	case MLtsyDispatchSimSendApduRequestV2::KLtsyDispatchSimSendApduRequestV2ApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSendApduRequestV2*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSimWarmReset::KLtsyDispatchSimSimWarmResetApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSimWarmReset*>
+												(iLtsyDispatchSimHandler);
+		break;
+	case MLtsyDispatchSimSetSimMessageStatusRead::KLtsyDispatchSimSetSimMessageStatusReadApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSimSetSimMessageStatusRead*>
+												(iLtsyDispatchSimHandler);
+		break;
+
+		// Sms Functional Unit interface handlers
+
+	case MLtsyDispatchSmsSendSatSms::KLtsyDispatchSmsSendSatSmsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsSendSatSms*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsGetSmsStoreInfo::KLtsyDispatchSmsGetSmsStoreInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsGetSmsStoreInfo*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsGetSmspList::KLtsyDispatchSmsGetSmspListApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsGetSmspList*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsNackSmsStored::KLtsyDispatchSmsNackSmsStoredApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsNackSmsStored*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsAckSmsStored::KLtsyDispatchSmsAckSmsStoredApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsAckSmsStored*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsResumeSmsReception::KLtsyDispatchSmsResumeSmsReceptionApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsResumeSmsReception*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsSendSmsMessage::KLtsyDispatchSmsSendSmsMessageApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsSendSmsMessage*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsSendSmsMessageNoFdnCheck::KLtsyDispatchSmsSendSmsMessageNoFdnCheckApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsSendSmsMessageNoFdnCheck*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsSetMoSmsBearer::KLtsyDispatchSmsSetMoSmsBearerApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsSetMoSmsBearer*>
+												(iLtsyDispatchSmsHandler);
+		break;
+	case MLtsyDispatchSmsStoreSmspListEntry::KLtsyDispatchSmsStoreSmspListEntryApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSmsStoreSmspListEntry*>
+												(iLtsyDispatchSmsHandler);
+		break;
+
+		// CallControlMultiparty Functional Unit interface handlers
+
+	case MLtsyDispatchCallControlMultipartyConferenceHangUp::KLtsyDispatchCallControlMultipartyConferenceHangUpApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlMultipartyConferenceHangUp*>
+												(iLtsyDispatchCallControlMultipartyHandler);
+		break;
+	case MLtsyDispatchCallControlMultipartyConferenceAddCall::KLtsyDispatchCallControlMultipartyConferenceAddCallApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlMultipartyConferenceAddCall*>
+												(iLtsyDispatchCallControlMultipartyHandler);
+		break;
+	case MLtsyDispatchCallControlMultipartyCreateConference::KLtsyDispatchCallControlMultipartyCreateConferenceApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlMultipartyCreateConference*>
+												(iLtsyDispatchCallControlMultipartyHandler);
+		break;
+	case MLtsyDispatchCallControlMultipartyConferenceSwap::KLtsyDispatchCallControlMultipartyConferenceSwapApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlMultipartyConferenceSwap*>
+												(iLtsyDispatchCallControlMultipartyHandler);
+		break;
+	case MLtsyDispatchCallControlMultipartyConferenceGoOneToOne::KLtsyDispatchCallControlMultipartyConferenceGoOneToOneApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchCallControlMultipartyConferenceGoOneToOne*>
+												(iLtsyDispatchCallControlMultipartyHandler);
+		break;
+
+		// SupplementaryServices Functional Unit interface handlers
+
+	case MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck::KLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheckApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesGetCallWaitingStatus::KLtsyDispatchSupplementaryServicesGetCallWaitingStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesGetCallWaitingStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest::KLtsyDispatchSupplementaryServicesSendNetworkServiceRequestApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesGetCallBarringStatus::KLtsyDispatchSupplementaryServicesGetCallBarringStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesGetCallBarringStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSetCallBarringStatus::KLtsyDispatchSupplementaryServicesSetCallBarringStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSetCallBarringStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSetCallForwardingStatus::KLtsyDispatchSupplementaryServicesSetCallForwardingStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSetCallForwardingStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSetCallWaitingStatus::KLtsyDispatchSupplementaryServicesSetCallWaitingStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSetCallWaitingStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSetSsPassword::KLtsyDispatchSupplementaryServicesSetSsPasswordApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSetSsPassword*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesGetCallForwardingStatus::KLtsyDispatchSupplementaryServicesGetCallForwardingStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesGetCallForwardingStatus*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSendUssdMessage::KLtsyDispatchSupplementaryServicesSendUssdMessageApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSendUssdMessage*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesSendUssdMessageNoFdnCheck::KLtsyDispatchSupplementaryServicesSendUssdMessageNoFdnCheckApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSendUssdMessageNoFdnCheck*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;		
+	case MLtsyDispatchSupplementaryServicesSendUssdRelease::KLtsyDispatchSupplementaryServicesSendUssdReleaseApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesSendUssdRelease*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+	case MLtsyDispatchSupplementaryServicesClearBlacklist::KLtsyDispatchSupplementaryServicesClearBlacklistApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSupplementaryServicesClearBlacklist*>
+												(iLtsyDispatchSupplementaryServicesHandler);
+		break;
+
+		// PacketServices Functional Unit interface handlers
+
+	case MLtsyDispatchPacketServicesPacketAttach::KLtsyDispatchPacketServicesPacketAttachApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesPacketAttach*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetPacketAttachMode::KLtsyDispatchPacketServicesGetPacketAttachModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetPacketAttachMode*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus::KLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesPacketDetach::KLtsyDispatchPacketServicesPacketDetachApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesPacketDetach*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetPdpContextConfig::KLtsyDispatchPacketServicesSetPdpContextConfigApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetPdpContextConfig*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesModifyActivePdpContext::KLtsyDispatchPacketServicesModifyActivePdpContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesModifyActivePdpContext*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesInitialisePdpContext::KLtsyDispatchPacketServicesInitialisePdpContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesInitialisePdpContext*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesDeletePdpContext::KLtsyDispatchPacketServicesDeletePdpContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesDeletePdpContext*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetPacketAttachMode::KLtsyDispatchPacketServicesSetPacketAttachModeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetPacketAttachMode*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesNotifyPacketStatusChange::KLtsyDispatchPacketServicesNotifyPacketStatusChangeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesNotifyPacketStatusChange*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams::KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params::KLtsyDispatchPacketServicesSetDefaultPdpContextR99R4ParamsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;		
+	case MLtsyDispatchPacketServicesActivatePdpContext::KLtsyDispatchPacketServicesActivatePdpContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesActivatePdpContext*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetPdpContextQosGprs::KLtsyDispatchPacketServicesSetPdpContextQosGprsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetPdpContextQosGprs*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetPdpContextQosR99R4::KLtsyDispatchPacketServicesSetPdpContextQosR99R4ApiId:
+			aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetPdpContextQosR99R4*>
+													(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesSetPdpContextQosR5::KLtsyDispatchPacketServicesSetPdpContextQosR5ApiId:
+				aDispatchInterface = static_cast<MLtsyDispatchPacketServicesSetPdpContextQosR5*>
+														(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest::KLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequestApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesDeactivatePdpContext::KLtsyDispatchPacketServicesDeactivatePdpContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesDeactivatePdpContext*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesAddPacketFilter::KLtsyDispatchPacketServicesAddPacketFilterApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesAddPacketFilter*>
+												(iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetStatus::KLtsyDispatchPacketServicesGetStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetStatus*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetStaticCapabilities::KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetStaticCapabilities*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists::KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetMaxNoActiveServices::KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetMaxNoActiveServices*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesInitialiseMbmsContext::KLtsyDispatchPacketServicesInitialiseMbmsContextApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesInitialiseMbmsContext*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus::KLtsyDispatchPacketServicesGetMbmsNetworkServiceStatusApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList::KLtsyDispatchPacketServicesUpdateMbmsMonitorServiceListApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesUpdateMbmsSessionList::KLtsyDispatchPacketServicesUpdateMbmsSessionListApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesUpdateMbmsSessionList*>
+						   				 (iLtsyDispatchPacketServicesHandler);
+		break;
+	case MLtsyDispatchPacketServicesRemovePacketFilter::KLtsyDispatchPacketServicesRemovePacketFilterApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchPacketServicesRemovePacketFilter*>
+										(iLtsyDispatchPacketServicesHandler);
+		break;
+
+		// Sat Functional Unit interface handlers
+
+	case MLtsyDispatchSatSmsDeliverReport::KLtsyDispatchSatSmsDeliverReportApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatSmsDeliverReport*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetImageInstance::KLtsyDispatchSatGetImageInstanceApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetImageInstance*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetIconData::KLtsyDispatchSatGetIconDataApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetIconData*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetClut::KLtsyDispatchSatGetClutApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetClut*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetDefaultBearerCapability::KLtsyDispatchSatGetDefaultBearerCapabilityApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetDefaultBearerCapability*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetSmsPpDownloadSupported::KLtsyDispatchSatGetSmsPpDownloadSupportedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetSmsPpDownloadSupported*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetSmsControlActivated::KLtsyDispatchSatGetSmsControlActivatedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetSmsControlActivated*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatCellBroadcastEnvelope::KLtsyDispatchSatCellBroadcastEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatCellBroadcastEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetAccessTechnology::KLtsyDispatchSatGetAccessTechnologyApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetAccessTechnology*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatTimingAdvance::KLtsyDispatchSatTimingAdvanceApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatTimingAdvance*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatSmControlResponseData::KLtsyDispatchSatSmControlResponseDataApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatSmControlResponseData*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatProvideLocationInfo::KLtsyDispatchSatProvideLocationInfoApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatProvideLocationInfo*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatSetPollingInterval::KLtsyDispatchSatSetPollingIntervalApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatSetPollingInterval*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatSmsPpDownloadEnvelope::KLtsyDispatchSatSmsPpDownloadEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatSmsPpDownloadEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatLocalInformationNmr::KLtsyDispatchSatLocalInformationNmrApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatLocalInformationNmr*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatCallAndSmsControlEnvelope::KLtsyDispatchSatCallAndSmsControlEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatCallAndSmsControlEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatRefreshAllowed*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatReady::KLtsyDispatchSatReadyApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatReady*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatPCmdNotification*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatUssdControlEnvelopeError::KLtsyDispatchSatUssdControlEnvelopeErrorApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatUssdControlEnvelopeError*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatTimerExpirationEnvelope::KLtsyDispatchSatTimerExpirationEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatTimerExpirationEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatTerminalRsp::KLtsyDispatchSatTerminalRspApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatTerminalRsp*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatMenuSelectionEnvelope::KLtsyDispatchSatMenuSelectionEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatMenuSelectionEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatEventDownloadEnvelope::KLtsyDispatchSatEventDownloadEnvelopeApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatEventDownloadEnvelope*>
+												(iLtsyDispatchSatHandler);
+		break;
+	case MLtsyDispatchSatGetUssdControlSupported::KLtsyDispatchSatGetUssdControlSupportedApiId:
+		aDispatchInterface = static_cast<MLtsyDispatchSatGetUssdControlSupported*>
+												(iLtsyDispatchSatHandler);
+		break;
+	default:
+		return TSYLOGSETEXITERR(KErrNotFound);
+		} // switch (aDispatchInterfaceId)
+
+	return TSYLOGSETEXITERR(KErrNone);
+	} // CLtsyFactoryV1::GetDispatchHandler
+
+TBool CLtsyFactoryV1::IsDispatchInterfaceSupported(TInt aFuncUnitId, TLtsyDispatchInterfaceApiId aDispatchApiId)
+	{
+	switch(aFuncUnitId)
+	    {
+	  case KDispatchCallControlFuncUnitId:
+	    return iLtsyDispatchCallControlHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchPhoneFuncUnitId:
+	    return iLtsyDispatchPhoneHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchSecurityFuncUnitId:
+	    return iLtsyDispatchSecurityHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchPhonebookEnFuncUnitId:
+	    return iLtsyDispatchPhonebookEnHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchCellBroadcastFuncUnitId:
+	    return iLtsyDispatchCellBroadcastHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchPhonebookOnFuncUnitId:
+	    return iLtsyDispatchPhonebookOnHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchPhonebookFuncUnitId:
+	    return iLtsyDispatchPhonebookHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchSimFuncUnitId:
+	    return iLtsyDispatchSimHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchSmsFuncUnitId:
+	    return iLtsyDispatchSmsHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchCallControlMultipartyFuncUnitId:
+	    return iLtsyDispatchCallControlMultipartyHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchSupplementaryServicesFuncUnitId:
+	    return iLtsyDispatchSupplementaryServicesHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchPacketServicesFuncUnitId:
+	    return iLtsyDispatchPacketServicesHandler->IsInterfaceSupported(aDispatchApiId);
+	  case KDispatchSatFuncUnitId:
+	    return iLtsyDispatchSatHandler->IsInterfaceSupported(aDispatchApiId);
+	  default:
+	    return EFalse;
+	    }
+	}
+
+void CLtsyFactoryV1::IsCallbackIndicatorSupported(TInt aFuncUnitId, TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask)
+	{
+	switch(aFuncUnitId)
+	    {
+	  case KDispatchCallControlFuncUnitId:
+	    iLtsyDispatchCallControlHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchPhoneFuncUnitId:
+	    iLtsyDispatchPhoneHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchSecurityFuncUnitId:
+	    iLtsyDispatchSecurityHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchPhonebookEnFuncUnitId:
+	    iLtsyDispatchPhonebookEnHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchCellBroadcastFuncUnitId:
+	    iLtsyDispatchCellBroadcastHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchPhonebookOnFuncUnitId:
+	    iLtsyDispatchPhonebookOnHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchPhonebookFuncUnitId:
+	    iLtsyDispatchPhonebookHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchSimFuncUnitId:
+	    iLtsyDispatchSimHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchSmsFuncUnitId:
+	    iLtsyDispatchSmsHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchCallControlMultipartyFuncUnitId:
+	    iLtsyDispatchCallControlMultipartyHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchSupplementaryServicesFuncUnitId:
+	    iLtsyDispatchSupplementaryServicesHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchPacketServicesFuncUnitId:
+	    iLtsyDispatchPacketServicesHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  case KDispatchSatFuncUnitId:
+	    iLtsyDispatchSatHandler->IsCallbackIndicatorSupported(aIdGroup, aIndIdBitMask);
+	    break;
+	  default:
+		  aIndIdBitMask = 0;//no support
+		 break;
+	    }
+	}
+
+CTsySatMessagingBase* CLtsyFactoryV1::GetSatMessagingService(MCtsySatService& /*aSatMessagingService*/)
+	{
+		return NULL;
+	}
+
+/**
+ * Called by the CTSY Dispatcher to inform this object that it can clean itself up.
+ */
+void CLtsyFactoryV1::Release()
+	{
+	TSYLOGENTRYEXIT;
+	delete this;
+	} // CLtsyFactoryV1::Release
+
+/**
+ * Creates an instance of an object implementing the MLtsyFactoryBase interface.
+ * ConstructL() must be called on the object returned before it is used.
+ */
+EXPORT_C MLtsyFactoryBase* LTsyFactoryL()
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyFactoryV1* factory = new (ELeave) CLtsyFactoryV1;
+	return factory;
+	} // LTsyFactoryL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsypacketserviceshandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,995 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPacketServicesHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+#include <pcktcs.h>
+#include <ctsy/ltsy/ltsylogger.h>
+
+#include "commengine.h"
+#include "tsyconfg.h"
+#include "cltsypacketserviceshandler.h"
+#include "ltsymacros.h"
+#include "tsyconfg.h"
+#include "mslogger.h"
+#include "atgprsattach.h"
+#include "atgprsdetach.h"
+#include "atgprsntwkregstatus.h"
+#include "atgprsconfig.h"
+#include "initialisepdpcontext.h"
+#include "atgprscontextactivate.h"
+#include "activatecontextandgetaddr.h"
+#include "atgprscontextdeactivate.h"
+#include "atgprscontextdelete.h"
+#include "atgprsqosprofile.h"
+#include "asynchelperrequest.h"
+#include "atgprsntwkregstatuschange.h"
+
+CLtsyPacketServicesHandler::CLtsyPacketServicesHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+	CGlobalPhonemanager* aGloblePhone)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback),
+	iGloblePhone(aGloblePhone)
+	{
+	}
+	
+CLtsyPacketServicesHandler::~CLtsyPacketServicesHandler()
+	{
+	if(iAsyncHelperRequest)
+		{
+		delete iAsyncHelperRequest;
+		iAsyncHelperRequest = NULL;
+		}
+	if(iNtwkRegStatusChange)
+		{
+		delete iNtwkRegStatusChange;
+		iNtwkRegStatusChange = NULL;
+		}
+	}
+
+CLtsyPacketServicesHandler* CLtsyPacketServicesHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+	CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPacketServicesHandler* self = new (ELeave) CLtsyPacketServicesHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CLtsyPacketServicesHandler* CLtsyPacketServicesHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+		CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPacketServicesHandler* self=
+			CLtsyPacketServicesHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CLtsyPacketServicesHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	iAsyncHelperRequest = CAsyncHelperRequest::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iInitialisePdpContext = CInitialisePdpContext::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+	iNtwkRegStatusChange = CATGprsNtwkRegStatusChange::NewL((*iGloblePhone), iCtsyDispatcherCallback);	
+	} // CLtsyPacketServicesHandler::ConstructL
+
+TBool CLtsyPacketServicesHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		case KLtsyDispatchPacketServicesPacketAttachApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesGetPacketAttachModeApiId: 
+			return ETrue;	
+		case KLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatusApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesPacketDetachApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesSetPdpContextConfigApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesModifyActivePdpContextApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesInitialisePdpContextApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesDeletePdpContextApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesSetPacketAttachModeApiId: 
+			return EFalse;	
+		case KLtsyDispatchPacketServicesNotifyPacketStatusChangeApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesSetDefaultPdpContextR99R4ParamsApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesActivatePdpContextApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesSetPdpContextQosGprsApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesSetPdpContextQosR99R4ApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesSetPdpContextQosR5ApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequestApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesDeactivatePdpContextApiId: 
+			return ETrue;
+		case KLtsyDispatchPacketServicesAddPacketFilterApiId: 
+			return EFalse;
+		case KLtsyDispatchPacketServicesGetStatusApiId: 
+			return ETrue;			
+		case KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId: 
+			return EFalse;
+		case KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId: 
+			return EFalse;
+		case KLtsyDispatchPacketServicesInitialiseMbmsContextApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesGetMbmsNetworkServiceStatusApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesUpdateMbmsMonitorServiceListApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesUpdateMbmsSessionListApiId: 
+			return EFalse;			
+		case KLtsyDispatchPacketServicesRemovePacketFilterApiId: 
+			return EFalse;			
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyPacketServicesHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+ * @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+ * @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask =   KLtsyDispatchPacketServicesNotifyQosProfileChangedIndId |
+						  KLtsyDispatchPacketServicesNotifyRatTransferCapsChangeIndId |
+						  KLtsyDispatchPacketServicesNotifyPacketDynamicCapsChangeIndId |
+						  KLtsyDispatchPacketServicesNotifyPdpContextAddedIndId |
+						  KLtsyDispatchPacketServicesNotifyNetworkInitiatedContextActivationRequestIndId |
+						  KLtsyDispatchPacketServicesNotifyPdpContextConfigChangedIndId |
+						  KLtsyDispatchPacketServicesNotifyPdpContextStatusChangeIndId |
+						  KLtsyDispatchPacketServicesNotifyPacketNetworkRegistrationStatusIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	}
+
+
+TInt CLtsyPacketServicesHandler::HandlePacketAttachReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesPacketAttachComp()
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+    LOGTEXTREL(_L8("pkt:attach"));
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		CATGprsAttach* ATGprsAttach = CATGprsAttach::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGprsAttach);
+		ATGprsAttach->StartRequest();
+		}
+	else
+	    {
+	    LOGTEXTREL2(_L8("pkt:err(%d) in attach"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandlePacketAttachReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleGetPacketAttachModeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetPacketAttachModeComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNone;
+	iAsyncHelperRequest->SetRequestId(MLtsyDispatchPacketServicesGetPacketAttachMode::KLtsyDispatchPacketServicesGetPacketAttachModeApiId);
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetPacketAttachModeReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleGetPacketNetworkRegistrationStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetPacketNetworkRegistrationStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		CATGprsNtwkRegStatus* ATGprsNtwkRegStatus = CATGprsNtwkRegStatus::NewL(*iGloblePhone,
+				                                          iCtsyDispatcherCallback,
+				                                          *iNtwkRegStatusChange);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGprsNtwkRegStatus);
+		ATGprsNtwkRegStatus->StartRequest();
+		}
+	else
+	    {
+	    LOGTEXTREL2(_L8("pkt:err(%d) in GetPacketNetworkRegistrationStatus"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetPacketNetworkRegistrationStatusReqL
+
+
+TInt CLtsyPacketServicesHandler::HandlePacketDetachReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesPacketDetachComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+    LOGTEXTREL(_L8("pkt:detach"));
+
+    TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		CATGprsDetach* ATGprsDetach = CATGprsDetach::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGprsDetach);
+		ATGprsDetach->StartRequest();
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in detach"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandlePacketDetachReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleSetPdpContextConfigReqL(const TDesC& aContextId,
+		const TDesC8& aAccessPointName,
+		const RPacketContext::TProtocolType aPdpType,
+		const TDesC8& aPdpAddress,
+		const TDesC8& aPcoBuffer)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp()
+ *
+ * @param contextId The context name, the descriptor should be TBuf<10>
+ * @param iAccessPointName The access name which identifies the GGSN to be used
+ * @param iPdpType The protocol type
+ * @param iPdpAddress The PDP address for this context
+ * @param aPcoBuffer The pco buffer
+ * 
+ * The purpose of the protocol configuration options (PCO) is to transfer external network protocol options 
+ * associated with a PDP context activation, and transfer additional (protocol) data 
+ * (e.g. configuration parameters, error codes or messages/events) associated with an external protocol 
+ * or an application.
+ * The protocol configuration options (PCO) is a type 4 information element with a minimum length of 3 
+ * octets and a maximum length of 253 octets
+ * In order to generate the PCO buffer a TTlvStruct object is being used. The TTlvStruct wraps the buffers  
+ * inserted to the PCO and identifies the buffers with given IDs.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+    LOGTEXTREL2(_L8("pkt:setconfig,APN>%S<"), &aAccessPointName);
+	TInt ret = KErrNotSupported;	
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		TInt tmp = GetContext(aContextId);
+		if(tmp >= 0)
+			{
+			iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iAccessPointName = aAccessPointName;
+			iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iPdpType = aPdpType;
+			iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iPdpAddress = aPdpAddress;
+			iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iProtocolConfigOption.iMiscBuffer = aPcoBuffer;
+			
+						
+			CATGPRSSetConfig* ATGPRSSetConfig = CATGPRSSetConfig::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			ATGPRSSetConfig->SetContext(iGloblePhone->iContextList[tmp]->iContextID);
+			iGloblePhone->SetActiveRequest(ATGPRSSetConfig);
+			ATGPRSSetConfig->StartRequest();
+			}
+		else
+		    {
+	        LOGTEXTREL2(_L8("pkt:err(%d) in setconfig, not found"), tmp);
+		    }
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in setconfig"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleSetPdpContextConfigReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleModifyActivePdpContextReqL(const TDesC& /*aContextName*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesModifyActivePdpContextComp()
+ *
+ * @param aContextName Context name for which the modification is intended
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;	
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleModifyActivePdpContextReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleInitialisePdpContextReqL(const TDesC& aPrimaryContextName, const TDesC& /*aSecondaryContextName*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesInitialisePdpContextComp()
+ *
+ * @param aPrimaryContextName Primary context name in the form of a character string, the descriptor should be TBuf<10>
+ * @param aSecondaryContextName Optional secondary context name in the form of a character string, the descriptor should be TBuf<10>
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	LOGTEXT2(_L8("aPrimaryContextName >%S<"), &aPrimaryContextName);
+	LOGTEXTREL2(_L8("pkt:initctxt>%S<"), &aPrimaryContextName);
+	TInt ret = KErrNone;
+	TInt cid = 0;
+	TInt contextCount = iGloblePhone->iContextList.Count();
+	if(contextCount > 0)
+		{
+		for(TInt i = 0;i < contextCount;i++)
+			{
+			if(iGloblePhone->iContextList[i]->iInfo.iName == aPrimaryContextName)
+				{
+		        LOGTEXTREL2(_L8("pkt:err(%d) in initctxt, already existed"), ret);
+				return KErrNotSupported;
+				}
+			}
+		}
+
+	cid = GenerateNewContextCid(aPrimaryContextName);
+	LOGTEXT2(_L8("newcid=%d"),cid);
+	if(cid > MaxNumberOfContexts())
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in initctxt, context number overflow"), ret);
+		return KErrNotSupported;
+	    }
+	
+	TContextInfomation  *tmpContext = new TContextInfomation;
+	tmpContext->iInfo.iName = aPrimaryContextName;
+	tmpContext->iContextID = cid;
+	iGloblePhone->iContextList.Append(tmpContext);
+	LOGTEXT2(_L8("iGloblePhone->iContextList[0]->iContextID=%d"),iGloblePhone->iContextList[0]->iContextID);
+
+	iInitialisePdpContext->SetContext(cid);
+	iInitialisePdpContext->StartRequest();
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleInitialisePdpContextReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleDeletePdpContextReqL(const TDesC& aContextName)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesDeletePdpContextComp()
+ *
+ * @param aContextName the context name to be deleted, , the descriptor should be TBuf<10>
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	LOGTEXTREL2(_L8("pkt:delete aContextName:\t%S"),&aContextName);
+	
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		TInt tmp = -1;
+		tmp = GetContext(aContextName);
+		if(tmp >= 0)
+			{		
+			CATGprsContextDelete* ATGprsContextDelete = CATGprsContextDelete::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			ATGprsContextDelete->SetContext(iGloblePhone->iContextList[tmp]->iContextID);
+			iGloblePhone->SetActiveRequest(ATGprsContextDelete);
+			ATGprsContextDelete->StartRequest();
+			}
+		else
+			{
+            LOGTEXTREL2(_L8("pkt:err(%d) in deletectxt, not found"), tmp);
+			ret = KErrNotFound;
+			}
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in deletectxt"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleDeletePdpContextReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleSetPacketAttachModeReqL(RPacketService::TAttachMode /*aAttachMode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPacketAttachModeComp()
+ *
+ * @param aAttachMode the attach mode due to be set.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleSetPacketAttachModeReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleNotifyPacketStatusChangeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesNotifyPacketStatusChangeComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleNotifyPacketStatusChangeReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleSetDefaultPdpContextGprsParamsReqL(const RPacketContext::TContextConfigGPRS& aContextConfigGprs)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetDefaultPdpContextParamsComp()
+ *
+ * @param aContextConfigGprs Default GPRS parameters
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = 0;
+	SetDefaultContextConfigGPRS(&aContextConfigGprs);
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId);
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleSetDefaultPdpContextGprsParamsReqL
+
+TInt CLtsyPacketServicesHandler::HandleSetDefaultPdpContextR99R4ParamsReqL(const RPacketContext::TContextConfigR99_R4& /*aContextConfigR99R4*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetDefaultPdpContextParamsComp()
+ *
+ * @param aContextConfigR99R4 Default R99/R4 parameters
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleSetDefaultPdpContextR99R4ParamsReqL
+
+
+
+TInt CLtsyPacketServicesHandler::HandleActivatePdpContextReqL(const TDesC& aContextName)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesActivatePdpContextComp()
+ *
+ * @param aContextName The context name.	 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+    LOGTEXTREL(_L8("pkt:activatectxt"));
+	TInt ret = KErrNotSupported;	
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		TInt tmp = GetContext(aContextName);
+		if(tmp >= 0)
+			{		
+			CActivatContextAndGetAddr* ActivatContextAndGetAddr = CActivatContextAndGetAddr::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			ActivatContextAndGetAddr->SetContext(iGloblePhone->iContextList[tmp]->iContextID);
+			iGloblePhone->SetActiveRequest(ActivatContextAndGetAddr);
+			ActivatContextAndGetAddr->StartRequest();
+			}
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in activatectxt"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleActivatePdpContextReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosGprsReqL(const TDesC& aContextName, const RPacketQoS::TQoSGPRSRequested& aQoSConfig)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp()
+ *
+ * @param aContextName the name of the context.
+ * @param aQoSConfig the QoS configuration parameters. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+    LOGTEXTREL(_L8("pkt:setctxtQos"));
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		TInt tmp = GetContext(aContextName);
+		if(tmp >= 0)
+			{		
+			CATGprsSetProfileReq* ATGprsSetProfileReq = CATGprsSetProfileReq::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			iGloblePhone->iContextList[tmp]->iQoSConfig = aQoSConfig;
+			ATGprsSetProfileReq->SetContext(iGloblePhone->iContextList[tmp]->iContextID);
+			iGloblePhone->SetActiveRequest(ATGprsSetProfileReq);
+			ATGprsSetProfileReq->StartRequest();
+			}
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in setctxtQos"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleSetPdpContextQosGprsReqL
+
+TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosR99R4ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR99_R4Requested& /*aQoSConfig*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp()
+ *
+ * @param aContextName The name of the context.
+ * @param aQoSConfig The QoS configuration parameters. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+    TSYLOGENTRYEXIT;
+    
+    RPacketQoS::TQoSGPRSRequested qosGprsReq;
+    qosGprsReq.iReqPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+    qosGprsReq.iMinPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+    qosGprsReq.iReqDelay = RPacketQoS::EUnspecifiedDelayClass;
+    qosGprsReq.iMinDelay = RPacketQoS::EUnspecifiedDelayClass;
+    qosGprsReq.iReqReliability = RPacketQoS::EUnspecifiedReliabilityClass;
+    qosGprsReq.iMinReliability = RPacketQoS::EUnspecifiedReliabilityClass;
+    qosGprsReq.iReqPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput;
+    qosGprsReq.iMinPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput;
+    qosGprsReq.iReqMeanThroughput = RPacketQoS::EMeanThroughputBestEffort;
+    qosGprsReq.iMinMeanThroughput = RPacketQoS::EMeanThroughputBestEffort;
+
+    return HandleSetPdpContextQosGprsReqL(aContextName, qosGprsReq);
+    } // CLtsyPacketServicesHandler::HandleSetPdpContextQosR99R4ReqL
+
+TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosR5ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR5Requested& /*aQoSConfig*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp()
+ *
+ * @param aContextName The name of the context.
+ * @param aQoSConfig The QoS configuration parameters. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+    TSYLOGENTRYEXIT;
+    
+    RPacketQoS::TQoSGPRSRequested qosGprsReq;
+    qosGprsReq.iReqPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+    qosGprsReq.iMinPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+    qosGprsReq.iReqDelay = RPacketQoS::EUnspecifiedDelayClass;
+    qosGprsReq.iMinDelay = RPacketQoS::EUnspecifiedDelayClass;
+    qosGprsReq.iReqReliability = RPacketQoS::EUnspecifiedReliabilityClass;
+    qosGprsReq.iMinReliability = RPacketQoS::EUnspecifiedReliabilityClass;
+    qosGprsReq.iReqPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput;
+    qosGprsReq.iMinPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput;
+    qosGprsReq.iReqMeanThroughput = RPacketQoS::EMeanThroughputBestEffort;
+    qosGprsReq.iMinMeanThroughput = RPacketQoS::EMeanThroughputBestEffort;
+
+    return HandleSetPdpContextQosGprsReqL(aContextName, qosGprsReq);
+    } // CLtsyPacketServicesHandler::HandleSetPdpContextQosR5ReqL
+	
+
+
+TInt CLtsyPacketServicesHandler::HandleRejectNetworkInitiatedContextActivationRequestReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesRejectNetworkInitiatedContextActivationRequestComp()
+ * 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleRejectNetworkInitiatedContextActivationRequestReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleDeactivatePdpContextReqL(const TDesC& aContextName)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesDeactivatePdpContextComp()
+ *
+ * @param aContextName The context name that is to be deactivated.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+    LOGTEXTREL2(_L8("pkt:deact ctxt>%S<"),&aContextName);
+	TInt ret = KErrNotSupported;
+
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(KErrNone == ret)
+		{
+		TInt tmp = GetContext(aContextName);
+		if(tmp >= 0)
+			{	
+			CATGprsContextDeactivate* ATGprsContextDeactivate = CATGprsContextDeactivate::NewL(*iGloblePhone, iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			ATGprsContextDeactivate->SetContext(iGloblePhone->iContextList[tmp]->iContextID);
+			iGloblePhone->SetActiveRequest(ATGprsContextDeactivate);
+			ATGprsContextDeactivate->StartRequest();
+			ret = KErrNone;
+			}
+		else
+		    {
+	        LOGTEXTREL2(_L8("pkt:err(%d) in deact ctxt, not found"), tmp);
+		    ret = KErrNotFound;
+		    }
+		}
+	else
+	    {
+        LOGTEXTREL2(_L8("pkt:err(%d) in deact ctxt"), ret);
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleDeactivatePdpContextReqL
+
+TInt CLtsyPacketServicesHandler::HandleAddPacketFilterSyncL(const TDesC& /*aContextName*/,  CArrayFixFlat<RPacketContext::TPacketFilterV2>& /*aContextFilter*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp
+ * 
+ * @param aContextName The name of the context.
+ * @param aContextFilter An array contains up to eight filters to be used
+ * for configuring the secondary context.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleAddPacketFilterSyncL
+
+
+TInt CLtsyPacketServicesHandler::HandleGetStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetStatus()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = 0;
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetStatusApiId);
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetStatusReqL
+
+TInt CLtsyPacketServicesHandler::HandleGetStaticCapabilitiesReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetStaticCapabilitiesComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = 0;
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId);
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetStaticCapabilitiesReqL
+
+TInt CLtsyPacketServicesHandler::HandleGetMaxNoMonitoredServiceListsReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetMaxNoMonitoredServiceListsComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = 0;
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId);
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetMaxNoMonitoredServiceListsReqL
+
+TInt CLtsyPacketServicesHandler::HandleGetMaxNoActiveServicesReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetMaxNoActiveServicesComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = 0;
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId);
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetMaxNoActiveServicesReqL
+
+TInt CLtsyPacketServicesHandler::HandleInitialiseMbmsContextReqL(const TDesC& /*aContextName*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesInitialiseMbmsContextComp()
+ *
+ * @param aContextName The context name in the form of a character string 
+ * the maximum length of the descriptor should not exceed KMaxInfoName.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleInitialiseMbmsContextReqL
+
+TInt CLtsyPacketServicesHandler::HandleGetMbmsNetworkServiceStatusReqL(TBool /*aAttemptAttach*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesGetMbmsNetworkServiceStatusComp()
+ * 
+ * @param aAttemptAttach If a GMM attached is to be perfomed.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleGetMbmsNetworkServiceStatusReqL
+
+TInt CLtsyPacketServicesHandler::HandleUpdateMbmsMonitorServiceListsReqL(TMbmsAction /*aAction*/, const CPcktMbmsMonitoredServiceList& /*aServiceList*/, const CPcktMbmsMonitoredServiceList& /*aChangeList*/)
+/**
+ * It is a request call that is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesUpdateMbmsMonitorServiceListComp()
+ * 
+ * @param aAction The MBMS action (add, remove or remove all).
+ * @param aServiceList The current MBMS monitor service availability list as held by the CTSY.
+ * @param aChangeList The list of entries to be changed as per the action. (e.g. the action = Add,
+ * the change list will contain entries to be added to the MBMS monitor service availability list)
+ *
+ * @return KErrNone on success, otherwise another error code indicating the
+ * failure.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleUpdateMbmsMonitorServiceListsReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleUpdateMbmsSessionListReqL(const TDesC& /*aContextName*/, TMbmsAction /*aAction*/, TMbmsSessionId /*aSessionId*/, const TMbmsSessionIdList& /*aServiceList*/)
+/**
+ * It is a request call that is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesUpdateMbmsSessionListComp()
+ * 
+ * @param aContextName The MBMS context name in the form of a character string.
+ * @param aAction The action to be performed (add, remove or remove all).
+ * @param aSessionId The MBMS session identifier which needs to be received or removed.
+ * @param aServiceList The MBMS services table as held by the CTSY.
+ *
+ * @return KErrNone on success, otherwise another error code indicating the
+ * failure.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleUpdateMbmsSessionListReqL
+
+
+TInt CLtsyPacketServicesHandler::HandleRemovePacketFilterSyncL(const TDesC& /*aContextName*/, TInt /*aFilterId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp
+ * 
+ * @param aContextName The name of the context.
+ * @param aFilterId The filter Id to be removed.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPacketServicesHandler::HandleRemovePacketFilterSyncL
+
+TInt CLtsyPacketServicesHandler::MaxNumberOfContexts()
+/**
+ * This function returns the maximum number of contexts that the phone supports.
+ */
+    {
+    return iGloblePhone->iPhoneStatus.iGprsMaxNumContexts;
+    }
+TInt CLtsyPacketServicesHandler::GetContext(const TDesC& aName)
+/**
+ * This function returns a specific context
+ * @param aCount context to Retrieve in linked list.
+ */
+    {
+    TInt index = -1;
+    TInt count = iGloblePhone->iContextList.Count();
+    for(TInt i = 0; i < count; i++)
+    	{
+    	if(0 ==(iGloblePhone->iContextList[i]->iInfo.iName.Compare(aName)))
+    		{
+    		index = i;
+    		}
+    	}
+    
+    LOGTEXT3(_L8("[Ltsy Pkt] iContext->ContextName() >%S<, index=%d"), &aName, index);
+    return index;
+    }
+
+TInt CLtsyPacketServicesHandler::GenerateNewContextCid(const TDesC& /*aName*/)
+/**
+ * This function generates a unique context name and the first not taken cid number.
+ * There is a 1 to 1 mapping between this Cid and the one in the phone. 
+ * In order to do this we need to check all existing Cids, since they may not
+ * be in conical order and there can be holes in the list(3,1,4,6,5) we need 
+ * to loop around and find the lowest that we can use to create a name and a new
+ * Cid.
+ * @param aName New name that is generated.
+ * @param aCid New context id.
+ */
+    {
+    TInt lowestAvailableCid = 1;
+    TInt count = iGloblePhone->iContextList.Count();
+    if(count != 0 )
+        {
+        // There can be gaps between the Cids that the tsy has, so get the
+        // Cid number between them, if any. This nested for loop will find 
+        // the lowest available cid there is.
+        for(TInt k = 0; k < count;k++)
+            {
+            for(TInt i = 0; i < count;i++)
+                {
+                if(iGloblePhone->iContextList[i]->iContextID == lowestAvailableCid)
+                    ++lowestAvailableCid;
+                }
+            }
+        }
+    return lowestAvailableCid;
+    }
+
+void CLtsyPacketServicesHandler::SetDefaultContextConfigGPRS(const RPacketContext::TContextConfigGPRS* aContextConfig)
+/**
+ * This function sets the default context configuration.
+ *
+ * @param aContextConfigV01 Set default context configuration.
+ */
+    {
+    iDefContextConfigGPRS.iPdpType = aContextConfig->iPdpType;
+    iDefContextConfigGPRS.iAccessPointName.Copy(aContextConfig->iAccessPointName);
+    iDefContextConfigGPRS.iPdpAddress.Copy(aContextConfig->iPdpAddress);
+    iDefContextConfigGPRS.iPdpCompression = aContextConfig->iPdpCompression;
+    iDefContextConfigGPRS.iAnonymousAccessReqd = aContextConfig->iAnonymousAccessReqd;
+    }
+//
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsyphonebookenhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,198 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookEnHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsyphonebookenhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+#include "globalphonemanager.h"
+#include "atphbkengetinfo.h"
+#include "atphbkenread.h"
+#include "atphbkenreadall.h"
+
+CLtsyPhonebookEnHandler::CLtsyPhonebookEnHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	:iCtsyDispatcherCallback(aCtsyDispatcherCallback),iGloblePhone(aGloblePhone)
+
+	{
+	}
+
+	
+CLtsyPhonebookEnHandler::~CLtsyPhonebookEnHandler()
+	{
+	}
+
+
+CLtsyPhonebookEnHandler* CLtsyPhonebookEnHandler::NewLC(
+		CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookEnHandler* self = new (ELeave) CLtsyPhonebookEnHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyPhonebookEnHandler* CLtsyPhonebookEnHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookEnHandler* self=
+			CLtsyPhonebookEnHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyPhonebookEnHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsyPhonebookEnHandler::ConstructL
+
+TBool CLtsyPhonebookEnHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		case  KLtsyDispatchPhonebookEnStoreGetInfoApiId:
+			return ETrue;
+		case KLtsyDispatchPhonebookEnStoreReadAllApiId:
+			return ETrue;
+		case KLtsyDispatchPhonebookEnStoreReadEntryApiId:
+			return ETrue;
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyPhonebookEnHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsyPhonebookEnHandler::HandleStoreGetInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookEnStoreGetInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkEnGetInfo* atPhbkEnGetInfo = CAtPhbkEnGetInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkEnGetInfo);
+		atPhbkEnGetInfo->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookEnHandler::HandleStoreGetInfoReqL
+
+
+TInt CLtsyPhonebookEnHandler::HandleStoreReadAllReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookEnStoreReadAllComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkEnReadAll* atPhbkEnReadAll = CAtPhbkEnReadAll::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkEnReadAll);
+		atPhbkEnReadAll->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookEnHandler::HandleStoreReadAllReqL
+
+
+TInt CLtsyPhonebookEnHandler::HandleStoreReadEntryReqL(TInt aIndex)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookEnStoreReadEntryComp()
+ *
+ * @param aIndex index of the EN entry.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkEnRead* atPhbkEnRead = CAtPhbkEnRead::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkEnRead);
+		atPhbkEnRead->SetIndex(aIndex);
+		atPhbkEnRead->StartRequest();
+	    }
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookEnHandler::HandleStoreReadEntryReqL
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsyphonebookhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,570 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+#include <mpbutil.h>
+#include <etelmm.h>
+
+
+#include "cltsyphonebookhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+#include "globalphonemanager.h"
+#include "atsmsstoreinfo.h"
+#include "atsmsstorewrite.h"
+#include "atsmsstoreread.h"
+#include "atsmsstoredelete.h"
+#include "atsmsstorereadall.h"
+#include "atphbkgetphonestoreinfo.h"
+#include "atphbkstoreinitialise.h"
+#include "atphbkstorewrite.h"
+#include "atphbkstoreread.h"
+#include "atphbkstorecache.h"
+#include "atphbkstoredelete.h"
+
+
+CLtsyPhonebookHandler::CLtsyPhonebookHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+    :iCtsyDispatcherCallback(aCtsyDispatcherCallback),iGloblePhone(aGloblePhone)
+	{
+	}
+
+	
+CLtsyPhonebookHandler::~CLtsyPhonebookHandler()
+	{
+
+	}
+
+
+CLtsyPhonebookHandler* CLtsyPhonebookHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookHandler* self = new (ELeave) CLtsyPhonebookHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyPhonebookHandler* CLtsyPhonebookHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookHandler* self=
+			CLtsyPhonebookHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyPhonebookHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	} // CLtsyPhonebookHandler::ConstructL
+
+TBool CLtsyPhonebookHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried.
+ * @return indication whether interface is supported or not.
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		case KLtsyDispatchPhonebookStoreReadEntryApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookStoreDeleteEntryApiId: 
+		 	return ETrue;	
+		case KLtsyDispatchPhonebookStoreCacheApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookStoreCacheCancelApiId: 
+			return ETrue;		
+//		case KLtsyDispatchPhonebookStoreGetPhonebookInfoApiId: 
+//			return ETrue;	
+		case KLtsyDispatchPhonebookStoreInitialiseApiId: 
+			return ETrue;			
+		case KLtsyDispatchPhonebookStoreDeleteAllApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookStoreWriteEntryApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookGetPhoneStoreInfoApiId: 
+			return ETrue;		
+		case KLtsyDispatchPhonebookSmsStoreReadAllApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookSmsStoreDeleteEntryApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookSmsStoreDeleteAllApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookSmsStoreGetInfoApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhonebookSmsStoreReadEntryApiId: 
+			return ETrue;		
+		case KLtsyDispatchPhonebookSmsStoreWriteEntryApiId: 
+			return ETrue;	
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyPhonebookHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1.
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	}
+
+
+TInt CLtsyPhonebookHandler::HandleStoreReadEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, TInt aIndex, TInt aNumberOfSlots)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreReadEntryComp()
+ *
+ * @param aPhonebook The phonebook to read entries from.
+ * @param aIndex Specifies the index to start reading from, must be >= 1.
+ * @param aNumSlots Specifies the number of slots to read, must be >= 1 and <= total number of slots.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhoneBookStore::Read()
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	if((aPhonebook != DispatcherPhonebook::EIccAdn)&&
+			(aPhonebook != DispatcherPhonebook::EIccAdn))
+		{
+		return TSYLOGSETEXITERR(KErrNotSupported);
+		}
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkStoreRead* atPhbkStoreRead = CAtPhbkStoreRead::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkStoreRead);
+		atPhbkStoreRead->SetPhonebookType(aPhonebook);
+		atPhbkStoreRead->SetReadParam(aIndex,aNumberOfSlots);
+		atPhbkStoreRead->StartRequest();
+	    }
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreReadEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreDeleteEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, TInt aIndex)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreDeleteEntryComp()
+ *
+ * @param aPhonebook The phonebook to delete an entry from.
+ * @param aIndex The entry index in the phonebook to delete.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhoneBookStore::Delete() 
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	if((aPhonebook != DispatcherPhonebook::EIccAdn)&&
+			(aPhonebook != DispatcherPhonebook::EIccAdn))
+		{
+		return TSYLOGSETEXITERR(KErrNotSupported);
+		}
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkStoreDelete* atPhbkStoreDelete = CAtPhbkStoreDelete::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkStoreDelete);
+		atPhbkStoreDelete->SetPhonebookType(aPhonebook);
+		atPhbkStoreDelete->SetDeleteIndex(aIndex);
+		atPhbkStoreDelete->StartRequest();
+	    }
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreDeleteEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreCacheReqL(DispatcherPhonebook::TPhonebook aPhonebook)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreCacheComp()
+ *
+ * @param aPhonebook The phonebook to cache.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	if((aPhonebook != DispatcherPhonebook::EIccAdn)&&
+			(aPhonebook != DispatcherPhonebook::EIccAdn))
+		{
+		return TSYLOGSETEXITERR(KErrNotSupported);
+		}
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkStoreCache* atPhbkStoreCache = CAtPhbkStoreCache::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkStoreCache);
+		atPhbkStoreCache->SetPhonebookType(aPhonebook);
+		atPhbkStoreCache->StartRequest();
+	    }
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreCacheReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreGetPhonebookInfoReqL(DispatcherPhonebook::TPhonebook /*aPhonebook*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreGetPhonebookInfoComp()
+ *
+ * @param aPhonebook The phonebook to retrieve the information from.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhoneBookStore::GetInfo() 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreGetPhonebookInfoReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreInitialiseReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreInitialiseComp()
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+    TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkStoreInitialise* atPhbkStoreInitialise = CAtPhbkStoreInitialise::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkStoreInitialise);
+		atPhbkStoreInitialise->StartRequest();
+	    }
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreInitialiseReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreDeleteAllReqL(DispatcherPhonebook::TPhonebook /*aPhonebook*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreDeleteAllComp()
+ *
+ * @param aPhonebook The phonebook to delete all entries from.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhoneBookStore::DeleteAll() 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreDeleteAllReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreReadAllReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreReadAllComp().
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreReadAll* atSmsStoreReadAll = CAtSmsStoreReadAll::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreReadAll);
+		atSmsStoreReadAll->StartRequest();
+	    }
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreReadAllReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreWriteEntryReqL(DispatcherPhonebook::TPhonebook aPhonebook, const TDesC8& aEntry)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreWriteEntryComp()
+ *
+ * @param aPhonebook The phonebook to be written to.
+ * @param aEntry The entry to be written, this is coded as a TLV, this can be decoded either
+ * directly via a CPhoneBookBuffer() or via the CPhoneBookEntry::InternalizeFromTlvEntry() utility.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhoneBookStore::Write()
+ * @see CPhoneBookBuffer()
+ * @see CPhoneBookEntry::InternalizeFromTlvEntry()
+ */
+	{
+	TSYLOGENTRYEXIT;
+	if((aPhonebook != DispatcherPhonebook::EIccAdn)&&
+			(aPhonebook != DispatcherPhonebook::EIccAdn))
+		{
+		return TSYLOGSETEXITERR(KErrNotSupported);
+		}
+	
+    TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkStoreWrite* atPhbkStoreWrite = CAtPhbkStoreWrite::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkStoreWrite);
+		atPhbkStoreWrite->SetPhonebookType(aPhonebook);
+		atPhbkStoreWrite->SetPhonebookEntryL(aEntry);
+		atPhbkStoreWrite->StartRequest();
+	    }              
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreWriteEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleGetPhoneStoreInfoReqL(const TDesC& aStoreName)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookGetPhoneStoreInfoComp()
+ *
+ * @param aStoreName The store to retrieve the information from.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ * 
+ * @see RMobilePhone::GetPhoneStoreInfo()
+ */
+	{
+	TSYLOGENTRYEXIT;
+	if((aStoreName.CompareF(KETelIccFdnPhoneBook) != KErrNone)
+		&&(aStoreName.CompareF(KETelIccAdnPhoneBook) != KErrNone)
+		&&(aStoreName.CompareF(KETelIccSmsStore) != KErrNone))
+		{
+		return TSYLOGSETEXITERR(KErrNotSupported);
+		}
+	
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtPhbkGetPhoneStoreInfo* atPhbkGetPhoneStoreInfo =CAtPhbkGetPhoneStoreInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atPhbkGetPhoneStoreInfo);
+		atPhbkGetPhoneStoreInfo->SetPhoneStoreParam(aStoreName);
+		atPhbkGetPhoneStoreInfo->StartRequest();
+	    }
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleGetPhoneStoreInfoReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreDeleteEntryReqL(TInt aIndex)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreDeleteEntryComp().
+ *
+ * @param aIndex index of the entry to be deleted from the SMS store.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreDelete* atSmsStoreDelete = CAtSmsStoreDelete::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreDelete);
+		atSmsStoreDelete->SetDelIndex(aIndex);
+		atSmsStoreDelete->StartRequest();
+		}
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreDeleteEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreDeleteAllReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreDeleteAllComp().
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreDeleteAll* atSmsStoreDeleteAll = CAtSmsStoreDeleteAll::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreDeleteAll);
+		atSmsStoreDeleteAll->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreDeleteAllReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreGetInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreGetInfoComp().
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreInfo* atSmsStoreInfo = CAtSmsStoreInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreInfo);
+		atSmsStoreInfo->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreGetInfoReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreReadEntryReqL(TInt aIndex)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreReadEntryComp().
+ *
+ * @param aIndex index of the entry to be read.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreRead* atSmsStoreRead = CAtSmsStoreRead::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreRead);
+		atSmsStoreRead->SetMsgIndex(aIndex);
+		atSmsStoreRead->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreReadEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleSmsStoreWriteEntryReqL(const RMobileSmsStore::TMobileGsmSmsEntryV1& aMobileGsmEntry)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookSmsStoreWriteEntryComp().
+ *
+ * @param aMobileGsmEntry Defines contents of a fixed-size GSM SMS entry to be stored.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsStoreWrite* atSmsStoreWrite = CAtSmsStoreWrite::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsStoreWrite);
+		atSmsStoreWrite->SeGsmSmsEntry(aMobileGsmEntry);
+		atSmsStoreWrite->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleSmsStoreWriteEntryReqL
+
+
+TInt CLtsyPhonebookHandler::HandleStoreCacheCancelReqL(DispatcherPhonebook::TPhonebook /*aPhonebook*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookStoreCacheCancel()
+ *
+ * @param aPhonebook The phonebook to cancel the pending cache.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookHandler::HandleStoreCacheCancelReqL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsyphonebookonhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,288 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhonebookOnHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsyphonebookonhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsyPhonebookOnHandler::CLtsyPhonebookOnHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsyPhonebookOnHandler::~CLtsyPhonebookOnHandler()
+	{
+	}
+
+
+CLtsyPhonebookOnHandler* CLtsyPhonebookOnHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookOnHandler* self = new (ELeave) CLtsyPhonebookOnHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyPhonebookOnHandler* CLtsyPhonebookOnHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhonebookOnHandler* self=
+			CLtsyPhonebookOnHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyPhonebookOnHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsyPhonebookOnHandler::ConstructL
+
+TBool CLtsyPhonebookOnHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyPhonebookOnHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreReadReqL(TInt /*aIndex*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreReadComp
+ *
+ * @param aIndex index of the entry.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreReadReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreDeleteAllReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreDeleteAllComp
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreDeleteAllReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreReadEntryReqL(TInt /*aIndex*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreReadEntryComp
+ *
+ * @param aIndex index of the ON entry.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreReadEntryReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreGetInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreGetInfoComp
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreGetInfoReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreGetReadStoreSizeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreGetReadStoreSizeComp
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreGetReadStoreSizeReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreDeleteEntryReqL(TInt /*aIndex*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreDeleteEntryComp
+ *
+ * @param aIndex index of the ON entry.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreDeleteEntryReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreWriteEntryReqL(const RMobileONStore::TMobileONEntryV1& /*aMobileOnEntry*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreWriteEntryComp
+ *
+ * @param aMobileOnEntry defines contents of a fixed-size ON entry to be stored.  
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreWriteEntryReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreWriteReqL(const RMobileONStore::TMobileONEntryV1& /*aMobileOnEntry*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreWriteComp
+ *
+ * @param aMobileOnEntry defines contents of a fixed-size ON entry to be stored.  
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreWriteReqL
+
+
+TInt CLtsyPhonebookOnHandler::HandleStoreGetStoreSizeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhonebookOnStoreGetStoreSizeComp
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhonebookOnHandler::HandleStoreGetStoreSizeReqL
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsyphonehandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,1218 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsyPhoneHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+#include <etelmm.h>
+#include <ctsy/ltsy/ltsylogger.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+
+#include "cltsyphonehandler.h"
+#include "ltsymacros.h"
+#include "atgetmodemstatus.h"
+#include "atgetnetworkregistrationstatus.h"
+#include "atgetsimstatusready.h"
+#include "atgetnetworkinfo.h"
+#include "atgetsignalstrength.h"
+#include "atgetbatteryinfo.h"
+#include "atdetectnetwork.h"
+#include "getphoneid.h"
+#include "initializephone.h"
+#include "mslogger.h"
+#include "athangup.h"
+#include "getoperatorname.h"
+#include "atselectnetworkmode.h"
+#include "atselectnetwork.h"
+#include "atgetphonecellinfo.h"
+#include "atgetcellinfo.h"
+#include "atsetnotifycell.h"
+#include "asynchelperrequest.h"
+#include "atnetworkregstatuschange.h"
+#include "atnotifycellinfo.h"
+#include "notifybatteryandsignal.h"
+#include "getfdnstatus.h"
+#include "getcurrentnetworkinfo.h"
+#include "atgetphonecellinfo.h"
+
+CLtsyPhoneHandler::CLtsyPhoneHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback),iGloblePhone(aGloblePhone)
+	{
+	}
+
+	
+CLtsyPhoneHandler::~CLtsyPhoneHandler()
+	{
+	if(iAsyncHelperRequest)
+		{
+		delete iAsyncHelperRequest;
+		iAsyncHelperRequest = NULL;
+		}	
+	if(iNetworkRegStatusChange)
+		{
+		delete iNetworkRegStatusChange;
+		iNetworkRegStatusChange = NULL;
+		}
+	if(iNotifyCellInfo)
+		{
+		delete iNotifyCellInfo;
+		iNotifyCellInfo = NULL;
+		}
+	if(iNotifyBatteryAndSignal)
+		{
+		delete iNotifyBatteryAndSignal;
+		iNotifyBatteryAndSignal = NULL;
+		}
+	if(iInitializePhone)
+		{
+		delete iInitializePhone;
+		iInitializePhone = NULL;
+		}
+	if(iATDetectNetwork)
+		{
+		delete iATDetectNetwork;
+		iATDetectNetwork = NULL;
+		}
+	}
+
+
+CLtsyPhoneHandler* CLtsyPhoneHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhoneHandler* self = new (ELeave) CLtsyPhoneHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsyPhoneHandler* CLtsyPhoneHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback,
+		CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsyPhoneHandler* self=
+			CLtsyPhoneHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsyPhoneHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	//for temp
+	iNetworkRegStatusChange = CATNetworkRegStatusChange::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iAsyncHelperRequest = CAsyncHelperRequest::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iNotifyCellInfo = CATNotifyCellInfo::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iNotifyBatteryAndSignal = CNotifyBatteryAndSignal::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iInitializePhone = CInitializePhone::NewL(*iGloblePhone,
+			                                  iCtsyDispatcherCallback,
+			                                  *iNetworkRegStatusChange,
+			                                  *iNotifyBatteryAndSignal);
+	iATDetectNetwork  = CATDetectNetwork::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+	iATSelectNetwork  = CATSelectNetwork::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+	} // CLtsyPhoneHandler::ConstructL
+
+TBool CLtsyPhoneHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		case KLtsyDispatchPhoneBootNotifyModemStatusReadyApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetFdnStatusApiId: 
+			return ETrue; 
+		case KLtsyDispatchPhoneGetHomeNetworkApiId: 
+			return ETrue;	
+		case KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneSimRefreshRegisterApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetServiceProviderNameApiId: 
+			return ETrue; //Not finished
+		case KLtsyDispatchPhoneGetPhoneIdApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetDetectedNetworksApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetDetectedNetworksCancelApiId: 
+			return ETrue; //
+		case KLtsyDispatchPhoneSelectNetworkApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneSelectNetworkCancelApiId: 
+			return ETrue; //KErrNotSupported
+		case KLtsyDispatchPhoneSetNetworkSelectionSettingApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetCurrentNetworkInfoApiId: 
+			return ETrue; //Finished ?
+		case KLtsyDispatchPhoneGetNetworkModeApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetNitzInfoApiId: 
+			return ETrue; 
+		case KLtsyDispatchPhoneGetSignalStrengthApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetBatteryInfoApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneNspsWakeupApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneSetSystemNetworkModeApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneGetCurrentSystemNetworkModesApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneResetNetServerApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneSetAlwaysOnModeApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneSetDriveModeApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneGetHspaStatusApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneSetHspaStatusApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneGetNetworkProviderNameApiId: 
+			return ETrue;  
+		case KLtsyDispatchPhoneGetOperatorNameApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetCellInfoApiId: 
+			return ETrue;  
+		case KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetPhoneCellInfoApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetUsimServiceSupportApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneGetCurrentActiveUsimApplicationApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneTerminateAllCallsApiId: 
+			return ETrue;
+		case KLtsyDispatchPhoneGetSystemNetworkBandApiId: 
+			return EFalse;
+		case KLtsyDispatchPhoneSetSystemNetworkBandApiId: 
+			return EFalse;
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsyPhoneHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1.
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask =   KLtsyDispatchPhoneNotifyNetworkModeChangeIndId |
+						  KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId |
+						  KLtsyDispatchPhoneNotifySignalStrengthChangeIndId |
+						  KLtsyDispatchPhoneNotifyNetworkRegistrationStatusChangeIndId |
+						  KLtsyDispatchPhoneNotifyNitzInfoChangeIndId |
+						  KLtsyDispatchPhoneNotifyBatteryInfoChangeIndId |
+						  KLtsyDispatchPhoneNotifyCurrentNetworkChangeIndId |
+						  KLtsyDispatchPhoneNotifyRfStatusChangeIndId |
+						  KLtsyDispatchPhoneNotifyCellInfoChangeIndId ;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	
+	}
+
+TInt CLtsyPhoneHandler::HandleGetFdnStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetFdnStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CGetFdnStatus* GetFdnStatus  = CGetFdnStatus::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(GetFdnStatus);
+		GetFdnStatus->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetFdnStatusReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetNetworkRegistrationStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetNetworkRegistrationStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId);
+		iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATNetworkRegistration* atNetworkRegStatus  = CATNetworkRegistration::NewL(*iGloblePhone,
+				                                                                   iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atNetworkRegStatus);
+		atNetworkRegStatus->SetIpcRequestCompleteObserver(this);
+		atNetworkRegStatus->SetIpcId(KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId);
+		iNetworkRegStatusChange->Disable();
+		atNetworkRegStatus->StartRequest();
+		}
+	 
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetNetworkRegistrationStatusReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetHomeNetworkReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetHomeNetworkComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetHomeNetworkApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATNetworkInfo* ATNetworkInfo  = CATNetworkInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATNetworkInfo);
+		ATNetworkInfo->SetToGetHomeNwk();
+		ATNetworkInfo->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetHomeNetworkReqL
+
+
+TInt CLtsyPhoneHandler::HandleBootNotifyModemStatusReadyReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneBootNotifyModemStatusReadyComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+    // This function is the entry of phone bootup
+	// Let's get the phone bootup
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneNotInitialised)
+		{
+		iGloblePhone->iPhoneStatus.iInitStatus = EPhoneInitialising;
+		iGloblePhone->iEventSignalActive = ETrue;
+		iInitializePhone->StartRequest();
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATGetModemStatus* ATGetModemStatus = CATGetModemStatus::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGetModemStatus);
+		ATGetModemStatus->StartRequest();
+		}	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleBootNotifyModemStatusReadyReqL
+
+
+TInt CLtsyPhoneHandler::HandleBootNotifySimStatusReadyReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneBootNotifySimStatusReadyComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneBootNotifySimStatusReadyApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATSIMCard* ATSIMCard  = CATSIMCard::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATSIMCard);
+		ATSIMCard->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleBootNotifySimStatusReadyReqL
+
+TInt CLtsyPhoneHandler::HandleSimRefreshRegisterReqL(TUint16 /*aFilesToRegister*/)
+/**
+ * @param aFilesToRegister  Bitmask containing list of files to register for refresh indications.
+ * The list of possible files is specified in TCacheFileTypes.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneSimRefreshRegisterApiId);
+        iInitializePhone->ExecutePendingRequest();   
+        ret = KErrNone;
+		}
+	else if(ret == EPhoneInitialised)
+		{
+		iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneSimRefreshRegisterApiId);
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSimRefreshRegisterReqL
+
+TInt CLtsyPhoneHandler::HandleGetServiceProviderNameReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetServiceProviderNameComp()
+ *
+ = * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	//TInt ret = KErrNotSupported;
+	TInt ret = 0;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CGetOperatorNmae* GetOperatorName  = CGetOperatorNmae::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		GetOperatorName->SetRequestTypeL(KLtsyDispatchPhoneGetServiceProviderNameApiId);
+		iGloblePhone->SetActiveRequest(GetOperatorName);
+		GetOperatorName->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetServiceProviderNameReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetPhoneIdReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetPhoneIdComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	//TInt ret = KErrNotSupported;
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CGetPhoneID* GetPhoneID  = CGetPhoneID::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(GetPhoneID);
+		GetPhoneID->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetPhoneIdReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetDetectedNetworksReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetDetectedNetworksComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	//TInt ret = KErrNotSupported;
+	TInt ret = 0;
+	
+	ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		iGloblePhone->iEventSignalActive = ETrue;
+		iATDetectNetwork->StartRequest();
+		}
+	
+	return TSYLOGSETEXITERR(ret);
+	
+	} // CLtsyPhoneHandler::HandleGetDetectedNetworksReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetDetectedNetworksCancelReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetDetectedNetworksCancelComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	//TInt ret = KErrNotSupported;
+	TInt ret = 0;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if((ret == KErrInUse)&&(iATDetectNetwork->iCommandRunning))
+		{
+		if(iATDetectNetwork->iCommandCancel)
+			{
+			ret = KErrNotSupported;
+			}
+		else
+			{
+		    iATDetectNetwork->CancelCommand();
+		    ret = KErrNone;
+			}
+		}
+	else if(ret == KErrNone)
+		{
+		iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneGetDetectedNetworksCancelApiId);
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetDetectedNetworksCancelReqL
+
+
+TInt CLtsyPhoneHandler::HandleSelectNetworkReqL(TBool aIsManual, const RMobilePhone::TMobilePhoneNetworkManualSelection& aNetworkManualSelection)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSelectNetworkComp()
+ *
+ * @param aIsManual Specifies whether phone should use a manual or automatic network selection method.
+ * @param aNetworkManualSelection If aIsManual==ETrue, then this parameter contain the user's manually selected network.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	if(!aIsManual)
+		{
+		return KErrNotSupported;
+		}
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		iGloblePhone->iEventSignalActive = ETrue;
+		iATSelectNetwork->SetNetworkSelection(aNetworkManualSelection);
+		iATSelectNetwork->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSelectNetworkReqL
+
+
+TInt CLtsyPhoneHandler::HandleSelectNetworkCancelReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSelectNetworkCancelComp()
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = 0;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if((ret == KErrInUse)&&(iATSelectNetwork->iCommandRunning))
+		{
+		if(iATSelectNetwork->iCommandCancel)
+			{
+			ret = KErrNotSupported;
+			}
+		else
+			{
+			iATSelectNetwork->CancelCommand();
+		    ret = KErrNone;
+			}
+		}
+	else if(ret == KErrNone)
+		{
+		iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneSelectNetworkCancelApiId);
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSelectNetworkCancelReqL
+
+
+TInt CLtsyPhoneHandler::HandleSetNetworkSelectionSettingReqL(const RMobilePhone::TMobilePhoneNetworkSelectionV1& aPhoneNetworkSelection)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetNetworkSelectionSettingComp()
+ *
+ * @param aPhoneNetworkSelection The network selection to be set.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	TInt networkSelection = -1;
+	switch (aPhoneNetworkSelection.iMethod)
+		{
+	case RMobilePhone::ENetworkSelectionAutomatic:
+	    networkSelection = 0;
+		break;
+	case RMobilePhone::ENetworkSelectionManual:
+	    networkSelection = 1;
+		break;
+	default:
+	    networkSelection = 0;
+		break;
+		}
+	
+	if(networkSelection != -1)
+		{
+		ret = iGloblePhone->CheckGlobalPhoneStatus();
+		if(ret == KErrNone)
+			{
+			CATSelectNetworkMode* ATSelectNetworkMode  = CATSelectNetworkMode::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+			iGloblePhone->iEventSignalActive = ETrue;
+			iGloblePhone->SetActiveRequest(ATSelectNetworkMode);
+			ATSelectNetworkMode->SetNetworkSelection(networkSelection);
+			ATSelectNetworkMode->StartRequest();
+			ret = KErrNone;
+			}
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSetNetworkSelectionSettingReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetCurrentNetworkInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetCurrentNetworkInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetCurrentNetworkInfoApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CGetCurrentNetworkInfo* ATNetworkInfo  = CGetCurrentNetworkInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATNetworkInfo);
+		ATNetworkInfo->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetCurrentNetworkInfoReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetNetworkModeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetNetworkModeComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetNetworkModeApiId);
+        iInitializePhone->ExecutePendingRequest();   	
+		ret = KErrNone;
+		}
+	else if(ret == EPhoneInitialised)
+		{
+		iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneGetNetworkModeApiId);
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetNetworkModeReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetNitzInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetNitzInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetNitzInfoApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == EPhoneInitialised)
+		{
+		iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneGetNitzInfoApiId);
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetNITZInfoReqL()
+
+
+TInt CLtsyPhoneHandler::HandleGetSignalStrengthReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetSignalStrengthComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetSignalStrengthApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATGetSignal* ATGetSignal  = CATGetSignal::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGetSignal);
+		ATGetSignal->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetSignalStrengthReqL()
+
+
+TInt CLtsyPhoneHandler::HandleGetBatteryInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetBatteryInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == EPhoneInitialising)
+		{
+		iInitializePhone->AppendIpcRequestToPendingListL(KLtsyDispatchPhoneGetBatteryInfoApiId);
+        iInitializePhone->ExecutePendingRequest();   
+		ret = KErrNone;
+		}
+	else if(ret == KErrNone)
+		{
+		CATGetBattery* ATGetBattery  = CATGetBattery::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(ATGetBattery);
+		ATGetBattery->StartRequest();
+		}
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetBatteryInfoReqL
+
+
+TInt CLtsyPhoneHandler::HandleNspsWakeupReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneNspsWakeupComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleNspsWakeupReqL
+
+
+TInt CLtsyPhoneHandler::HandleSetSystemNetworkModeReqL(RMmCustomAPI::TNetworkModeCaps /*aMode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetSystemNetworkModeComp()
+ *
+ * @param aMode Specifies the mode to set the system network to.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSetSystemNetworkModeReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetCurrentSystemNetworkModesReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetCurrentSystemNetworkModesComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = 0;
+	iAsyncHelperRequest->SetRequestId(KLtsyDispatchPhoneGetCurrentSystemNetworkModesApiId);
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetCurrentSystemNetworkModesReqL
+
+
+TInt CLtsyPhoneHandler::HandleResetNetServerReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneResetNetServerComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleResetNetServerReqL
+
+
+TInt CLtsyPhoneHandler::HandleSetAlwaysOnModeReqL(RMmCustomAPI::TSetAlwaysOnMode /*aMode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetAlwaysOnModeComp()
+ *
+ * @param aMode The new "always on" mode to set, can be
+ *               RMmCustomAPI::EAlwaysModeVPLMN for VPLMN (Visited Public Land Mobile Network) always on,
+ *               RMmCustomAPI::EAlwaysModeHPLMN for HPLMN (Home Public Land Mobile Network) always on,
+ *               RMmCustomAPI::EAlwaysModeBoth for VPLMN and HPLMN always on,
+ *               RMmCustomAPI::EAlwaysModeNeither for neither VPLMN mor HPLMN always on.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSetAlwaysOnModeReqL
+
+
+TInt CLtsyPhoneHandler::HandleSetDriveModeReqL(RMmCustomAPI::TSetDriveMode /*aMode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetDriveModeComp()
+ *
+ * @param aMode The new mode to set (RMmCustomAPI::EDeactivateDriveMode for deactivate drive mode
+ *               or RMmCustomAPI::EActivateDriveMode to activate drive mode).
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSetDriveModeReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetHspaStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetHspaStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetHspaStatusReqL
+
+
+TInt CLtsyPhoneHandler::HandleSetHspaStatusReqL(RMmCustomAPI::THSxPAStatus /*aStatus*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetHspaStatusComp()
+ *
+ * @param aStatus The new HSxPA status (enable or disable).
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleSetHspaStatusReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetNetworkProviderNameReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetNetworkProviderNameComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CGetOperatorNmae* GetOperatorName  = CGetOperatorNmae::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		GetOperatorName->SetRequestTypeL(KLtsyDispatchPhoneGetNetworkProviderNameApiId);
+		iGloblePhone->SetActiveRequest(GetOperatorName);
+		GetOperatorName->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetNetworkProviderNameReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetOperatorNameReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetOperatorNameComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CGetOperatorNmae* GetOperatorName  = CGetOperatorNmae::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		GetOperatorName->SetRequestTypeL(KLtsyDispatchPhoneGetOperatorNameApiId);
+		iGloblePhone->SetActiveRequest(GetOperatorName);
+		GetOperatorName->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetOperatorNameReqL
+
+
+TInt CLtsyPhoneHandler::HandleGetCellInfoReqL()
+/**
+ * This request is completed by invoking one of the 
+ * CCtsyDispatcherCallback::CallbackPhoneGetCellInfoComp().
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CATGetCellInfo* atGetCellInfo  = CATGetCellInfo::NewL(*iGloblePhone,
+				                                              iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atGetCellInfo);
+		atGetCellInfo->SetIpcId(KLtsyDispatchPhoneGetCellInfoApiId);
+		atGetCellInfo->SetIpcRequestCompleteObserver(this);
+		iNotifyCellInfo->Disable();
+		atGetCellInfo->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetCellInfoReqL
+
+TInt CLtsyPhoneHandler::HandleRegisterCellInfoChangeNotificationReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneRegisterCellInfoChangeNotificationComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	//TInt ret = KErrNotSupported;
+	TInt ret = KErrNone;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CATSetNotifyCellInfo* atSetNotifyCellInfo  = CATSetNotifyCellInfo::NewL(*iGloblePhone,
+				                                                                iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSetNotifyCellInfo);
+		atSetNotifyCellInfo->SetIpcId(KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId);
+		atSetNotifyCellInfo->SetIpcRequestCompleteObserver(this);
+		atSetNotifyCellInfo->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleRegisterCellInfoChangeNotificationReqL 
+
+TInt CLtsyPhoneHandler::HandleGetPhoneCellInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetPhoneCellInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CATGetPhoneCellInfo* atGetPhoneCellInfo  = CATGetPhoneCellInfo::NewL(*iGloblePhone,
+				                                                             iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atGetPhoneCellInfo);
+		atGetPhoneCellInfo->SetIpcRequestCompleteObserver(this);
+		atGetPhoneCellInfo->SetIpcId(KLtsyDispatchPhoneGetPhoneCellInfoApiId);
+		// disable to get the notification as we may get the incorrect response after CATGetPhoneCellInfo command was issued
+		iNotifyCellInfo->Disable();
+		atGetPhoneCellInfo->StartRequest();
+		}
+	else if (ret == KErrInUse)
+		{
+		// as dispather will post two IPC requests(KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId and KLtsyDispatchPhoneGetPhoneCellInfoApiId)
+		// together, so we need store one and then execute this AT command after previous one was complete
+		iPendingIpcId = KLtsyDispatchPhoneGetPhoneCellInfoApiId;
+		CRequestBase* activeReq = iGloblePhone->CurrentActiveRequest();
+		if(activeReq)
+		    {
+		    if(activeReq->IpcId() == KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId)
+		        {
+		        ret = KErrNone;
+		        }
+		    }
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetPhoneCellInfoReqL
+
+TInt CLtsyPhoneHandler::HandleGetGetUsimServiceSupportReqL(TInt /*aApplicationNumber*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetUsimServiceSupportComp()
+ * 
+ * @param aApplicationNumber The application number to check support for in the USIM.
+ * 
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetGetUsimServiceSupportReqL
+
+TInt CLtsyPhoneHandler::HandleGetCurrentActiveUsimApplicationReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetCurrentActiveUsimApplicationComp()
+ * 
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetCurrentActiveUsimApplicationReqL
+  
+TInt CLtsyPhoneHandler::HandleTerminateAllCallsReqL(TInt /*aCallId*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneTerminateAllCallsComp()
+ * 
+ * @param aCallId if a call is in the connecting state then this parameter will contain the id of that call, else 0.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	LOGTEXT(_L8("[Ltsy Phone]  Starting CLtsyPhoneHandler::HandleTerminateAllCallsReqL()"));
+	
+	TInt ret = KErrNotSupported;
+	ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if(ret == KErrNone)
+		{
+		CATHangUp* cHangUp = CATHangUp::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(cHangUp);
+		cHangUp->SetHangupOperator(CATHangUp::ERMobilePhoneAPI);
+		cHangUp->StartRequest();
+		}
+	return ret;
+	} // CLtsyPhoneHandler::HandleTerminateAllCallsReqL
+
+TInt CLtsyPhoneHandler::HandleGetSystemNetworkBandReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneGetSystemNetworkBandComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetSystemNetworkBandReqL
+
+TInt CLtsyPhoneHandler::HandleSetSystemNetworkBandReqL(RMmCustomAPI::TBandSelection /*aBand*/, RMmCustomAPI::TNetworkModeCaps /*aMode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackPhoneSetSystemNetworkBandComp()
+ * 
+ * @param aBand the requested band
+ * @param aMode the requested mode
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsyPhoneHandler::HandleGetSystemNetworkBandReqL
+
+void CLtsyPhoneHandler::NotifyIpcRequestComplete(TInt aIpcId)
+/**
+ * This function was called by some IPC request after it complete the request 
+ * 
+ * If there are one more AT commands which need some interactions among them, the logic control should be put here.
+ * 
+ * @param aIpcId The IPC request Id
+ * 
+ * @return void
+ */
+    {
+    if(aIpcId == KLtsyDispatchPhoneRegisterCellInfoChangeNotificationApiId)
+        {
+        if(iPendingIpcId == KLtsyDispatchPhoneGetPhoneCellInfoApiId)
+            {
+            iGloblePhone->DeleteLastActiveRequest();
+            CATGetPhoneCellInfo* getPhoneCellInfo = NULL;
+            TRAPD(err,getPhoneCellInfo  = CATGetPhoneCellInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback));
+            if(err != KErrNone)
+                {
+                RMobilePhone::TMobilePhoneCellInfoV9 cellInfo; 
+                iCtsyDispatcherCallback.CallbackPhoneGetPhoneCellInfoComp(err,cellInfo);
+                }
+            else
+                {
+                iGloblePhone->iEventSignalActive = ETrue;
+                iGloblePhone->SetActiveRequest(getPhoneCellInfo);
+                getPhoneCellInfo->SetIpcRequestCompleteObserver(this);
+                getPhoneCellInfo->SetIpcId(KLtsyDispatchPhoneGetPhoneCellInfoApiId);
+                getPhoneCellInfo->StartRequest();
+                iPendingIpcId = -1;
+                }
+            }
+        }
+    else if(aIpcId == KLtsyDispatchPhoneGetPhoneCellInfoApiId)
+        {
+        // enable to receive the notificaiton of cell info changed
+        iNotifyCellInfo->Enable();
+        }
+    else if(aIpcId == KLtsyDispatchPhoneGetCellInfoApiId)
+        {
+        iNotifyCellInfo->Enable();
+        }
+    else if(aIpcId == KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId)
+        {
+        iNetworkRegStatusChange->Enable();
+        }
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsysathandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,717 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySatHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+#include <satcs.h>
+
+
+
+#include "cltsysathandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsySatHandler::CLtsySatHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsySatHandler::~CLtsySatHandler()
+	{
+	}
+
+
+CLtsySatHandler* CLtsySatHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySatHandler* self = new (ELeave) CLtsySatHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsySatHandler* CLtsySatHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySatHandler* self=
+			CLtsySatHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsySatHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsySatHandler::ConstructL
+
+TBool CLtsySatHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsySatHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *  
+ * @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+ * @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsySatHandler::HandleSmsDeliverReportReqL(const TDesC8& /*aSmsDeliverReportTpdu*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aSmsDeliverReportTpdu The SMS-DELIVER-REPORT TPDU element to be contained in a 
+ * RP-ERROR-PDU (negative acknowledgement) or RP-ACK-PDU (a positive acknowledgement) to a
+ * SMS DELIVER or SMS STATUS REPORT.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleSmsDeliverReportReqL
+
+
+TInt CLtsySatHandler::HandleGetImageInstanceReqL(TUint8 /*aEfImgRecordNumber*/, TUint8 /*aInstanceNumberInEfImgRecord*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetImageInstanceComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ * 
+ * @param aEfImgRecordNumber 			The record number of the icons EF(Img) record for the 
+ * 										icon image instance being retrieved. 
+ * @param aInstanceNumberInEfImgRecord 	The record number of the icon instance, in the icons EF(Img) record
+ * 										for the icon image instance being retrieved. 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;    
+	//TSYLOGENTRYEXITARGS(_L8("aEfImgRecordNumber=%d, aInstanceNumberInEfImgRecord=%d"), aEfImgRecordNumber, aInstanceNumberInEfImgRecord);
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetImageInstanceReqL
+
+TInt CLtsySatHandler::HandleGetIconDataReqL(TUint8 /*aEfImgRecordNumber*/, const TDesC8& /*aSimFilePath*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetIconDataComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEfImgRecordNumber 	EF(img) record number of the icon to retrieve. 
+ * @param aSimFilePath 			The full file path to the EF(Img). 
+ * 								Bytes 	0-1 MF 			(0x3F00)
+ * 								Bytes	2-3 DF(Telecom) (0x7F10) 
+ * 								Bytes	4-5 DF(Graphics)(0x5F50)
+ * 								Bytes	6-7 EF(Ef(Img)) 	(0x4F20)
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	//TSYLOGENTRYEXITARGS(_L8("aEfImgRecordNumber=%d"), aEfImgRecordNumber);
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetIconDataReqL
+
+
+TInt CLtsySatHandler::HandleGetClutReqL(TUint8 /*aEfImgRecordNumber*/, TUint8 /*aInstanceNumberInEfImgRecord*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetClutComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEfImgRecordNumber 			The record number of the icons EF(Img) record for the 
+ * 										CLUT being retrieved. 
+ * @param aInstanceNumberInEfImgRecord 	The record number of the icon instance, in the icons EF(Img) record
+ * 										for the CLUT being retrieved. 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	//TSYLOGENTRYEXITARGS(_L8("aEfImgRecordNumber=%d, aInstanceNumberInEfImgRecord=%d"), aEfImgRecordNumber, aInstanceNumberInEfImgRecord);
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetClutReqL
+
+
+TInt CLtsySatHandler::HandleGetDefaultBearerCapabilityReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetDefaultBearerCapabilityComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetDefaultBearerCapabilityReqL
+
+
+TInt CLtsySatHandler::HandleGetSmsPpDownloadSupportedReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetSmsPpDownloadSupportedComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetSmsPpDownloadSupportedReqL
+
+
+TInt CLtsySatHandler::HandleGetSmsControlActivatedReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetSmsControlActivatedComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetSmsControlActivatedReqL
+
+
+TInt CLtsySatHandler::HandleCellBroadcastEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded data containing an (CELL BROADCAST DOWNLOAD) ENVELOPE command.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleCellBroadcastEnvelopeReqL
+
+TInt CLtsySatHandler::HandleGetAccessTechnologyReqL()
+/**
+* This request is completed by invoking
+* CCtsyDispatcherCallback::CallbackSatGetAccessTechnologyComp
+*
+* This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+*
+* @return KErrNone on success, KErrNotSupported if this request is not supported,
+* or another error code to indicate the failure otherwise.
+*/
+	{
+	TSYLOGENTRYEXIT;
+	
+	TInt ret = KErrNotSupported;
+	
+	// TODO: Add implementation here.......
+	
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetAccessTechnologyReqL
+
+TInt CLtsySatHandler::HandleTimingAdvanceReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatTimingAdvanceComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleTimingAdvanceReqL
+
+
+TInt CLtsySatHandler::HandleSmControlResponseDataReqL(TUint8 /*aResult*/, const TDesC8& /*aRpDestinationAddress*/, const TDesC8& /*aTpDestinationAddress*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aResult MO short message control result the SIM gives to the ME concerning whether to 
+ * allow, bar or modify the proposed short message, encoded as defined in "3GPP TS 11.10-4, 27.22.8 MO SHORT MESSAGE CONTROL BY SIM"
+ * @param aRpDestinationAddress RP Destination Address of the Service Centre to which the ME is proposing to send the short message.
+ * If the address data is not present (zero length), then assume the RP Destination Address of the Service Centre is not to be modified.
+ * @param aTpDestinationAddress TP Destination Address to which the ME is proposing to send the short message.
+ * If the address data is not present (zero length), then assume the TP Destination Address is not to be modified.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleSmControlResponseDataReqL
+
+
+TInt CLtsySatHandler::HandleProvideLocationInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatProvideLocationInfoComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleProvideLocationInfoReqL
+
+
+TInt CLtsySatHandler::HandleSetPollingIntervalReqL(TUint8 /*aPollingInterval*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatSetPollingIntervalComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aPollingInterval The polling interval in seconds indicating how often the 
+ * terminal sends STATUS commands related to Proactive Polling 
+ * (zero indicates Polling should be turned off)
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleSetPollingIntervalReqL
+
+
+TInt CLtsySatHandler::HandleSmsPpDownloadEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded data containing an (SMS-PP DOWNLOAD) ENVELOPE command.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleSmsPpDownloadEnvelopeReqL
+
+
+TInt CLtsySatHandler::HandleLocalInformationNmrReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatLocalInformationNmrComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleLocalInformationNmrReqL
+
+
+TInt CLtsySatHandler::HandleGetUssdControlSupportedReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatGetUssdControlSupportedComp
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleGetUssdControlSupportedReqL
+
+
+TInt CLtsySatHandler::HandleCallAndSmsControlEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded data containing a Call Control or MO SMS control by SIM ENVELOPE command
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleCallAndSmsControlEnvelopeReqL
+
+
+TInt CLtsySatHandler::HandleRefreshAllowedReqL(const TDesC8& /*aRefreshFileList*/, const TDesC8& /*aAid*/, TUint16 /*aTsyCache*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatRefreshAllowed
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aRefreshFileList The list of files (full path) that have been changed by the UICC (see ETSI 102 221 or ETSI 151 011) 
+ * @param aAid Indicates the application on the UICC to be refreshed (as defined ETSI TS 101 220) . 
+ * @param aTsyCache Bit field of files that are cached in SIM ATK TSY (examine using CSatNotificationsTsy::TCachedSimAtkFiles) 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleRefreshAllowedReqL
+
+
+TInt CLtsySatHandler::HandleReadyReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatReady
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * A call to this function indicates that the CTSY is ready to receive proactive commands from the LTSY. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleReadyReqL
+
+
+TInt CLtsySatHandler::HandlePCmdNotificationReqL(TUint8 /*aPCmdType*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aPCmdType The number of the proactive command for which notification is being requested (e.g. KSetUpMenu),
+ *  as defined in ETSI 102 223 etc.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandlePCmdNotificationReqL
+
+
+TInt CLtsySatHandler::HandleUssdControlEnvelopeErrorReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatUssdControlEnvelopeError
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleUssdControlEnvelopeErrorReqL
+
+
+TInt CLtsySatHandler::HandleTimerExpirationEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded Timer expiration ENVELOPE command
+ * see "ETSI TS 102 223" under "ENVELOPE commands" "Timer expiration" 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleTimerExpirationEnvelopeReqL
+
+
+TInt CLtsySatHandler::HandleTerminalRspReqL(const TDesC8& /*aTerminalRsp*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSatTerminalRsp
+ * 
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ * 
+ * @param aTerminalRsp The terminal response TLV as formatted in "ETSI TS 102 223" Under "Structure of TERMINAL RESPONSE"
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleTerminalRspReqL
+
+
+TInt CLtsySatHandler::HandleMenuSelectionEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded Envelope comprising a notification from
+ * the ME that the user has either requested help about, or has selected a menu item
+ * that was previously provided by the SIM application via the SETUP MENU proactive
+ * command. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleMenuSelectionEnvelopeReqL
+
+
+TInt CLtsySatHandler::HandleEventDownloadEnvelopeReqL(const TDesC8& /*aEnvelope*/)
+/**
+ * This request has no associated callback.
+ *
+ * This API is optional and should only be used if the licensee wishes to including the Dispatcher beneath their own SIM ATK TSY.
+ *
+ * @param aEnvelope BER-TLV encoded Event Download ENVELOPE command
+ * see "ETSI TS 102 223" under "ENVELOPE commands" "Event Download" 
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySatHandler::HandleEventDownloadSyncL
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsysecurityhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,374 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySecurityHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+#include "cltsysecurityhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsySecurityHandler::CLtsySecurityHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsySecurityHandler::~CLtsySecurityHandler()
+	{
+	}
+
+
+CLtsySecurityHandler* CLtsySecurityHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySecurityHandler* self = new (ELeave) CLtsySecurityHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsySecurityHandler* CLtsySecurityHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySecurityHandler* self=
+			CLtsySecurityHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsySecurityHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsySecurityHandler::ConstructL
+
+TBool CLtsySecurityHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsySecurityHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsySecurityHandler::HandleGetSecurityCodeInfoReqL(RMobilePhone::TMobilePhoneSecurityCode /*aSecCode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityGetSecurityCodeInfoComp()
+ *
+ * @param aSecCode Security code.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleGetSecurityCodeInfoReqL
+
+
+TInt CLtsySecurityHandler::HandleGetLockInfoReqL(RMobilePhone::TMobilePhoneLock /*aLockType*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityGetLockInfoComp()
+ *
+ * @param aLockType Phone lock type.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleGetLockInfoReqL
+
+
+TInt CLtsySecurityHandler::HandleAbortSecurityCodeReqL(RMobilePhone::TMobilePhoneSecurityCode /*aSecCode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityAbortSecurityCodeComp()
+ *
+ * @param aSecCode Security code.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleAbortSecurityCodeReqL
+
+
+TInt CLtsySecurityHandler::HandleGetCurrentActivePinReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityGetCurrentActivePinComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleGetCurrentActivePinReqL
+
+
+TInt CLtsySecurityHandler::HandleSetLockSettingReqL(RMobilePhone::TMobilePhoneLock /*aLock*/, RMobilePhone::TMobilePhoneLockSetting /*aSetting*/, const TDesC& /*aPassword*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecuritySetLockSettingComp()
+ *
+ * @param aLock The lock to change.
+ * @param aSetting The new settings for the lock.
+ * @param aPassword The password paramaters.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleSetLockSettingReqL
+
+
+TInt CLtsySecurityHandler::HandleVerifySecurityCodeReqL(
+		RMobilePhone::TMobilePhoneSecurityCode /*aSecCode*/,
+		const RMobilePhone::TCodeAndUnblockCode& /*aCodes*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityVerifySecurityCodeComp()
+ *
+ * @param aSecCode Security code.
+ * @param aCodes Code and unblock code.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleVerifySecurityCodeReqL
+
+TInt CLtsySecurityHandler::HandleGetPin1DisableSupportedReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityGetPin1DisableSupportedComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleGetPin1DisableSupportedReqL
+
+TInt CLtsySecurityHandler::HandleCheckSecurityCodeReqL(DispatcherSecurity::TSecurityCodeId /*aSecCodeID*/, const TDes& /*aSecCode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityCheckSecurityCodeComp()
+ *
+ * @param aSecCodeID Code ID.
+ * @param aSecCode Security code (maximum length = KMaxMobilePasswordSize).
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleCheckSecurityCodeReqL
+
+
+TInt CLtsySecurityHandler::HandleDisablePhoneLockReqL(const TDesC& /*aSecCode*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityDisablePhoneLockComp()
+ *
+ * @param aSecCode Security password (maximum length = KMaxMobilePasswordSize).
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleDisablePhoneLockReqL
+
+
+TInt CLtsySecurityHandler::HandleGetCipheringInfoReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityGetCipheringInfoComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleGetCipheringInfoReqL
+
+
+TInt CLtsySecurityHandler::HandleIsSecurityCodeBlockedReqL(DispatcherSecurity::TSecurityCodeId /*aSecCodeID*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityIsSecurityCodeBlockedComp()
+ *
+ * @param aSecCodeID Code ID.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleIsSecurityCodeBlockedReqL
+
+TInt CLtsySecurityHandler::HandleCheckSecurityCodeCancelReqL(DispatcherSecurity::TSecurityCodeId /*aSecCodeID*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSecurityCheckSecurityCodeCancelComp()
+ *
+ * @param aCodeID Code ID.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySecurityHandler::HandleCheckSecurityCodeCancelReqL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsysimhandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,732 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySimHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsysimhandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsySimHandler::CLtsySimHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsySimHandler::~CLtsySimHandler()
+	{
+	}
+
+
+CLtsySimHandler* CLtsySimHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySimHandler* self = new (ELeave) CLtsySimHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsySimHandler* CLtsySimHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySimHandler* self=
+			CLtsySimHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsySimHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsySimHandler::ConstructL
+
+TBool CLtsySimHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried.
+ * @return indication whether interface is supported or not.
+ */
+	{
+
+	
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsySimHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1.
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsySimHandler::HandleGetApnControlListServiceStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetApnControlListServiceStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetApnControlListServiceStatusReqL
+
+
+TInt CLtsySimHandler::HandleDeleteApnNameReqL(TUint32 /*aIndex*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimDeleteApnNameComp()
+ *
+ * @param aIndex The index of the entry to delete.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleDeleteApnNameReqL
+
+
+TInt CLtsySimHandler::HandleEnumerateApnEntriesReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimEnumerateApnEntriesComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleEnumerateApnEntriesReqL
+
+
+TInt CLtsySimHandler::HandleChangeSecurityCodeReqL(RMobilePhone::TMobilePhoneSecurityCode /*aSecCode*/,
+												   const RMobilePhone::TMobilePhonePasswordChangeV1& /*aPasswds*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimChangeSecurityCodeComp()
+ *
+ * @param aSecCode The security code to be changed.
+ * @param aPasswds The old and the new values of the security code.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleChangeSecurityCodeReqL
+
+
+TInt CLtsySimHandler::HandleSetFdnSettingReqL(RMobilePhone::TMobilePhoneFdnSetting /*aFdnSetting*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSetFdnSettingComp()
+ *
+ * @param aFdnSetting The FDN setting.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSetFdnSettingReqL
+
+
+TInt CLtsySimHandler::HandleGetCustomerServiceProfileReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetCustomerServiceProfileComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetCustomerServiceProfileReqL
+
+
+TInt CLtsySimHandler::HandleGetSubscriberIdReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetSubscriberIdComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetSubscriberIdReqL
+
+
+TInt CLtsySimHandler::HandleAppendApnNameReqL(const RMobilePhone::TAPNEntryV3& /*aEntry*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimAppendApnNameComp()
+ *
+ * @param aEntry The entry to append to the APN list.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleAppendApnNameReqL
+
+
+TInt CLtsySimHandler::HandleGetActiveIccApplicationTypeReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetActiveIccApplicationTypeComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetActiveIccApplicationTypeReqL
+
+
+TInt CLtsySimHandler::HandleSetIccMessageWaitingIndicatorsReqL(const RMobilePhone::TMobilePhoneMessageWaitingV1& /*aIndicators*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSetIccMessageWaitingIndicatorsComp()
+ *
+ * @param aIndicators The message waiting indicators to set.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSetIccMessageWaitingIndicatorsReqL
+
+
+TInt CLtsySimHandler::HandleSetApnControlListServiceStatusReqL(RMobilePhone::TAPNControlListServiceStatus /*aStatus*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSetApnControlListServiceStatusComp()
+ *
+ * @param aStatus The service status to set.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSetApnControlListServiceStatusReqL
+
+
+TInt CLtsySimHandler::HandleGetApnNameReqL(TUint32 /*aIndex*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetApnNameComp()
+ *
+ * @param aIndex The index of the APN entry to get from LTSY.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetApnNameReqL
+
+
+TInt CLtsySimHandler::HandleSimRefreshDoneReqL(TInt /*aError*/)
+/**
+ * This request has no associated callback.
+ *
+ * @param aError The error which has occured during a SIM refresh, KErrNone if no error.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimRefreshDoneSyncL
+
+TInt CLtsySimHandler::HandleGetServiceTableReqL(
+							RMobilePhone::TMobilePhoneServiceTable /*aServiceTable*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetServiceTableComp()
+ * 
+ * @param aServiceTable Service table to get information about.
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+
+
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetServiceTableReqL
+
+TInt CLtsySimHandler::HandleGetIccMessageWaitingIndicatorsReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetIccMessageWaitingIndicatorsComp()
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise. 
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+	
+	//TO DO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetIccMessageWaitingIndicatorsReqL
+
+TInt CLtsySimHandler::HandleSimLockActivateReqL(const TDesC& /*aPassword*/, RMmCustomAPI::TLockNumber /*aLockNumber*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSimLockActivateComp()
+ *
+ * @param aPassword The password used for the SIM Lock activation.
+ * @param aLockNumber The lock number that defines SIM Lock types.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimLockActivateReqL
+
+
+TInt CLtsySimHandler::HandleSimLockDeActivateReqL(const TDesC& /*aPassword*/, RMmCustomAPI::TLockNumber /*aLockNumber*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSimLockDeActivateComp()
+ *
+ * @param aPassword The password used for the SIM Lock deactivation.
+ * @param aLockNumber The lock number that defines SIM Lock types.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimLockDeActivateReqL
+
+
+TInt CLtsySimHandler::HandleGetAnswerToResetReqL(const TDesC8& /*aAnswerToReset*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetAnswerToResetComp()
+ *
+ * @param aAnswerToReset The answer to reset information which contains details of the request.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetAnswerToResetReqL
+
+
+TInt CLtsySimHandler::HandleGetSimCardReaderStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetSimCardReaderStatusComp()
+ *
+ * @param aSimCardReaderStatus The sim card reader status information which contains details of the request.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetSimCardReaderStatusReqL
+
+
+TInt CLtsySimHandler::HandleGetSimAuthenticationEapSimDataReqL(const TDesC8& /*aRandomParameters*/, TInt /*aRFStateInfo*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetSimAuthenticationEapSimDataComp()
+ *
+ * @param aRandomParameters The random parameters from the client.
+ * @param aRFStateInfo The RF state info.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetSimAuthenticationEapSimDataReqL
+
+TInt CLtsySimHandler::HandleGetSimAuthenticationEapAkaDataReqL(const TDesC8& /*aRandomParameters*/, const TDesC8& /*aAUTN*/, TInt /*aRFStateInfo*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimGetSimAuthenticationEapAkaDataComp()
+ *
+ * @param aRandomParameters The random parameters from the client.
+ * @param aAUTN The AUTN parameter. AUTN is an authentication value generated by
+ *        the Authentication Centre, which, together with the random parameters, authenticates the server to the peer, 128 bits.
+ * @param aRFStateInfo The RF state info.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	//TO DO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleGetSimAuthenticationEapAkaDataReqL
+
+
+TInt CLtsySimHandler::HandlePowerSimOffReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimPowerSimOffComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandlePowerSimOffReqL
+
+
+TInt CLtsySimHandler::HandlePowerSimOnReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimPowerSimOnComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandlePowerSimOnReqL
+
+TInt CLtsySimHandler::HandleReadSimFileReqL(const TDesC8& /*aPath*/, TUint16 /*aOffset*/, TUint16 /*aSize*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimReadSimFileComp()
+ *
+ * @param aPath The absolute file path of the SIM file in the file system of the SIM.
+ * see ETSI TS 131 102 Under "Files of USIM"
+ * @param aOffset The value of the Offset, the offset is related with the type of SIM file being read.
+ * @param aSize The amount of bytes to be read from the SIM file.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleReadSimFileReqL
+
+TInt CLtsySimHandler::HandleSimSendApduRequestReqL(TUint8 /*aServiceType*/, TUint8 /*aCardReaderNumber*/, TUint8 /*aApplicationType*/, const TDesC8& /*aCommandData*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSendApduRequestComp()
+ *
+ * @param aServiceType The value for the service type of the request.
+ * @param aCardReaderNumber The value for the card reader number of the request.
+ * @param aApplicationType The value for the application type of the request.
+ * @param aCommandData The transparent data to be conveyed to the Baseband.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimSendApduRequestReqL
+
+TInt CLtsySimHandler::HandleSimSendApduRequestV2ReqL(TUint8 /*aCardReaderId*/, const TDesC8& /*aCommandData*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSendApduRequestV2Comp()
+ *
+ * @param aCardReaderId The value for the card reader Id of the request.
+ * @param aCommandData The transparent data to be conveyed to the Baseband.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimSendApduRequestV2ReqL
+
+
+TInt CLtsySimHandler::HandleSimWarmResetReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSimWarmResetComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSimWarmResetReqL
+
+
+TInt CLtsySimHandler::HandleSetSimMessageStatusReadReqL(const TTime& /*aTimestamp*/, TInt /*aTimezoneDiff*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSimSetSimMessageStatusRead()
+ *
+ * No error code is returned to the ETel client - if no SMS message with matching timestamp is identified
+ * on the SIM then this error will be silently ignored.
+ *
+ * @param aTimestamp timestamp that uniquely identifies a particular message in the message store.
+ * @param aTimezoneDiff the difference, expressed in quarters of an hour, between the service centre local time and GMT
+ *
+ * @return KErrNone on success, otherwise another error code indicating the
+ * failure.
+ * 
+ * @see RMmCustomAPI::SetSimMessageStatusRead()
+ **/
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySimHandler::HandleSetSimMessageStatusReadReqL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsysmshandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,450 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySmsHandler/
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsysmshandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+#include "globalphonemanager.h"
+#include "atmessagestoreinfo.h"
+#include "atsmssend.h"
+#include "atsmsreceive.h"
+#include "atsmsack.h"
+#include "mslogger.h"
+#include "asynchelperrequest.h"
+CLtsySmsHandler::CLtsySmsHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	:iCtsyDispatcherCallback(aCtsyDispatcherCallback),iGloblePhone(aGloblePhone)
+	{
+	
+	}
+
+	
+CLtsySmsHandler::~CLtsySmsHandler()
+	{
+	if ( iAtSmsReceive )
+		{
+	    delete iAtSmsReceive;
+		}
+	}
+
+
+CLtsySmsHandler* CLtsySmsHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySmsHandler* self = new (ELeave) CLtsySmsHandler(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsySmsHandler* CLtsySmsHandler::NewL(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback,CGlobalPhonemanager* aGloblePhone)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySmsHandler* self=
+			CLtsySmsHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsySmsHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	iAsyncHelperRequest = CAsyncHelperRequest::NewL((*iGloblePhone), iCtsyDispatcherCallback);
+	iAtSmsReceive = CAtSmsReceive::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+	iAtSmsReceive->StartRequest();
+
+	} // CLtsySmsHandler::ConstructL
+
+TBool CLtsySmsHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried
+ * @return indication whether interface is supported or not
+ */
+	{
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY 
+		case KLtsyDispatchSmsGetSmsStoreInfoApiId:
+		    return ETrue;
+		case KLtsyDispatchSmsNackSmsStoredApiId:
+			return ETrue;
+		case KLtsyDispatchSmsAckSmsStoredApiId:
+			return ETrue;
+		case KLtsyDispatchSmsSendSmsMessageApiId:
+			return ETrue;
+		case KLtsyDispatchSmsSetMoSmsBearerApiId:
+			return ETrue;
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsySmsHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchSmsNotifyReceiveSmsMessageIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	
+	}
+
+
+TInt CLtsySmsHandler::HandleSendSatSmsReqL( const TDesC8& /*aSmsTpdu*/,
+		   RMobileSmsMessaging::TMobileSmsDataFormat /*aDataFormat*/,
+		   const RMobilePhone::TMobileAddress& /*aGsmServiceCentre*/,
+		   TBool /*aMoreMessages*/
+		  )
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsSendSatSmsComp
+ *
+ * @param aDestination The mobile telephone number.
+ * @param aSmsTpdu The SMS TPDU.
+ * @param aDataFormat The SMS data format.
+ * @param aGsmServiceCentre The service centre number.
+ * @param aMore  This indicates whether the client is going to send another SMS immediately 
+	                 after this one.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleSendSatSmsReqL
+
+
+TInt CLtsySmsHandler::HandleGetSmsStoreInfoReqL(/* TODO: Add correct parameteres here */)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsGetSmsStoreInfoComp
+ *
+ * @param TODO: Add parameter in-source documentation here
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtMessageStoreInfo* atMessageStoreInfo = CAtMessageStoreInfo::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atMessageStoreInfo);
+		atMessageStoreInfo->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleGetSmsStoreInfoReqL
+
+
+TInt CLtsySmsHandler::HandleGetSmspListReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsGetSmspListComp
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleGetSmspListReqL
+
+
+TInt CLtsySmsHandler::HandleNackSmsStoredReqL(const TDesC8& aMsgPtr, TInt /*aRpCause*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsNackSmsStoredComp
+ *
+ * @param aMsgPtr Reference to TPDU data.
+ * @param aRpCause RP cause.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsNack* atSmsNack = CAtSmsNack::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		atSmsNack->SetNackTpdu(aMsgPtr);
+		iGloblePhone->SetActiveRequest(atSmsNack);
+		atSmsNack->StartRequest();
+		}
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleNackSmsStoredReqL
+
+TInt CLtsySmsHandler::HandleNackSmsStoredReqL( TInt /*aRpCause*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsNackSmsStoredComp
+ *
+ * @param aMsgPtr Reference to TPDU data.
+ * @param aRpCause RP cause.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+    {
+    TSYLOGENTRYEXIT;
+
+    TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+    if( KErrNone == ret )
+        {
+        CAtSmsNack* atSmsNack = CAtSmsNack::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+        //Setting Port active
+        iGloblePhone->iEventSignalActive = ETrue;
+        //atSmsNack->SetNackTpdu(aMsgPtr);
+        iGloblePhone->SetActiveRequest(atSmsNack);
+        atSmsNack->StartRequest();
+        }
+
+    return TSYLOGSETEXITERR(ret);
+    } // CLtsySmsHandler::HandleNackSmsStoredReqL
+
+TInt CLtsySmsHandler::HandleAckSmsStoredReqL(const TDesC8& /*aMsgPtr*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsAckSmsStoredComp
+ *
+ * @param aMsgPtr Contains the TPDU defined for a SMS-DELIVER-REPORT.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsAck* atSmsAck = CAtSmsAck::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsAck);
+		atSmsAck->StartRequest();
+		}
+	
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleAckSmsStoredReqL
+
+TInt CLtsySmsHandler::HandleAckSmsStoredReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsAckSmsStoredComp
+ *
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+    {
+    TSYLOGENTRYEXIT;
+
+    TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+    if( KErrNone == ret )
+        {
+        CAtSmsAck* atSmsAck = CAtSmsAck::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+        //Setting Port active
+        iGloblePhone->iEventSignalActive = ETrue;
+        iGloblePhone->SetActiveRequest(atSmsAck);
+        atSmsAck->StartRequest();
+        }
+    
+    return TSYLOGSETEXITERR(ret);
+    }
+
+TInt CLtsySmsHandler::HandleResumeSmsReceptionReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsResumeSmsReceptionComp
+ *
+ * @param TODO: Add parameter in-source documentation here
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleResumeSmsReceptionReqL
+
+
+TInt CLtsySmsHandler::HandleSendSmsMessageReqL( const RMobilePhone::TMobileAddress& aDestination,
+	     									    const TDesC8& aSmsTpdu,
+	     									    RMobileSmsMessaging::TMobileSmsDataFormat aDataFormat,
+	     										const RMobilePhone::TMobileAddress& aGsmServiceCentre,
+	     										TBool aMoreMessages
+	   										   ) 
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsSendSmsMessageComp
+ *
+ * @param aDestination The mobile telephone number.
+ * @param aSmsTpdu The SMS TPDU.
+ * @param aDataFormat The SMS data format.
+ * @param aGsmServiceCentre The service centre number.
+ * @param aMore This indicates whether the client is going to send another SMS immediately 
+	            after this one. 
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	if(aSmsTpdu.Length() > KGsmTpduSize)
+		{
+		return TSYLOGSETEXITERR(KErrArgument);
+		}
+	TSmsSendParam msgParam;
+	msgParam.iDataFormat = aDataFormat;
+	msgParam.iDestination = aDestination;
+	msgParam.iSmsTpdu = aSmsTpdu;
+	msgParam.iGsmServiceCentre = aGsmServiceCentre;
+	msgParam.iMoreMessages = aMoreMessages;
+	TInt ret = iGloblePhone->CheckGlobalPhoneStatus();
+	if( KErrNone == ret )
+		{
+		CAtSmsSend* atSmsSend = CAtSmsSend::NewL(*iGloblePhone,iCtsyDispatcherCallback);
+		//Setting Port active
+		iGloblePhone->iEventSignalActive = ETrue;
+		iGloblePhone->SetActiveRequest(atSmsSend);
+		atSmsSend->SetMessageParam(msgParam);
+		atSmsSend->StartRequest();
+		}
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleSendSmsMessageReqL
+
+TInt CLtsySmsHandler::HandleSendSmsMessageNoFdnCheckReqL( const RMobilePhone::TMobileAddress& /*aDestination*/,
+	     												  const TDesC8& /*aSmsTpdu*/,
+	     												  RMobileSmsMessaging::TMobileSmsDataFormat /*aDataFormat*/,
+	     												  const RMobilePhone::TMobileAddress& /*aGsmServiceCentre*/,
+	     												  TBool /*aMoreMessages*/
+	   													) 
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsSendSmsMessageNoFdnCheckComp
+ *
+ * @param aDestination The mobile telephone number.
+ * @param aSmsTpdu The SMS TPDU.
+ * @param aDataFormat The SMS data format.
+ * @param aGsmServiceCentre The service centre number.
+ * @param aMore This indicates whether the client is going to send another SMS immediately 
+	            after this one. 
+	                 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+	
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleSendSmsMessageNoFdnCheckReqL
+
+TInt CLtsySmsHandler::HandleSetMoSmsBearerReqL(RMobileSmsMessaging::TMobileSmsBearer /*aBearer*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsSetMoSmsBearerComp
+ *
+ * 
+ * @param aBearer The SMS bearer.
+ * 
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNone;
+	iAsyncHelperRequest->SetRequestId(MLtsyDispatchSmsSetMoSmsBearer::KLtsyDispatchSmsSetMoSmsBearerApiId);
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleSetMoSmsBearerReqL
+
+
+TInt CLtsySmsHandler::HandleStoreSmspListEntryReqL(const RMobileSmsMessaging::TMobileSmspEntryV1& /*aSmsParam*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSmsStoreSmspListEntryComp
+ *
+ * @param aSmsParam Defines a set of SMS parameters.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNone;
+
+	// TODO: Add implementation here.......
+
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySmsHandler::HandleStoreSmspListReqL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/handler/src/cltsysupplementaryserviceshandler.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,415 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// CLtsySupplementaryServicesHandler
+
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmtsy_ipcdefs.h>
+
+
+
+#include "cltsysupplementaryserviceshandler.h"
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ltsymacros.h"
+
+
+
+CLtsySupplementaryServicesHandler::CLtsySupplementaryServicesHandler(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	: iCtsyDispatcherCallback(aCtsyDispatcherCallback)
+	{
+	}
+
+	
+CLtsySupplementaryServicesHandler::~CLtsySupplementaryServicesHandler()
+	{
+	}
+
+
+CLtsySupplementaryServicesHandler* CLtsySupplementaryServicesHandler::NewLC(
+	CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySupplementaryServicesHandler* self = new (ELeave) CLtsySupplementaryServicesHandler(aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+CLtsySupplementaryServicesHandler* CLtsySupplementaryServicesHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	TSYLOGENTRYEXIT;
+	CLtsySupplementaryServicesHandler* self=
+			CLtsySupplementaryServicesHandler::NewLC(aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CLtsySupplementaryServicesHandler::ConstructL()
+/**
+ * Second phase constructor.
+ */
+	{
+	TSYLOGENTRYEXIT;
+	
+	
+	} // CLtsySupplementaryServicesHandler::ConstructL
+
+TBool CLtsySupplementaryServicesHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId)
+/**
+ * Returns whether a Dispatch Interface APi is supported or not.
+ * 
+ * @param aDispatchApiId Id of Dispatch interface being queried.
+ * @return indication whether interface is supported or not.
+ */
+	{
+
+	switch(aDispatchApiId)
+		{
+		// Insert ApiIds when support is provided in LTSY e.g.
+		// case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: return ETrue;
+		
+		default:
+			return EFalse;
+		}
+	}
+
+void CLtsySupplementaryServicesHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup /*aIdGroup*/, TUint32& /*aIndIdBitMask*/)
+/**
+ * Returns the set of callback indicators that are supported.
+ * 
+* @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1.
+* @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported.
+ */
+	{
+
+	//Create bitmask with bitset for each indicator ID that is supported. E.g.
+	/*
+	if(aIdGroup == EIndIdGroup1)
+		aIndIdBitMask = KLtsyDispatchPhoneNotifyNetworkModeChangeIndId | 
+						KLtsyDispatchPhoneNotifyEgprsInfoChangeIndId | 
+						KLtsyDispatchPhoneNotifySignalStrengthChangeIndId;
+	else
+		aIndIdBitMask = 0; //no indicators from other groups supported
+	*/
+	}
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSendNetworkServiceRequestNoFdnCheckReqL(const TDesC& /*aRequest*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSendNetworkServiceRequestNoFdnCheckComp()
+ *
+ * @param aRequest The supplementary services string that was entered by the user and need to be send to the network.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSendNetworkServiceRequestNoFdnCheckReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleGetCallWaitingStatusReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesGetCallWaitingStatusComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleGetCallWaitingStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSendNetworkServiceRequestReqL(const TDesC& /*aRequest*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSendNetworkServiceRequestComp()
+ *
+ * @param aRequest The supplementary services string that was entered by the user and need to be send to the network.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSendNetworkServiceRequestReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleGetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition /*aCondition*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesGetCallBarringStatusComp()
+ *
+ * @param aCondition The barring conditions to interrogate.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleGetCallBarringStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition /*aCondition*/,
+        RMobilePhone::TMobilePhoneServiceAction /*aAction*/,
+        RMobilePhone::TMobileService /*aGroup*/,
+        const TDesC& /*aPassword*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSetCallBarringStatusComp()
+ *
+ * @param aCondition the call barring condition to set.
+ * @param aAction the call barring action.
+ * @param aGroup the call barring service group.
+ * @param aPassword the password of the call barring service.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSetCallBarringStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition /*aCondition*/,
+		RMobilePhone::TMobileService /*aServiceGroup*/,
+		RMobilePhone::TMobilePhoneServiceAction /*aAction*/,
+		const TDesC& /*aNumber*/,
+		TInt /*aTimeout*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSetCallForwardingStatusComp()
+ *
+ * @param aCondition the call forwarding condition to set.
+ * @param aServiceGroup The basic service group to apply the CF status change to.
+ * @param aAction The action to take.
+ * @param aNumber The forwarding number.
+ * @param aTimeout The time out when aCondition is ECallForwardingNoReply.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSetCallForwardingStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSetCallWaitingStatusReqL(RMobilePhone::TMobileService /*aServiceGroup*/,
+		RMobilePhone::TMobilePhoneServiceAction /*aAction*/) 
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSetCallWaitingStatusComp()
+ *
+ * @param aServiceGroup The service group to change.
+ * @param aAction The action to do with that service group.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSetCallWaitingStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSetSsPasswordReqL(const TDesC& /*aOldPassword*/,
+		const TDesC& /*aNewPassword*/,
+		MLtsyDispatchSupplementaryServicesSetSsPassword::TServiceType /*aService*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSetSsPasswordComp()
+ *
+ * @param aOldPassword The old password.
+ * @param aNewPassword The new password.
+ * @param aService The service.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSetSsPasswordReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleGetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition /*aCondition*/, RMobilePhone::TMobileService /*aService*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesGetCallForwardingStatusComp()
+ *
+ * @param aCondition the call forwarding condition.
+ * @param aService The service group.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleGetCallForwardingStatusReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleSendUssdMessageReqL(const TDesC8& /*aData*/, TUint8 /*aDcs*/, 
+		RMobileUssdMessaging::TMobileUssdDataFormat /*aFormat*/, RMobileUssdMessaging::TMobileUssdMessageType /*aType*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSendUssdMessageComp()
+ *
+ * @param aData The data to send in the message.
+ * @param aDcs The data coding scheme of the message.
+ * @param aFormat The message format.
+ * @param aType The message type.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSendUssdMessageReqL
+
+TInt CLtsySupplementaryServicesHandler::HandleSendUssdMessageNoFdnCheckReqL(const TDesC8& /*aData*/, TUint8 /*aDcs*/, 
+		RMobileUssdMessaging::TMobileUssdDataFormat /*aFormat*/, RMobileUssdMessaging::TMobileUssdMessageType /*aType*/)
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSendUssdMessageNoFdnCheckComp()
+ *
+ * @param aData The data to send in the message.
+ * @param aDcs The data coding scheme of the message.
+ * @param aFormat The message format.
+ * @param aType The message type.
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSendUssdMessageNoFdnCheckReqL
+
+TInt CLtsySupplementaryServicesHandler::HandleSendUssdReleaseReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesSendUssdReleaseComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleSendUssdReleaseReqL
+
+
+TInt CLtsySupplementaryServicesHandler::HandleClearBlacklistReqL()
+/**
+ * This request is completed by invoking
+ * CCtsyDispatcherCallback::CallbackSupplementaryServicesClearBlacklistComp()
+ *
+ * @return KErrNone on success, KErrNotSupported if this request is not supported,
+ * or another error code to indicate the failure otherwise.
+ */
+	{
+	TSYLOGENTRYEXIT;
+
+	TInt ret = KErrNotSupported;
+
+	// TODO: Add implementation here.......
+
+	return TSYLOGSETEXITERR(ret);
+	} // CLtsySupplementaryServicesHandler::HandleClearBlacklistReqL
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/documentation/integration_stltsy_Test_Specification.doc	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,15838 @@
+{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch13\stshfloch0\stshfhich0\stshfbi0\deflang2057\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+{\f11\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};}
+{\f36\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;}{\f37\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f38\froman\fcharset238\fprq2 Times New Roman CE;}{\f39\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f41\froman\fcharset161\fprq2 Times New Roman Greek;}{\f42\froman\fcharset162\fprq2 Times New Roman Tur;}{\f43\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f44\froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\f45\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f46\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f48\fswiss\fcharset238\fprq2 Arial CE;}{\f49\fswiss\fcharset204\fprq2 Arial Cyr;}{\f51\fswiss\fcharset161\fprq2 Arial Greek;}
+{\f52\fswiss\fcharset162\fprq2 Arial Tur;}{\f53\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f54\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f55\fswiss\fcharset186\fprq2 Arial Baltic;}{\f56\fswiss\fcharset163\fprq2 Arial (Vietnamese);}
+{\f58\fmodern\fcharset238\fprq1 Courier New CE;}{\f59\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f61\fmodern\fcharset161\fprq1 Courier New Greek;}{\f62\fmodern\fcharset162\fprq1 Courier New Tur;}{\f63\fmodern\fcharset177\fprq1 Courier New (Hebrew);}
+{\f64\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f65\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f66\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}
+{\f150\fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f148\fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}
+{\f149\fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f151\fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}
+{\f152\fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f155\fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f170\fnil\fcharset0\fprq2 SimSun Western{\*\falt \'cb\'ce\'cc\'e5};}
+{\f400\fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f398\fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f399\fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f401\fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f402\fmodern\fcharset162\fprq1 @MS Mincho Tur;}
+{\f405\fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\f410\fnil\fcharset0\fprq2 @SimSun Western;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
+\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red255\green255\blue255;
+}{\stylesheet{\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \snext0 \styrsid9137866 Normal;}{\s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 1;}{\s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 2;}{\s3\ql \fi-720\li720\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx720\aspalpha\aspnum\faauto\ls2\ilvl2\outlinelevel2\adjustright\rin43\lin720\itap0 \b\f1\fs22\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 3;}{\s4\ql \fi-864\li864\ri0\sb120\sa120\keepn\widctlpar
+\jclisttab\tx864\aspalpha\aspnum\faauto\ls2\ilvl3\outlinelevel3\adjustright\rin0\lin864\itap0 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 4;}{\s5\ql \fi-1008\li1008\ri0\sb120\sa120\widctlpar
+\jclisttab\tx1008\aspalpha\aspnum\faauto\ls2\ilvl4\outlinelevel4\adjustright\rin0\lin1008\itap0 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 5;}{\s6\ql \fi-1152\li1152\ri0\sb120\sa120\widctlpar
+\jclisttab\tx1152\aspalpha\aspnum\faauto\ls2\ilvl5\outlinelevel5\adjustright\rin0\lin1152\itap0 \b\i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 6;}{\s7\ql \fi-1296\li1296\ri0\sb120\sa120\widctlpar
+\jclisttab\tx1296\aspalpha\aspnum\faauto\ls2\ilvl6\outlinelevel6\adjustright\rin0\lin1296\itap0 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 7;}{\s8\ql \fi-1440\li1440\ri0\sb120\sa120\widctlpar
+\jclisttab\tx1440\aspalpha\aspnum\faauto\ls2\ilvl7\outlinelevel7\adjustright\rin0\lin1440\itap0 \b\i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 8;}{\s9\ql \fi-1584\li1584\ri0\sb120\sa120\widctlpar
+\jclisttab\tx1584\aspalpha\aspnum\faauto\ls2\ilvl8\outlinelevel8\adjustright\rin0\lin1584\itap0 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \styrsid9137866 heading 9;}{\*\cs10 \additive \ssemihidden 
+Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv 
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\loch\f0\hich\af0\dbch\af13\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\s15\ql \li0\ri0\widctlpar
+\tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext15 \styrsid9137866 header;}{\s16\qj \li0\ri0\sa120\widctlpar\brdrt\brdrs\brdrw15\brsp120 
+\tqc\tx4950\tqc\tx9000\tqc\tx9090\tqr\tx10490\aspalpha\aspnum\faauto\adjustright\rin0\lin0\rtlgutter\itap0 \scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext16 \styrsid9137866 footer;}{
+\s17\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext17 \styrsid9137866 Tabletitle;}{\*\cs18 \additive \sbasedon10 \styrsid9137866 
+page number;}{\s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext19 \styrsid9137866 Body Text;}{
+\s20\ql \li0\ri43\sb40\widctlpar\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext20 \styrsid9137866 Table Text;}{\s21\ql \fi-1008\li1008\ri0\sb120\sa120\keepn\widctlpar
+\jclisttab\tx1008\aspalpha\aspnum\faauto\ls1\ilvl4\outlinelevel3\adjustright\rin0\lin1008\itap0 \b\i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon25 \snext21 \styrsid9137866 Appendix Heading 4;}{
+\s22\ql \li0\ri43\sb120\sa120\keepn\widctlpar\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin43\lin0\itap0 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon1 \snext0 \styrsid9137866 Appendix Title;}{
+\s23\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar\jclisttab\tx576\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon2 \snext0 \styrsid9137866 
+Appendix Heading 1;}{\s24\ql \fi-720\li720\ri43\sb120\sa120\keepn\widctlpar\jclisttab\tx720\aspalpha\aspnum\faauto\ls1\ilvl2\outlinelevel2\adjustright\rin43\lin720\itap0 \b\f1\fs22\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 
+\sbasedon3 \snext0 \styrsid9137866 Appendix Heading 2;}{\s25\ql \fi-864\li864\ri0\sb120\sa120\keepn\widctlpar\jclisttab\tx864\aspalpha\aspnum\faauto\ls1\ilvl3\outlinelevel3\adjustright\rin0\lin864\itap0 
+\b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon4 \snext0 \styrsid9137866 Appendix Heading 3;}{\s26\ql \li0\ri43\sb120\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0 
+\b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon1 \snext0 \sautoupd \ssemihidden \styrsid9137866 toc 1;}{\s27\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\b\f1\fs32\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon36 \snext27 \styrsid9137866 Document Title;}{\s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0 
+\scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid9137866 toc 2;}{\s29\ql \li400\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin400\itap0 
+\i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid9137866 toc 3;}{\s30\ql \li1000\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin1000\itap0 
+\f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid9137866 toc 6;}{\s31\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon19 \snext31 \styrsid9137866 Metadata Title;}{\s32\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 
+\sbasedon19 \snext32 \styrsid9137866 Metadata;}{\s33\qj \li0\ri0\sa120\widctlpar\brdrt\brdrs\brdrw15\brsp120 \tqc\tx4950\tqc\tx9000\tqc\tx9090\tqr\tx10490\aspalpha\aspnum\faauto\adjustright\rin0\lin0\rtlgutter\itap0 
+\scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon16 \snext33 \styrsid9137866 TitlePageFooter;}{\s34\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext34 \styrsid9137866 Contents;}{\s35\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 
+\sbasedon0 \snext35 \ssemihidden \styrsid9137866 annotation text;}{\s36\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f2\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext36 \styrsid9137866 
+Plain Text;}}{\*\listtable{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360
+\jclisttab\tx360\lin360 }{\listname ;}\listid454177525}{\list\listtemplateid-337600416{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow1\levelstartat1\levelspace0\levelindent0{\leveltext\'0cAppendix \'00 -;}{\levelnumbers\'0a;}\s22
+\fi0\li0\lin0 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00.\'01;}{\levelnumbers\'01\'03;}\s23\fi-576\li576\jclisttab\tx576\lin576 }{\listlevel\levelnfc0\levelnfcn0\leveljc0
+\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers\'01\'03\'05;}\s24\fi-720\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
+\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\s25\fi-864\li864\jclisttab\tx864\lin864 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\s21\fi-1008\li1008\jclisttab\tx1008\lin1008 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\fi-1152\li1152\jclisttab\tx1152\lin1152 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fi-1296\li1296\jclisttab\tx1296\lin1296 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fi-1440\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fi-1584\li1584\jclisttab\tx1584\lin1584 }{\listname ;}\listid519200626}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid747923164}{\list\listtemplateid-222908186{\listlevel\levelnfc0\levelnfcn0
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\s1\fi-432\li432\jclisttab\tx432\lin432 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
+\levelindent0{\leveltext\'03\'00.\'01;}{\levelnumbers\'01\'03;}\s2\fi-576\li576\jclisttab\tx576\lin576 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers
+\'01\'03\'05;}\s3\fi-720\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\s4\fi-864\li864
+\jclisttab\tx864\lin864 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\s5\fi-1008\li1008\jclisttab\tx1008\lin1008 }
+{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\s6\fi-1152\li1152\jclisttab\tx1152\lin1152 }{\listlevel\levelnfc0
+\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\s7\fi-1296\li1296\jclisttab\tx1296\lin1296 }{\listlevel\levelnfc0\levelnfcn0
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\s8\fi-1440\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc0\levelnfcn0
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\s9\fi-1584\li1584\jclisttab\tx1584\lin1584 }{\listname 
+;}\listid966157641}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 
+}{\listname ;}\listid1228417757}{\list\listtemplateid134807567\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360\lin360 
+}{\listname ;}\listid1344164713}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360
+\jclisttab\tx360\lin360 }{\listname ;}\listid1364332647}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 
+\fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid1723749062}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid1742016794}{\list\listtemplateid134807577\listsimple{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid1824543119}}{\*\listoverridetable{\listoverride\listid519200626\listoverridecount0\ls1}{\listoverride\listid966157641\listoverridecount0\ls2}
+{\listoverride\listid1344164713\listoverridecount0\ls3}{\listoverride\listid1742016794\listoverridecount0\ls4}{\listoverride\listid1364332647\listoverridecount0\ls5}{\listoverride\listid1723749062\listoverridecount0\ls6}{\listoverride\listid747923164
+\listoverridecount0\ls7}{\listoverride\listid1228417757\listoverridecount0\ls8}{\listoverride\listid454177525\listoverridecount0\ls9}{\listoverride\listid1824543119\listoverridecount0\ls10}}{\*\rsidtbl \rsid92463\rsid345375\rsid2387180\rsid2834888
+\rsid3758756\rsid4275779\rsid4877207\rsid5768380\rsid7369248\rsid9136396\rsid9137866\rsid9578679\rsid12072926\rsid13115725\rsid13317474\rsid14703997\rsid14837579\rsid16201558}{\*\generator Microsoft Word 10.0.4219;}{\info
+{\title <Unit/Component/Component Integration Name> Test Specification}{\author Nancy}{\operator Nancy}{\creatim\yr2004\mo6\dy8\hr18}{\revtim\yr2004\mo6\dy8\hr18}{\version2}{\edmins0}{\nofpages8}{\nofwords1574}{\nofchars8973}{\*\company Symbian Ltd.}
+{\nofcharsws10526}{\vern16469}}\paperw11906\paperh16838\margl1224\margr1224\margt720 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1224\dgvorigin720\dghshow1
+\dgvshow1\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot2834888 \fet0
+\sectd \psz9\pgnrestart\linex0\endnhere\titlepg\sectdefaultcl\sectrsid9137866\sftnbj {\header \pard\plain \s15\ql \li0\ri0\widctlpar\tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid2387180 
+{\shp{\*\shpinst\shpleft8136\shptop0\shpright9432\shpbottom358\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr1\shpwrk0\shpfblwtxt0\shpz0\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn hspNext}{\sv 1025}}{\sp{\sn pib}{\sv {\pict\picscalex10\picscaley10\piccropl0\piccropr0\piccropt0\piccropb0\picw23816\pich6588\picwgoal13502\pichgoal3735\pngblip\bliptag-1424617728{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}
+89504e470d0a1a0a0000000d4948445200000384000000f9080300000048c40b8b0000000467414d410000b1889598f4a600000300504c5445ffffffffffccff
+ff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff66
+00ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99
+cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc
+00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999
+669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff
+66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc66669966666666
+66336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cc
+cc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc333399333366333333
+3333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc00
+99990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc0000990000660000330000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199e9ab4000000
+097048597300000ec300000ec401882e3ea30000194449444154789ced9dbb951b391045296b579e360759ea60e43117994c44964c06a20c269d9de67048361b
+40bdfaa13f7cd7d2391a0255001e50f8347038905761389ddf4e4b1b41c8ab727c17e0c879310bbefc33f265b1fc09598ee153800b8af0df6fff7df2f5df654c
+206419de05f836650123be7cfd6fc2b7af0b1841c8020c0f03e092227c92e04586fff4378390ae4c22d06545f8e5db5c836350dadb0e42fad110e0c8d0d79a2f
+4509528564b79423d0054558d5205548f68924c0ee226c68f0bfffb84a4a760822c2aebbf5e5f9e027dc3324fb438c453b8bb0b02efac8b78ea610d287e73dc1
+a545d8d6200352b2438eeb12a130107228243b64589708250d725648760820c27e8747ff9545c86d0ab23b8095997e2214a351c6a36487ac4a84edfd890fba19
+43482780e5d17e220434c84921d91d9b1321bfa6207b8322246461808d428a90904c808d428a90904c3627c26ec610d2895589905b14e41559950881cd7a9e98
+21fb634d22fc4716213fa320fb634d2204e251eed593fdb12a118af128a351b243562542717d940321d921eb12a1f031130742b247d625c2f6ac90df31915db2
+321136035206a36497ac4d848d8b47b93d41f6c9da445857213548768afc697def070acb0fc27c632c4af6cafa4458dc2ee4ba28d92f6b14e1ec91d0af1c06c9
+8e59a508dff9f7eb352afdc6d7b2c9ce59ab082ffcc34f78c90bb06a1112f20a5084842c0c4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842c0c
+4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842cccaa45380ccbe54d482fd62bc2e1f7df777efd5828fb7d310ca777ce1f8cff3cb2835b0f5611
+0e0fa418f6ebef959f29c9f765382e97f5bbf6aa557b7e17636c6ea1a979108bfcbde11ec7eec8d5803f1339ba52d18bf03dd7d98fc22bf3aec1f7c13036e52b
+1fa577be7329ca8c9c2ee585a9f05aa7be2a7dca59ae60bfdf17b3cfef999d22ccf6d32ef2420b7e2f0365169132508af0786a55665c1b7ed060f85838165fdd
+edd8fe64389e0ba55831ead9105f79b6aaaae4b5258f4fed951bcb320ca766910fd58ee98c577cab6c0d25a911e120566b940e7ffe9d10372fac57c1534146f8
+31d155a36a1a46d9b4815455a1f260a78799f86ed8cb0daa18c9b0893ae6652755ff19296eb977d3d61a2ec223544a981f12530dfefd1d90e4730d25fb313c17
+576d8c10bb0543bf065655c9e956660dedddad551bfb9938625f33f5792cf19c05502c62b563bdb8ae1c5011220e980c28f1eb498401d34270089cfa61edd68b
+73b16262d8a44d678759821f4ed7a752c8cfcdf1e81149bd5a10e5ea9dfc39da829ba5ade8c6152a902d3b29331ff18d223f9e35f8f7af2bbdf9b084a26cfecd
+bce69582c78c0a3b34bd65855ae703a56cedb8a0dea8ec7135c27928f2904104ea28eed6c22a8044a8af5843ebbdf37b2e42cf50e81a19748e3497239ffe5637
+6d03fb55cb5cb0945bd16ba80d5a27b19059059b5a257e17adb2588aeeeb55800e868808751d80d280398581d03e14fa5b25ea8838dc4e9ba7d62ea83730d554
+39bb8298fcd336a7e54f45204f31ae3fd0cba7e0bda521815db86c9e6a39436fc09cd98cd03e14faa6471a47807a7e6c9e16c3e431266618bc529061c402a6c3
+f4b3fa274773b13cf725d6281f1201b03063cbfdcd1a997c2f69d0341486481075444ee561afc7669830c804cc06850c13e35143cac0c07c7120a2b0ed2106a2
+4273e208a6d0a43810ea77ec836647b02340769f7f6aaed1f60abd35d516d3769f178f9ad646a1957dc866c90f4f5b0254e8481dc0b260fda72c425d3c1a2ac1
+37a46501cde8a33a3c0356c38c140d3e67685fc21440aa6be63ce0b2a7584e2aebaa00e5e1493ec6822786b206fffefdae48233c30035408a6e1134b35d6cbd1
+e07337eedbcc73155ec977601e8e245cfd319c0d948ccf7b0f6a1556a251453c9a20c137a028e5fa366df63c5169e1491a9c2d4f203f324c0a21f32d45eee3e2
+89bf39890512616b13ad0a6b1a44cfae4507a237a4a2941b9271b36742b938933438977c523c6a8a461df33d9421260fc9fd802c047475528d46c17834b17314
+c22cb9b6ce11c69546e4acc638cfcb38644920a9963a419f7b32e798a295a2a8883c9c264ca846a3503c9a35225c907a93ccbc1f28f40529f17731ab9c78144a
+b5f4c32cc76f04f5e92b68399a4aa9ac8d8e88eba33993c13b426f92de226a56648dfe257f1127d59b14c668347f521885a0802e36e0eb65959dfa0f02aa32d3
+8f5e2de2d98ab4e1bfe46e4a3c8a28db7e9a750508dd52171bf069e1cf9608052de78ba05d96bd5ac473b79a954fd1db8c781449b3f20185d3c56eb40ba08f0d
+7080d29812caf168be1fcdec7bb508fd114a1be53e2f211e3547a3dde6e16edadd522723d080b4a5417193227f286ab7aef4ecaf4cbf55cdcaa5e22b52c8ca4d
+0a7334da6d1eee66150d07ac96e2574cf0a430bf4ada6ef46a11936eb5f34088895e7568c61e8d6e4784ed86d3cb0a2c42694e09c549618780b06941af16f158
+96bd0742cc4bd5a410195b6b096e6579b43d91e96605d43936a784c026457a9d34fb926e2dc291e7e57ed5f19a55e90fabf5151e8f22aa5ebcc8bd349b7f372b
+a0a1b0b14b884c0a173e0adbad453cd4a8e6674f173996aeafbd5177d4bcb3ee48afda783623c2666cd0cf0c64286c6b10f8b2377d6da679256076e6732314fe
+961b72ed8a88869fc1f1a8271addce1e45730c5a8919d7229544281f1fcd9e97b55a57b71661f8d2ad51faa5cb715a233ea21ac52605e2c2f245ee255a841fcf
+fac8b38a67e4a150981222c74735b5f2f90a85c68955f46827758ec2c834d3a17bc0172b4ae342bdd00d223cdf5ea432df84f999cad08ce8a77fef2c8269de0f
+d5a3bc024aee1d4511029fd743363d3d38a1b89b3bb230cddc8c40a351602a30f904ccbf15833feb002456ef42b4227c7ea7c176dc7872413296445cbb995dc0
+a5fb784fac90c285a36a11ca1e951f9a003d4910e1d59e01bf24fc660468343843bba7d69650683c0ab8d02a73ac003e8d8af802657e0b1d540bad3270e57e08
+be1e5fd2e0df3f520a07a989386f796f17a6a15b9db60bb4347519e213b46b7c16f0d116bc49e1b41f2a806b32e5ae4591c25b45049e4d169d09b5a2c00743a9
+6284f33223420a4291b42f26c75468cb19b6074be2f3afb16c34e7572e32947e805439982932aab692c24ae0ad717bac6641bdd28090245a8500e75f6fbfb80a
+858a11cecb8c40f7f0567217df77715f63a4136139b2807eaafa63e549cee12cfec0378f9be08c462356a6d0247ca788029c8879aa46888bc47519f0b6a7a23d
+c8134bde150795082bcd42f3c11ed689273cd50de40a4adf6b3f540231079d1a1a505c3a6b77422851b8f1b593014488dd3e3acf187be5cc1b1b85cc8f15e588
+359f8437c05d7b7b8f2063b9ffc457bb1b02e3d19690e14b671d4e88bd1ae686541ae2e2282ac2e736023f3408b8101212b4020b4503d74d2003098b47bdd128
+3426bb6fe81a69260224e115a11c59a093db763c2a6b10bdf770d23a156f7d02adbae5022a42f775f6b8b96f2922f4ae69de003cf07e0f2bb75ec019ff7ab153
+8448748f0662cd44001182efc23cf44caac7a100150588d07fedcff52fb1524f0847a3e25164106aa710e1beee41ad04338052887c18af791c2a4e84f746a25b
+9500dc708b50ec15f0a53624bb1c117a67cf579c9ddea19308e56148aeb30e224487c256914222fc811873eb62b597efa1af6d55303cb257205a84f6e75a1bc4
+e4eb8e4643442856db56441870ea0b581cc5360a3fed313c532a7be01461e8236bf21f8e989e490a3052ced71f8d52848fa027691b494022849f85399b4600d9
+01a708636234d8da0b091b8531f1a833fa1f09b0623f2244e3d146629008e1670a07d3544876604d220c590e3302642b8adf1f8d52843a4f3e68b461609bd0fa
+763d8c6fa12c4684c8db97a8b51f6404a401a137103d05ec50bf9208fde70e2011821b8556d62042a06dc2d65e31cc8e25bc8796b12492f7063ed88f08c14961
+c31f448314e1053c3fc46c1b40a6422c19515c0149c89dc1664488ae12d4138044887c51e860b722143ee332d0638f2fe2b48b5ce262816f4784de9599e6834c
+773063ac6c4b84cabbe514e7f700dcf1289080dc71c869bc9408bd67b6a0bd7a8af002fe9753cec59b3d8c00f935730b29ad88345e4f84d5460c8a107a34dbcc
+b64468ba2baf7cc58e016f3c0ad82a1b2127f252220463a3aa43a008334e42ded998088d57f69deb37ed28002adc797d2960a59cc84b89d0bb3c0aedd5538417
+1419d6081022908befbbc9101b28c202b5df7715e1300ca7ebcb28f7f283ee015e95089d17503fdfc2a90470d775b50bb2ad22a7421116a8fd1e14217c78b462
+e5f1045fef596455220cb86ed82144d7667b4c344a11ea936a25078ad07e6e0dbfb3bcc5ba4418f32a9175ad0648da5356312650848ae472451822c091758930
+ec152ad380e88947033e671f912da00815c94147474d22f43cfc31635d228c7c854aaf43473ceabc1ae94644322f28c25ab5648950f96c8dd5fc91054418eb9c
+f66c1b90a2b9a8b04f3f640b28c2025d45a87bb1c663fec802228c7e094a2743bbc341d12845a84f6ac42942cd6714f1125c9f08c35dd4c8d01c8f4645a314a1
+3ea9917e224c79d07c6d224c781451f1f5219058f177b27ac3aed1a7080bf41261d2f3f5ab1361869f91af0b163d961b2d381e1bf39fb027113a1f0efe132a42
+db13ac00ab1361e402e90d7430346eb98745a314a1da90a64798064111260d836f6b14a1f3ec9addd01139a15281c9d5838ec5118e508437224598321bfc607d
+224cea71c2eef732fd0a5d1d8af08322bc1128c2ac50746485225c5285b67854fe119237961245a8f0284c8469d3c10b6b14e1922a94939997585c344a11aa0d
+697a1425c29c29d28d558a304985b2adb6a32f71d12845a836a4e9519408312bccac538439c33fb2576779a456fe0990319a1445a8f0284884a9b1e8db6a4598
+b31815f359edf3b016188d5284faa4466a051c23c2c475d1b6f960e679224c094981b0501f8fcabf883cb2431116481561defea064fec8b2224c392a2b9b8b3f
+9df149c0a39c37e4cc29c20299224c5e9469993fb2b00833668640602827321d4f65ff1477f6cb9953840532cf8e664f081be68f2c2ec2f77129ba08648365af
+a765260f9d8a8f8b231ca0086f0488303f185dbd08c365288f4ada7834321aa508f549b5920b1061878170fd228c9e1bca16cb691c557faef9ae38c27e8af086
+ffcb7acb40783e9f4ea7e370c5f962de4a447808bdd3431e0a75f1a8ec9e5c447764fb294245727e11ea06c2d2a30c40fbdf86080f81f7cbc93989493cb662b1
+90544f29cae65384056a3f778b503310569e27da93082f490dceab8e4782df2713ed51dd72a3caba564a521214212c42bcb5553f59dd9b08af09fa06c58878f4
+4158b1cec9e6bf94083b3d08531521bc47d8f86a7c3773c242aaf64131c0e27ba98945ac7bd85bb69e225438e415211a8d3a55b455115ed3b60851b6594e142f
+23ddd5a711d6bf9e08ab8dd8fb2a13d8ba9a1dedee4538a25e399565a1380d2a5693ce19d9fa9712213812556bd42b422cfb76b0f312223c6837f4e5005136f9
+56edfecc26c8d6bf9408c1feb59ada4f9f08c13ec0edc32e44a83b650a9c601153fb2c36d139c591b511d97a8a704ebd287c22c4b21722abd711a16a47474e4c
+f61ccc5573646d44369e229c532f0a4c84f66278934bf39544a8180c236cbe3a2e1591321aa508b576b4fd718a10ca5daae2971221beb30a188dc6a3d2df29a3
+518a509dd25bb30d7710a1e4ca8b8910552160b4e8fab521637f851361fccb89b03129833458fb8802db20917c78351182db4a2146437fa67c1f9122547af241
+23059708a16506b1305f4d84e0441e690162331c90fcd40e4418bf1f11628b6d2d77a0c3a3b50333506b1267fd2f2742aceb445a00f67184f057da65198a700a
+d6a7b64a9922fca0a708b15921d202b0962c64a78e462942a51923ad52868eccb84428d6f1eb89102a37a80540e7d1c2fd8a307e711102dac14428a733d24a01
+1261cd98981efdf54408cd22a016203a3f88aee9a3518af011ff94103bb7962b4220959d89109a14c6a474125b893e1add870863da4dc8a93168b7de5e0a8827
+402a2d17167a24544ed29519aa79a9f0ce5201a937090f3b11a1e53d0f5b6188497ddf8408f37b34a50807f86d6b6366a808c5a62495af211add8708835e0f0f
+8846a18dc2ea85879008c570678b221c33b5345f38337484023e907097cd0cd9fa0d8830c48b88b5d103b447e113a1d85681545a3f5f428403e89add64386da9
+f48e6dcf2cd1e84e44e8fc39e806941220c2eae516211f516c5184b73c0dab1a98c970ca5238746aff81c901d9fa2d8830e4b1386c5946f205d8a3f8e9b340f2
+432ecba60f0b88f0e18fcf96562ce7a50813a584dae5639ad94658bfbc089db7fca1698c488d04d8a3a8ba127308522e4bef1535d1229c64a99721546cb1a9d5
+3045a33b112112824946805fc48885218bb0fadb900feb01479a29f417e1ec6fc3af68d124e97a99ce164ecbe96e4284fe331311f79c5d708810ab7f7f6fd2fc
+797f1116723c29c2ba98c37e773c770ce3b93c22a7bb091162cdb7a1203408113d9145587f9229666908beafc85c12c1222cfe2f1c95621b4b60627882458ccb
+bb72c29b1021baaa524905bea90428657179b4f11a0c6644bb381537f715e92ec26a86d070884926f87d961ab6687437224423f9a20cf1be0f6816e2f2687571
+34e4a606f7a1cdee226cfc49e5c91b9db5232a75d8976634b93c2027bc0d11e291fcf9a983d55caa8e74a8e2f268c313b0fa1be5e95f27ee2d4221bfe7ea9ae6
+82569d6cb0cef632d6c30672ca1b11a1a6e4ce9f4f6a1e95ef8b20f1d10f49848ddfba9fa24012f007f6a12294ffb0f408236aea074a75589766acc75f23525e
+85087b3c338dd5a5a0c1d653d9704f5209af22ce6f7516213af8cf84a8798d42b6779a349ef2c446653637e4a4b72242d7fe0e0656a4c2ca4c635d46b1265052
+21169c49e677162162f28df159f0d3f13d7ed10530ea30d1d6a19b4fa0cb496f4584bea30e08e0ec5e589969accb687c98d5f8e0bf200735215084e99576cb49
+836d28347f8c1591f44a44981d90a2d186b032f3bdf55b45ed4f37d24009024ef4152166b58f946fdde798a3d15d89303920853bbaa606ffb47fab31e873015f
+f3927448401127c21e03a1451c16bb8c9b84877d8930b74af1326e4e0a9b5342bd0be773f4eca8ab0835b65b49fab021261f30b30d8930332055ccba9b93c2e6
+94307b34479ce829c21e0361de278a53ecd1e8ce4498d7b36a8ab839296c4e090fb9ed1272a2a708fd2e89e46da03f618f46f726c2b48144156bd8a784b94361
+d495735122741c9546318f4feaced09ad1617722ccaa575d37d788478529e1217328c48ab0a3083b9cafc89ca84db05f53b53f11e6a85059c28d7834a034ad80
+25d84f841d0642c73d8acaced0118dee4f841955abede51a978f02bf4e1a0ad102ec27c2fc81d075a5b02eabdc9cb626c27815ea238dea26851c8d4285a107bf
+5bb79f08d3d7465d1ad4b5234f34ba471146077486f2adc6a3c206458afd238af589fd6c51f834a8eb0c93c7dced8930762c31f571150d8a6ba31f84ab50e3c3
+5ece8e7aeed5877db865e6ca484e7f8b220cac5b5b9c51591f85a2d14378441dfd5d79cf8f7aadb8e243b569bedce4f43729c2b0666c5cf4aa5c7c28edd4879b
+3fa21c12fa5ff4744c98047b162bef041ec96d1191fe1a4518d4c39a0bf78f67203c44aa50db1c97b8063f5a86fe5014f6e2233f5f3672065b15217e0149dd6e
+7b5d16976634c905a9501f272df43e6164541a330c82851190a19cc16645e86ec8ae40bf3014b62eb69813b13a63e945167ba9376a388c980d6a4ae3cdbd0e1b
+91c16a45e88a499d214d6128d426e81d1c6c1e2cf85cb6e6e2bb1a9abbbb11108bbcb29773d8b408cdfdab7f56311b0a7503e1c57693e94e0f967db35e737d53
+8168091edcaf8f23c8396c5c84a6e946c4c47eb6400a2f8d3e606e92f6d6b8ac080f0e1d9a9e559391cdf1e620bbb679111e94f5dabc6e56c1d35ea16269f401
+d38285ab352e2ec283292e8daa35832fee49e8201291481f339a80f7b044d6e5e404a93e18fd44d920e5abe3dbc85501a5ef4e4571714ea6020ff2ac206700de
+2b43fbbecaf329b6387f8468f0a019c86b77556f1464448caeb539920dc9d9ef916118ef8ebddf8ff4fecfcbb5f80959fd88d1e088dc1cab97c56f9df132b992
+f369d5f69cbf50f0a15b22249edf9ef9e033b5d6385e4cbd4ffd3d3246b0e3dddbef444c4f70a43064ff45bf757efcfafdfb97655db4cabd2d9e3edeb5894c9c
+cc912290a5ed2364ef48cb328c460949469a8b3312212417692064344a4832d240c84d424272118fef2e6d20217b471a08b92c43482ee251252ecb10928ba441
+2ecb10928b38107259869054e4efb196b690909d237ec2c165194252913f20e3b20c2199c837fc705986904c800b3ab82c434826c037fd4b9b48c8aee970d321
+21a40172abcfd23612b267100d727f82903ca0dbed96369290fd823de7c58190902cc0174096369390bd82be6ac98190901ce0bbce973694905da2787d870321
+21f1681ec0e2611942c2d13d26cbc33284c4a27d9794c1282191185e06e6778484443198dee666304a4814e0befc135c9521240e930897369a903d6109463921
+242412bd06b9324a4828ea592135484830aa3d7a2eca10128f6e28a406098947331452838424a0180a391f2424057828a40609c901b86afb020fab1192053414
+9eb9474f481ac850c85094904cc4a190c32021b90843e199b34142b2699ee366244a483ef5a1f04c0912d285ca50c84094905e1487c213976308e9c76c283c711024a42f5420210b73ba0b905128218bf0f6763e5380e4b5f81f6eb9428cd866468c0000000049454e44ae426082}
+}}{\sp{\sn pictureId}{\sv 65536}}{\sp{\sn pictureActive}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 0}}{\shptxt \pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052\insrsid2387180 {\object\objemb
+\objw13502\objh3735\objscalex9\objscaley9{\*\objclass PBrush}{\*\objdata 010500000200000007000000504272757368000000000000000000203f0000
+424d043f000000000000360400002800000084030000f90000000100080001000000ce3a0000c40e0000c40e00000000000000000000ffffff00ccffff0099ffff0066ffff0033ffff0000ffff00ffccff00ccccff0099ccff0066ccff0033ccff0000ccff00ff99ff00cc99ff009999ff006699ff003399ff000099ff00
+ff66ff00cc66ff009966ff006666ff003366ff000066ff00ff33ff00cc33ff009933ff006633ff003333ff000033ff00ff00ff00cc00ff009900ff006600ff003300ff000000ff00ffffcc00ccffcc0099ffcc0066ffcc0033ffcc0000ffcc00ffcccc00cccccc0099cccc0066cccc0033cccc0000cccc00ff99cc00cc99
+cc009999cc006699cc003399cc000099cc00ff66cc00cc66cc009966cc006666cc003366cc000066cc00ff33cc00cc33cc009933cc006633cc003333cc000033cc00ff00cc00cc00cc009900cc006600cc003300cc000000cc00ffff9900ccff990099ff990066ff990033ff990000ff9900ffcc9900cccc990099cc9900
+66cc990033cc990000cc9900ff999900cc99990099999900669999003399990000999900ff669900cc66990099669900666699003366990000669900ff339900cc33990099339900663399003333990000339900ff009900cc00990099009900660099003300990000009900ffff6600ccff660099ff660066ff660033ff
+660000ff6600ffcc6600cccc660099cc660066cc660033cc660000cc6600ff996600cc99660099996600669966003399660000996600ff666600cc66660099666600666666003366660000666600ff336600cc33660099336600663366003333660000336600ff006600cc00660099006600660066003300660000006600
+ffff3300ccff330099ff330066ff330033ff330000ff3300ffcc3300cccc330099cc330066cc330033cc330000cc3300ff993300cc99330099993300669933003399330000993300ff663300cc66330099663300666633003366330000663300ff333300cc33330099333300663333003333330000333300ff003300cc00
+330099003300660033003300330000003300ffff0000ccff000099ff000066ff000033ff000000ff0000ffcc0000cccc000099cc000066cc000033cc000000cc0000ff990000cc99000099990000669900003399000000990000ff660000cc66000099660000666600003366000000660000ff330000cc33000099330000
+663300003333000000330000ff000000cc00000099000000660000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0002d702ac000381562b00ff00ff00f10000008d00018108d7000381562b00ff00ff00ed0000008d000dd701810156ff00ff00ea000000
+8c00018110d701810156ff00ff00e70000008b00012b14d70181012bff00ff00e40000008b00018116d701ac0156ff00ff00e20000008a00012b19d701ac0181ff00ff00e00000008a0001811cd70181ff00ff00de0000008900012b1ed701ac0156ff00ff00dc000000890001ac20d701ac012bff00ff00da0000008800
+012b23d70181ff00ff00d9000000880001ac24d701ac012bff00ff00d70000008700012b27d70156ff00ff00d6000000870001ac28d70181ff00ff00d5000000860001562ad70181ff00ff00d4000000860001ac2bd701acff00ff00d3000000850001562dd701acff00ff00d2000000850001ac2ed701acff00ff00d100
+00008400015630d70181ff00ff00d0000000840032d70181ff00ff00cf0000008300018133d7012bff00ff00ce000000830035d7ff00ff00ce0000008200015635d701acff00ff00cd000000830000032b56810033d70156ff00ff00cc00000087000156018131d7012bff00ff00cb0000008a00015601812ed70181ff00
+ff00cb0000008d00015601ac2cd70156ff00ff00ca0000008f00012b01812ad701acff00ff00ca0000009100012b018129d70181ff00ff00c90000009400018128d7ff00ff00c90000009500012b01ac26d70181ff00ff00c80000009700015626d7ff00ff00c80000009800012b01ac24d70181ff00ff00c70000009a00
+018124d7ff00ff00c70000009b00018123d70181ff00ff00c60000009c00018123d7ff00ff00c60000009d0001ac22d70156ff00ff00c50000009e0001ac21d701acff00ff00c50000009e00012b22d70156ff00ff00c40000009f00015621d701acff00ff00c4000000a000018121d7012bff00ff00c3000000a10001ac
+20d70181ff00ff00c3000000a100012b21d7ff00ff00c3000000a200018120d70156ff00ff00c2000000a30020d701acff00ff00c2000000a300018120d7012bff00ff00c1000000a40001ac1fd70181ff00ff00c1000000a400015620d7ff00ff00c1000000a50001ac1fd70156ff00ff00c0000000a50001561fd701ac
+ff00ff00c0000000a60001ac1fd7012bff00ff00bf000000a60001561fd70181ff00ff00bf000000a7001fd701acff00ff00bf0000002e00042b01560681042b6a0001811fd7012bff00a200012a0179029e017901244c00032b015609810156032bb8000000270000032b56810002ac13d702ac02810156012b6200012b
+1fd70181ff00a100019e06c80179450000032b56810002ac14d701ac0281012bb2000000220000032b81ac0021d70003ac8156005f0001ac1fd7ff003400022b038103ac08d704ac02810156012b5300012a09c8019e400000032b81ac001fd70004ac81562bad0000001e0000035681ac0029d70003ac812b005b000156
+1fd70156ff002e00012b028101ac1bd70003ac8156004d00012a0bc8019e3c000156018128d7000381562b00a90000001a0000032b81ac0030d70003ac812b005800012b1fd701814000222b2300212b2100222b400000035681ac0024d70003ac812b004900019e0cc8019e3900018101ac2dd70003ac562b003d00232b
+2400222b000017000156018137d701ac01565500018121d7400022d7012b2100012b20d701ac210001ac21d7012b3c00015601812bd70003ac812b00450001790ec801793500012b018133d701ac01563b00018122d7012b2200012b22d700001400015601813dd70181012b510001ac22d701563f0022d7012b2100012b
+20d701ac210001ac21d7012b3900012b018131d701ac012b4200012b10c801243300018138d70181012b3800018122d7012b2200012b22d70000110000032b81ac0041d70181012b4e0001ac23d701813f0022d7012b2100012b20d701ac210001ac21d7012b3700015601ac35d701ac012b400001a410c8019e31000156
+3cd701ac012b3600018122d7012b2200012b22d700000f00015601ac46d701814c00018125d7012b3e0022d7012b2100012b20d701ac210001ac21d7012b350001813ad701ac012b3d00014f12c8012b2f0001813fd701ac012b3400018122d7012b2200012b22d700000c00012b01814bd701564900018126d701563e00
+22d7012b2100012b20d701ac210001ac21d7012b330001563ed701813c0001a412c8019e2d00012b43d701ac012b3200018122d7012b2200012b22d700000a00015601ac4ed701ac012b4600012b27d701ac3e0022d7012b2100012b20d701ac210001ac21d7012b3100012b01ac40d701ac012b3900014f14c8012b2b00
+015646d701813100018122d7012b2200012b22d700000800015601ac52d70156450001ac28d7012b3d0022d7012b2100012b20d701ac210001ac21d7012b3000018144d7012b380001a414c801792a00015649d701562f00018122d7012b2200012b22d700000600018156d701814300018129d701813d0022d7012b2100
+012b20d701ac210001ac21d7012b2e00015647d701563600012b16c80124280001564bd701ac012b2d00018122d7012b2200012b22d700000400018159d701ac012b4000012b2ad701ac3d0022d7012b2100012b20d701ac210001ac21d7012b2d00018149d701813500017916c80179270001564ed701562c00018122d7
+012b2200012b22d70000020001815dd7012b3f0001ac2bd7012b3c0022d7012b2100012b20d701ac210001ac21d7012b2c0001ac4bd70181340017c801a42600012b50d701812b00018122d7012b2200012b22d70000018160d7012b3d0001562cd701813c0022d7012b2100012b20d701ac210001ac21d7012b2a00012b
+4ed701813200014f18c8014f2400012b52d701ac2a00018122d7012b2200012b22d7000001ac61d7012b3c002ed73c0022d7012b2100012b20d701ac210001ac21d7012b2900015650d701813100019e18c80179240001ac53d701ac012b2800018122d7012b2200012b22d70000015662d7012b3a0001812ed701563b00
+22d7012b2100012b20d701ac210001ac21d7012b2800015652d701812f0001241ac82300018156d7012b2700018122d7012b2200012b22d70000010001ac62d7012b39002fd701813b0022d7012b2100012b20d701ac210001ac21d7012b2700015654d701812e00014f1ac8012b2100012b58d7012b2600018122d7012b
+2200012b22d700000100015662d701ac3800018130d73b0022d7012b2100012b20d701ac210001ac21d7012b2600015656d701562d0001791ac801792100018159d7012b2500018122d7012b2200012b22d70000020063d70181370031d701563a0022d7012b2100012b20d701ac210001ac21d7012b2500012b58d7012b
+2c001bc801a42000012b5bd7012b2400018122d7012b2200012b22d700000200018163d701563500018131d701ac3a0022d7012b2100012b20d701ac210001ac21d7012b250059d701ac2b00014f1cc801241f0001815bd701ac2400018122d7012b2200012b22d70000030064d7012b340033d7012b390022d7012b2100
+012b20d701ac210001ac21d7012b240001ac5ad701812a0001791cc8014f1e00012b5dd701812300018122d7012b2200012b22d700000300018163d701ac3300018133d70156390022d7012b2100012b20d701ac210001ac21d7012b230001815cd701562900019e1cc801791e0001812fd703ac2cd701812200018122d7
+012b2200012b22d70000040064d70156320034d701ac390022d7012b2100012b20d701ac210001ac21d7012b2200012b5ed7012b28001dc801a41e002cd70003ac562b00050000042b5681ac28d7012b2100018122d7012b2200012b22d700000400018164d73100015635d7012b380022d7012b2100012b20d701ac2100
+01ac21d7012b220001ac5ed701ac2700014f1ec801241c0001562ad701ac01560c00012b018126d701ac2100018122d7012b2200012b22d7000005002dd701ac04810256038101ac2cd70181300001ac35d70181380022d7012b2100012b20d701ac210001ac21d7012b2100018160d70156260001791ec8014f1c000181
+29d701811000012b018125d701812000018122d7012b2200012b22d700000500018126d70004ac81562b0e00015601812ad72f00015636d701ac380022d7012b2100012b20d701ac210001ac21d7012b2000012b62d72600019e1ec801791c0029d701561300012b01ac24d72000018122d7012b2200012b22d700000600
+22d70004ac81562b1500018128d701812e0001ac37d7012b370022d7012b2100012b20d701ac210001ac21d7012b200001ac62d7018125001fc8019e1b00012b28d701561600018123d701811f00018122d7012b2200012b22d70000060001811ed70003ac812b001a00012b01ac27d72d00012b38d70181370022d7012b
+2100012b20d701ac210001ac21d7012b1f00012b2bd701ac02810156052b0156028101ac2cd7012b2300012a20c81b00015627d701811800015623d7012b1e00018122d7012b2200012b22d7000007001bd70003ac562b001f00018126d701562c00018139d7370022d7012b2100012b20d701ac210001ac21d7012b1f00
+01ac28d70003ac812b000d0000032b81ac0029d701812300014f20c8012b1a00018126d701ac1a00012b22d701811e00018122d7012b2200012b22d700000700018118d70181012b2300015625d701812c003ad70156360022d7012b2100012b20d701ac210001ac21d7012b1e00012b27d701ac012b1300015629d7012b
+2200017920c8014f1a0001ac26d7012b1b00012b22d71e00018122d7012b2200012b22d70000080015d701ac01562700015625d72b0001563ad70181360022d7012b2100012b20d701ac210001ac21d7012b1e00018125d701ac012b1600012b01ac27d701812200019e20c801791a0026d701ac1d00012b21d701561d00
+018122d7012b2200012b22d700000800018112d70181012b2a00018124d701562a0001ac3bd7360022d7012b2100012b20d701ac210001ac21d7012b1d00012b25d701811a00018127d7220021c8019e1900012b26d7012b1e0001ac20d701811d00018122d7012b2200012b22d700000800012b10d701812e0024d70181
+2900012b3cd70156350022d7012b2100012b20d701ac210001ac21d7012b1d00015624d7012b1c0001ac26d70181210022c81900012b25d701ac1f0001ac21d71d00018122d7012b2200012b22d70000090001810cd701ac01563000018124d7290001813cd701ac350022d7012b2100012b20d701ac210001ac21d7012b
+1d0001ac22d701ac1f0001ac26d72000012b22c81900018125d701561f0001ac21d701561c00018122d7012b2200012b22d700000900012b0ad701ac0156330024d7012b280020d701811dd7012b340022d7012b2100012b20d701ac210001ac21d7012b1c00012b22d701812000012b26d701561f00014f22c8012b1800
+018125d7012b1f0001ac21d701811c00018122d7012b2200012b22d700000a00018108d701563500018123d70156270001561fd7018101561dd70156340022d7012b2100012b20d701ac210001ac21d7012b1c00015621d701812200018125d701ac1f00017922c8014f1800018125d7200001ac21d701ac1c00018122d7
+012b2200012b22d700000a00012b06d701813700018123d70181270001ac1fd70156012b1dd701ac340022d7012b2100012b20d701ac210001ac21d7012b1c0001ac21d7012b2200012b26d7012b1e00019e22c80179180001ac24d701ac200001ac22d71c00018122d7012b2200012b22d700000b00018103d701813900
+012b23d701ac2600012b20d7012b01001ed7012b330022d7012b2100012b20d701ac210001ac21d7012b1c0022d7012b230001ac25d701561e00019e22c8019e180001ac24d70181200001ac22d71c00018122d7012b2200012b22d700000b0000042bd7ac2b3a00012b24d72600015620d7020001ac1dd70181330022d7
+012b2100012b20d701ac210001ac21d7012b1b00012b22d7012b2300015625d701ac1e0023c8019e180001ac24d70156200001ac22d7012b1b00018122d7012b2200012b22d700000c00012b3c00012b24d7260001ac1fd701ac020001811dd701ac330022d7012b2100012b20d701ac210001ac21d7012b1b00015622d7
+012b240026d7012b1c00012424c8180001ac24d7012b200001ac22d7012b1b00018122d7012b2200012b22d700004900012b24d72500012b20d70181020001561ed70156320022d7012b2100012b20d701ac210001ac21d7012b1b00018122d7012b2400018125d701561c00012b24c8180001ac24d7012b200001ac22d7
+01561b00018122d7012b2200012b22d700004900015624d7012b2400018120d7012b0200012b1ed70181320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b2400015625d701ac1c00014f24c8012b170001ac24d7012b200001ac22d701811b00018122d7012b2200012b22d700004900018124d7
+012b240001ac20d704001fd7320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b250026d71c00017924c8012b170001ac24d7012b2000018122d701811b00018122d7012b2200012b22d70000490001ac24d7012b2300012b20d701ac040001ac1ed70156310022d7012b2100012b20d701ac2100
+01ac21d7012b1b0023d7012b250001ac25d701561b00017924c801791700018124d701562000018122d701811b00018122d7012b2200012b22d700004800012b25d7012b2300018120d70181040001811ed70181310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500018125d701811b00019e24c8
+01791700018124d701812000018122d701811b00018122d7012b2200012b22d700004800018125d7012b230001ac20d7012b040001811fd7310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500015625d701ac1b00019e24c801791700018124d701812000018122d701811b00018122d7012b2200
+012b22d700004700012b26d7012b2200012b21d70500012b1fd70156300022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500012b26d71b0025c8019e1700015624d701ac2000018122d701811b00018122d7012b2200012b22d70000470001ac26d7012b2200018120d701ac06001fd701ac300022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701561a0025c8019e1700012b25d72000018122d701811b00018122d7012b2200012b22d70000460001ac27d7012b220001ac20d70181060001ac1fd7012b2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701811a00
+26c8180025d7012b1f00018122d701811b00018122d7012b2200012b22d700004400012b01ac28d72200012b21d7012b060001811fd701812f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac25d701ac1900012b26c8180025d701811f00018122d701811b00018122d7012b2200012b22d7
+0000430001562ad72200018121d7070001561fd701ac2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8180001ac24d701ac1f00018122d701811b00018122d7012b2200012b22d700004100012b01ac2ad701ac220001ac20d701810700012b20d7012b2e0022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8012b1700018125d701561e00018122d701811b00018122d7012b2200012b22d700003f00015601ac2cd701812100012b21d70156080020d701812e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d7
+012b1800014f26c8012b1700015626d71e00018122d701811b00018122d7012b2200012b22d700003c00015601812fd701562100018121d7012b080001ac20d72e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701561800017926c8012b180026d701811d00018122d701811b000181
+22d7012b2200012b22d70000380000032b81ac0032d7012b210001ac21d70900018120d701562d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701811800017926c8012b180001ac26d701811c00018122d701811b00018122d7012b2200012b22d700003200022b028101ac36d72100
+012b21d701810900015620d701812d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800015627d701811b00018122d701811b00018122d7012b2200012b22d700002d0000042b5681ac3bd701812100018121d701560a0021d72d0022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800012b28d701ac012b1900015622d701811b00018122d7012b2200012b22d700002700022b028101ac40d70156210022d7012b0a0001ac20d701562c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800
+019e26c80179190001ac29d701ac012b1700012b22d701811b00018122d7012b2200012b22d70000230000035681ac0046d72100015621d701ac0b00018120d701812c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800019e26c80179190001562bd70003ac562b001400012b22d70181
+1b00018122d7012b2200012b22d7000020000156018149d701812100018121d701810b00012b21d72c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a0001ac2dd70004ac81562b1000012b22d701811b00018122d7012b2200012b22d700001d00012b01814cd7
+012b210022d701560c0021d701562b0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a00015633d702ac03810156082b015622d701811b00018122d7012b2200012b22d700001b00015601ac4dd701812100015622d70d0001ac20d701ac2b0022d7012b2100012b
+20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c8019e1b0001ac63d701811b00018122d7012b2200012b22d700001900015601ac4fd7012b2100018121d701810d00015621d7012b2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1b00
+015663d701811b00018122d7012b2200012b22d700001700012b01ac50d70181220022d701560d00012b21d701812a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1c0001ac62d701811b00018122d7012b2200012b22d700001500012b018152d72200015622d7
+0f0001ac20d701ac2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1c00012b62d701811b00018122d7012b2200012b22d700001400015653d701562200018121d701ac0f00018121d7012b290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2700
+27d70181170027c8019e1d00015661d701811b00018122d7012b2200012b22d700001300018153d70181230022d701560f00015621d70181290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1e00018160d701811b00018122d7012b2200012b22d700001100012b01ac
+53d701ac2300015622d7012b100022d7290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e1f0001ac5fd701811b00018122d7012b2200012b22d700001000015655d72400018121d701ac1100018121d70156280022d7012b2100012b20d701ac210001ac21d7012b
+1b0023d7012b270001ac26d701ac170027c8019e20005fd701811b00018122d7012b2200012b22d700000f00015655d7012b240022d701811100015621d70181280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2000012b5ed701811b00018122d7012b2200012b
+22d700000e00015655d7012b2400015622d70156120022d7280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2100012b01ac5cd701811b00018122d7012b2200012b22d700000d00015655d7012b2500018122d71300018121d70156270022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e230001ac5bd701811b00018122d7012b2200012b22d700000c00012b55d7012b260022d701811300015621d70181270022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e240001815ad70181
+1b00018122d7012b2200012b22d700000c0001ac53d701ac012b2600015622d701561300012b22d7012b260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2500015659d701811b00018122d7012b2200012b22d700000b00015653d701812800018122d7012b1400
+01ac21d70156260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170001a426c8019e2600012b01ac57d701811b00018122d7012b2200012b22d700000b0052d701ac012b290022d701ac1500015621d701ac260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+270027d701811700019e26c8019e2800015656d701811b00018122d7012b2200012b22d700000a00018150d701ac01562a00015622d701811500012b22d7012b250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2a00018154d701811b00018122d7012b2200012b
+22d700000a004fd701ac01562c00018122d7012b160001ac21d70181250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2b00012b018152d701811b00018122d7012b2200012b22d70000090001814dd701ac01562e0022d701ac1700018121d701ac250022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c801792d00012b018150d701811b00018122d7012b2200012b22d70000090001ac4ad70003ac812b002f00015622d701811700012b22d7012b240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700
+019e26c801793000015601814dd701811b00018122d7012b2200012b22d700000800015648d70003ac812b003200018122d70156180001ac21d70181240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c80179320000032b56ac004ad701811b00018122d7012b2200012b
+22d700000800018145d7000381562b00350023d71900018122d7240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179360000035681ac0046d701811b00018122d7012b2200012b22d70000080042d70003ac812b003800015622d701811900015622d70156230022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179390000042b5681ac42d701811b00018122d7012b2200012b22d700000700012b3ed70003ac812b003c00018122d701561a0022d70181230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d7
+1800017926c8014f3e00012b0156028101ac3cd701811b00018122d7012b2200012b22d70000070001813ad70003ac815600400023d7012b1a00018122d7230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d71800017926c8012b4500032b048105ac09d703ac22d701811b00018122d7
+012b2200012b22d70000070001ac36d70003ac8156004300015622d701ac1b00015622d70156220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c8012b5d0001ac21d701811b00018122d7012b2200012b22d70000070033d70004ac81562b4600018122d701811c00
+22d701ac220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701ac1800012b26c8012b5d0001ac21d701811b00018122d7012b2200012b22d700000600012b30d70003ac562b004a0023d7012b1c00018122d7012b210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+2600018126d701811800012b26c801245d0001ac21d701811b00018122d7012b2200012b22d70000060001562ed70181012b4c00015623d71d00015622d70156210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d701561800012b26c85e0001ac21d701811b00018122d7012b2200012b
+22d70000060001812bd701ac01564f00018122d701811e0022d701ac210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac26d7012b1800012426c85e0001ac21d701811b00018122d7012b2200012b22d70000060001812ad70181510023d701561e00018122d7012b200022d7012b21000156
+20d701ac210001ac21d7012b1b0023d7012b260027d71a0025c801a45e0001ac21d701811b00018122d7012b2200012b22d70000060001ac28d701ac012b5100015623d71f00015622d70181200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500012b26d701ac1a0025c8019e5e0001ac21d70181
+1b00018122d7012b2200012b22d70000060001ac27d701ac5300018122d701811f00012b22d701ac200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500015626d701811a00019e24c8019e5e0001ac21d701811b00018122d7012b2200012b22d70000060001ac27d7540023d70156200001ac22d7
+01561f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500018126d701811a00019e24c801795e0001ac21d701811b00018122d7012b2200015622d70000060027d701565300015623d7012b2000015622d701811f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b250001ac26d7
+012b1a00017924c801792800022b340022d701811b00018122d7012b2200018122d70000060026d701ac5400018122d701ac2100012b23d71f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400012b27d71b00017924c8014f28000003acd78100330022d701811b00018122d7012b2200018122d7
+0000060026d70181540023d70181220001ac22d701561e0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400018126d701ac1b00017924c8012b2700018103d701ac012b310022d701811b00018122d701812200018122d70000060026d7012b5300015623d7012b2200018122d701811e0022d7012b
+210001ac20d701ac210001ac21d7012b1b0023d7012b240001ac26d701811b00012b24c8012a2600012b06d701812f00012b22d701811b00018123d701ac210001ac22d70000060001ac25d7012b5300018123d72300012b23d71e0022d7012b210001ac21d70181200022d7012b1b0023d7012b2300015627d7012b1b00
+012b24c82700018108d701562d00015622d701811b00018124d701ac012b1f0001ac22d70000060001ac25d7540023d70181240001ac22d701561d0022d701ac210023d701ac1f0022d7012b1b0023d701ac230001ac27d71d0024c82600012b0ad701ac012b2b00018122d701811b00018126d701561e0023d700000600
+01ac25d75300015623d701562400018122d701ac1d0023d701ac012b1e00012b25d7012b1c00012b22d7012b1b0024d701ac2100015627d701811d0023c8019e260001ac0cd70181012b290001ac22d701811b00018127d701811c00015623d700000600018125d7012b5200018123d72500012b23d7012b1c0025d70156
+1d00015626d701811b00015622d7012b1b0025d701ac200028d701561d00019e22c80179250001810fd70181012b270023d7012b1b00018128d701ac012b1a00018123d700000600015625d70156520023d701ac260023d701561c0026d701811c00018127d701ac012b1900018122d71c0026d701ac1e0001ac28d71e00
+017922c80179250012d70181012b2400015623d7012b1b0001ac2ad70181190024d700000600012b25d701ac2e00012b02ac2000015623d701562600018122d701ac1c0028d701561a002ad70181180001ac22d71c0027d701ac012b1b00018128d701811e00017922c8014f2400018114d70181012b220001ac23d7012b
+1b0001ac2cd701561600015624d70000070026d7012b2b00015601ac03d7012b1f00018123d7012b2600015623d7012b1b0029d701ac012b170001562bd701ac01561500015623d71c0029d701561900018129d7012b1e00014f22c8012b2300012b17d70181012b1f00015624d7012b1b0001ac2dd701ac01561300012b
+25d70000070001ac25d701812900015601ac05d701ac1f0023d701ac280023d701811b002bd70181012b15002ed701ac0156130001ac23d71c002ad701811700018129d701ac1f00012a22c8240001ac19d701ac01561c00012b25d71c0001ac2fd701ac0156110001ac25d700000700018126d701562600018109d7012b
+1d00015623d701812800018122d701ac1b002dd70181012b120001ac30d701ac01561000018124d71c002bd701ac01561300012b01ac2ad70181200021c801a4230001561dd7018101561800012b26d71c0001ac32d70181012b0c00012b01ac26d700000700015627d7012b2200012b01810bd701ac1d0001ac23d7012b
+2800015623d701561900012b2fd70003ac812b000d00012b01ac34d7018101560b00012b01ac24d701ac1c002dd701ac01560f00012b01812cd72100019e20c80179230021d7000381562b001300018126d701ac1c0036d7000381562b000400022b018101ac27d701ac0000080028d701561e0000032b56ac000ed7012b
+1b00012b24d72a0023d701811900012b32d70003ac815600022b050000032b56ac0039d70003ac815600042b00035681ac0026d701ac1c002fd70003ac812b000a00015601812dd701812100017920c801792200018124d70004ac81562b0b0000032b56810028d701ac1c0068d701ac00000800018128d701811a000003
+2b56ac0011d701ac1b00015623d701812a00018123d71900012ba8d701811c0033d702ac048102ac30d7012b2100017920c8014f2100012b2bd708ac2cd701811c0068d701810000080001562ad70181150000032b81ac0015d7012b1a0001ac23d701562a00015623d701561800012ba8d701811c006ad701812200012b
+20c80124210001ac5fd701561b00012b68d70181000009002cd7000381562b000c0000042b5681ac19d701ac1900012b24d72b00012b23d7018118000181a8d701561c006ad7012b230020c82100015660d7012b1b00012b68d7012b0000090001812fd702ac038104ac20d7012b1800015623d701ac2c0001ac23d71800
+0181a8d7012b1c0069d70181240001a41ec8019e210060d701ac1c00018168d7012b00000900012b58d70181180001ac23d701562c00015623d7015617000181a8d71d0069d7012b240001791ec801792000018160d701811c00018168d7010000000a00018158d7012b1600012b24d7012b2c00012b23d701ac170001ac
+a7d701ac1d0068d701812500014f1ec8012b1f00012b61d7012b1c0001ac67d70181010000000a00012b58d701811600015623d701ac2e0001ac23d7012b160001aca7d701811d0067d701ac2600012a1ec8200001ac60d701ac1d0001ac67d70156010000000b00018158d7012b150001ac23d701812e00018123d70181
+1600a8d701561d0067d7012b27001dc8019e1f00015661d701811d0068d7012b010000000c0058d701811400012b24d701562e00012b23d701ac1500012ba8d71e0066d70181280001791cc801791f0062d71d00012b67d701ac020000000c00015658d7012b1300015624d7300001ac23d7012b14000156a7d701811e00
+65d701ac2900014f1cc8012b1e00018161d701811d00015667d70156020000000d00018157d70181130001ac23d701813000018123d7018114000181a7d701561e0065d7012b290001241cc81f00018161d7012b1d00018167d7012b020000000e0001ac57d7012b1100012b24d701563000012b24d7140001ac60d70181
+46d71f0064d701562b0001a41ac801792000012b01ac5ed701811e0001ac66d70181030000000e00012b57d701811100015624d7320024d70156130060d70003ac002b0044d701811f0063d701812c0001791ac8014f220001565cd701ac1f0067d7012b030000000f00015657d7012b100001ac23d701ac3200018123d7
+01811200012b60d7012b0200012b43d7200062d701ac2d00012b1ac80124240001815ad7012b1e00012b21d701ac018143d70181040000001000015656d701810f00012b24d701563200015624d7120001815fd701560400012b01ac40d70156200061d701ac2f0019c8019e2600012b018157d701561f00015621d70003
+8100560041d701ac050000001100015656d7012b0e00015624d7012b330024d70156110001ac21d701813cd70181070001ac3ed70181210060d701ac3000017918c8014f2800012b01ac54d701812000018121d701810200012b01ac3fd7012b050000001200015655d701810e0001ac23d701ac3400018123d701811000
+015622d7010001563ad70181090001813cd701ac22005fd701ac3100012b18c801242a00012b01ac51d70181210022d70181040001563dd70156060000001300015654d701560d00012b24d701813400015624d7012b0f0001ac21d701ac0200012b38d701810b0001813bd7012b22005ed701ac330001a416c801792d00
+012b01814ed701812100015622d7012b0500012b01ac3ad70181070000001400012b01ac50d701810f00015624d70156350024d701560e00012b22d70181040001ac35d701810d00015639d7012b23005dd701813400017916c8014f2f00012b01814bd701812200018122d70800015638d7018108000000160001814cd7
+01ac0156110001ac24d73600018123d701ac0e00018122d701560500018133d701810f00012b01ac36d7012b240001ac21d701ac39d701563500012416c83300015601ac47d70156230022d701ac0900012b01ac35d70181090000001700015649d701ac01561200012b24d701813600015624d7012b0e0000032b81ac00
+1fd7012b0600012b01ac30d701561200018133d701ac012b250001ac21d70156018136d701ac012b3700017914c801793500015601ac43d701ac012b2300012b01ac21d701810b00015601ac32d701560a0000001800012b018145d70181012b1400015624d701563600012b24d70181120000035681ac001ad701ac0900
+01812ed7012b1400012b01ac30d70181270001ac21d700038100560034d701813900012a14c83800012b018140d70181270000032b56ac001ed701560d0001812fd701ac012b0b0000001a00012b01ac41d70181012b160001ac24d7012b370001ac23d701ac150000032b56810017d701810a00012b01ac2ad701811800
+01562dd701ac0156280001ac21d701810200012b01ac30d701ac012b3b00019e12c801793b00015601ac3bd701ac012b2c0000035681ac001ad70f00012b01812cd701810d0000001c00015601ac3cd7018101561800012b24d701ac3800015624d7012b180000032b81ac0013d7012b0c00012b01ac26d701ac012b1b00
+01812ad701812a0001ac21d70181040001812ed701563d00012a12c83e0000032b56ac0036d701ac012b310000032b56ac0016d701811100012b018128d701ac012b0e0000001e00015601ac37d70003ac562b001b00022b0156028102ac1dd701813800012b24d701811c0000035681ac000ed701ac0f00012b01ac22d7
+01ac01561f00018101ac25d701812c0001ac21d701ac0500012b01ac2ad701814000017910c80179410000032b81ac0031d70181012b370000035681ac0012d7012b1400018101ac23d701ac012b100000002000012b018132d70003ac562b002700022b0156028102ac14d7012b390001ac24d71f0000032b5681000bd7
+0156110000032b81ac001dd701ac015623000156018120d7018101562e0001ac21d701ac0700015601ac25d701ac015643000fc8019e450000032b5681002bd701ac01563d0000032b56ac000ed701ac170000032b81ac001ed70181012b120000002300015601812bd70003ac8156003400012b0156028102ac0bd701ac
+820000032b81ac0006d701ac150000032b81ac0017d70003ac562b002800015601811ad701810156310001ac21d701ac0900012b018120d70003ac812b004500014f0ec8012a490000032b81ac0024d7000381562b00430000035681ac000ad701561a0000032b81ac0018d70181015615000000260000035681ac0023d7
+0004ac81562b3f00022b0156028102ac02d70181860000035681ac0002d70156180000042b5681ac0fd70003ac8156002f0000042b5681ac10d70004ac81562b340001ac21d701ac0c00015601811ad70003ac812b00490001790cc8014f4e0000032b56810002ac19d70004ac81562b4a0000032b56ac0006d701ac1f00
+00042b5681ac0ed701ac0281012b180000002a00012b028101ac18d702ac000381562b004d00012b8900012b01561f00032b01560481032b3a00032b015604810156032b3a0001ac21d701ac0f0000042b5681ac10d70004ac81562b4e0001790ac801795500022b015603810bac03810156012b540000035681ac0002d7
+01562500032b015603810156032b1d0000003000022b048107ac04810156022bff008b0001ac21d701ac15000c2b5500017908c8014fc300012b01564e000000ff00cf0001ac21d701ac7700012b019e04c80179012aff0015000000ff00cf0001ac21d701ac7a00022bff0018000000ff00cf0001ac21d701acff009400
+0000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff00
+94000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701ac7a000207ff0018000000ff00cf0001ac21d701ac750000030809100006110003
+10090800ff0013000000ff00cf0001ac21d701ac7200010101090e1101090101ff0010000000ff00cf0001ac21d701ac7100010912110109ff000f000000ff00cf0001ac21d701ac6f0001010110141101100101ff000d000000ff00cf0022d701ac6e00010118110108ff000c000000ff00cf0022d701ac6d0001011a11
+0108ff000b000000ff00cf0022d701ac6d001c110101ff000a000000ff00cf0022d701ac6c0001101c110110ff000a000000ff00cf0022d701ac6b0001081e110109ff0009000000ff00cf0022d701ac6b0020110101ff0008000000ff00cf0022d701ac6a00010920110109ff0008000000ff00cf0022d701ac6a000110
+21110101ff0007000000ff00cf0022d701ac6900010722110108ff0007000000ff00ce00012b22d701ac6900010922110109ff0007000000ff00ce00012b22d701ac690001102311ff0007000000ff00ce00012b22d701ac69002411ff0007000000ff00ce00012b22d701ac690024110107ff0006000000ff00ce000156
+22d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110101ff0006000000ff00ce0001ac22d701ac690001102311ff0007000000ff00ce0001ac22d701ac6900010922110110ff000700
+0000ff00ce0023d701ac6900010822110109ff0007000000ff00cd00012b23d701816a0022110101ff0007000000ff00cd00015623d701816a00010920110110ff0008000000ff00cd00018123d701816b0020110108ff0008000000ff00cd0001ac23d701816b0001091e110110ff0009000000ff00cd0024d701816c00
+01101d110101ff0009000000ff00cd0024d7012b6c0001011c110108ff000a000000ff00ce0000032b81ac0020d7012b6d0001011a110109ff000b000000ff00d20000042b5681ac1bd7012b6e00010118110109ff000c000000ff00d60000042b5681ac17d770000101011015110109ff000d000000ff00db0000032b81
+ac0013d772000109121101100107ff000e000000ff00df0000032b5681000fd77300010101090e1101100109ff0010000000ff00e30000042b5681ac09d701ac760001080110091101090108ff0012000000ff00e80000035681ac0005d701ac7900010105070101ff0015000000ff00ec0000052b81acd78100ff009500
+000000010000000000000000000000000000000000000000000000000000000001050000050000000d0000004d45544146494c455049435400085d000044e6fffff06f03000800085dbc190000
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00
+fefefe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefecb0098653200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000040302020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000504020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020600000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000004020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+030303030604040404040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020203030306040404040404040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020203060405050000000000000000000000000000000000000005050404060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040505
+05000000000000000005050505040406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0d020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202030404050000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e
+0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000406030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303
+030303030303030303030303030303020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000506030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202
+020202020202020202020303030303030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202
+020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000005000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020206000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020204000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020203060405000000000000000000000000000000000000000000000000000000
+000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202030400000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504040404060604040405000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+0202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000000000000000000000000000000000000000000000000000000000000000000000000504060302020202020202020202020202020604
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+0202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020203000000000000000000000000
+000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000050403020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406030303030306040405000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000
+000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202
+0202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202
+020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020300000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202
+02020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000050602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020203000000000000000000000506020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+040000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202
+020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202030000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020400000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000030200000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020d0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020203020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000005020204000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000302020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+000000000000000004020206000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202
+020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202050000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000302020202040000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+0202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000202020202030000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000000005020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000050202020202020000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+0000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020300000000000000000000000000
+000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202
+020202020200000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000030202020202020400000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000020202020202020600000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000006020202020202020200000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000003020202020202020205000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020206000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f
+020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020203030404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020203000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202040000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000
+000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+050406030202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202060500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020202020000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000602020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+000003020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030303040404040505050505000000000000000000050505000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000502020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+0202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+0000000000000006020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+0000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000
+000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+0202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202050004020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+0000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020202020202
+020204000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202
+020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020206000000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000004
+030202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030505020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020400
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000
+000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000
+000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020600000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000050202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202
+020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000
+000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000302020202020202020202020202020202020202020202
+020202020202020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050602020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020305000000000000000000000000
+000000000000000000000000000000000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000502020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202030500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040602020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060302020202
+030304050000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202030605
+000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040603030202020202030605000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030303030604050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000005040603
+020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202030605000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040405050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000005050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000406030202020202020202020202020306040500000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040505050500000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202
+020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202
+020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000002
+020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000502030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000030202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000302020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000400
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202030500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000602020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+000000000000000000000000000000000000000502020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202030500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050602020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202020202020305000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000060202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020206
+050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202060405000000000000000000000000000000000000000000000000000005020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000
+000000000006020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000004020202
+020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+0302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+000000000000000000000000000000000000000000000002020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000
+000000000000000000000000000003020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020204000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202020206040500000000000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020204050000000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202030500000000000000000000
+000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000302020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020202020202
+020202020202020203030604040505000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020203060400000000000000000000000602020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202
+020202020202020202020604000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000000000050202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000
+000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060404050500000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000050202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000050603020202020202020202
+020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020304000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202030405000000
+000000000000000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303060404050500000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000
+000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000005020202020202020202020202020202
+020202020202020202020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040405000000000000000000000000000000000000
+000000000000050504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306020202020202020202020202020202020202020202020202
+020202020202020303030604040404030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030604040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203030604040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405
+000006020202020202020202020202020202020202020202020202020202020202020202020202020303030604040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203030404040405050505050505040404040603030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020303030303030303030303030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202030602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f1002020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090c0a0b0b0b0b0b0b0a0c090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040500000000000000000000000000000000000000020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0a0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020306040500000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090a0b0b0b0b0b0b0b0b0b0c0902020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060405000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020708080808080702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}{\result {\insrsid2387180 {\*\bkmkstart OLE_LINK4}{\*\shppict
+{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex9\picscaley9\piccropl0\piccropr0\piccropt0\piccropb0
+\picw23813\pich6588\picwgoal13500\pichgoal3735\pngblip\bliptag-1424617728{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}89504e470d0a1a0a0000000d4948445200000384000000f9080300000048c40b8b0000000467414d410000b1889598f4a600000300504c5445ffffffffffccff
+ff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff66
+00ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99
+cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc
+00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999
+669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff
+66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc66669966666666
+66336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cc
+cc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc333399333366333333
+3333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc00
+99990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc0000990000660000330000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199e9ab4000000
+097048597300000ec300000ec401882e3ea30000194449444154789ced9dbb951b391045296b579e360759ea60e43117994c44964c06a20c269d9de67048361b
+40bdfaa13f7cd7d2391a0255001e50f8347038905761389ddf4e4b1b41c8ab727c17e0c879310bbefc33f265b1fc09598ee153800b8af0df6fff7df2f5df654c
+206419de05f836650123be7cfd6fc2b7af0b1841c8020c0f03e092227c92e04586fff4378390ae4c22d06545f8e5db5c836350dadb0e42fad110e0c8d0d79a2f
+4509528564b79423d0054558d5205548f68924c0ee226c68f0bfffb84a4a760822c2aebbf5e5f9e027dc3324fb438c453b8bb0b02efac8b78ea610d287e73dc1
+a545d8d6200352b2438eeb12a130107228243b64589708250d725648760820c27e8747ff9545c86d0ab23b8095997e2214a351c6a36487ac4a84edfd890fba19
+43482780e5d17e220434c84921d91d9b1321bfa6207b8322246461808d428a90904c808d428a90904c3627c26ec610d2895589905b14e41559950881cd7a9e98
+21fb634d22fc4716213fa320fb634d2204e251eed593fdb12a118af128a351b243562542717d940321d921eb12a1f031130742b247d625c2f6ac90df31915db2
+321136035206a36497ac4d848d8b47b93d41f6c9da445857213548768afc697def070acb0fc27c632c4af6cafa4458dc2ee4ba28d92f6b14e1ec91d0af1c06c9
+8e59a508dff9f7eb352afdc6d7b2c9ce59ab082ffcc34f78c90bb06a1112f20a5084842c0c4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842c0c
+4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842cccaa45380ccbe54d482fd62bc2e1f7df777efd5828fb7d310ca777ce1f8cff3cb2835b0f5611
+0e0fa418f6ebef959f29c9f765382e97f5bbf6aa557b7e17636c6ea1a979108bfcbde11ec7eec8d5803f1339ba52d18bf03dd7d98fc22bf3aec1f7c13036e52b
+1fa577be7329ca8c9c2ee585a9f05aa7be2a7dca59ae60bfdf17b3cfef999d22ccf6d32ef2420b7e2f0365169132508af0786a55665c1b7ed060f85838165fdd
+edd8fe64389e0ba55831ead9105f79b6aaaae4b5258f4fed951bcb320ca766910fd58ee98c577cab6c0d25a911e120566b940e7ffe9d10372fac57c1534146f8
+31d155a36a1a46d9b4815455a1f260a78799f86ed8cb0daa18c9b0893ae6652755ff19296eb977d3d61a2ec223544a981f12530dfefd1d90e4730d25fb313c17
+576d8c10bb0543bf065655c9e956660dedddad551bfb9938625f33f5792cf19c05502c62b563bdb8ae1c5011220e980c28f1eb498401d34270089cfa61edd68b
+73b16262d8a44d678759821f4ed7a752c8cfcdf1e81149bd5a10e5ea9dfc39da829ba5ade8c6152a902d3b29331ff18d223f9e35f8f7af2bbdf9b084a26cfecd
+bce69582c78c0a3b34bd65855ae703a56cedb8a0dea8ec7135c27928f2904104ea28eed6c22a8044a8af5843ebbdf37b2e42cf50e81a19748e3497239ffe5637
+6d03fb55cb5cb0945bd16ba80d5a27b19059059b5a257e17adb2588aeeeb55800e868808751d80d280398581d03e14fa5b25ea8838dc4e9ba7d62ea83730d554
+39bb8298fcd336a7e54f45204f31ae3fd0cba7e0bda521815db86c9e6a39436fc09cd98cd03e14faa6471a47807a7e6c9e16c3e431266618bc529061c402a6c3
+f4b3fa274773b13cf725d6281f1201b03063cbfdcd1a997c2f69d0341486481075444ee561afc7669830c804cc06850c13e35143cac0c07c7120a2b0ed2106a2
+4273e208a6d0a43810ea77ec836647b02340769f7f6aaed1f60abd35d516d3769f178f9ad646a1957dc866c90f4f5b0254e8481dc0b260fda72c425d3c1a2ac1
+37a46501cde8a33a3c0356c38c140d3e67685fc21440aa6be63ce0b2a7584e2aebaa00e5e1493ec6822786b206fffefdae48233c30035408a6e1134b35d6cbd1
+e07337eedbcc73155ec977601e8e245cfd319c0d948ccf7b0f6a1556a251453c9a20c137a028e5fa366df63c5169e1491a9c2d4f203f324c0a21f32d45eee3e2
+89bf39890512616b13ad0a6b1a44cfae4507a237a4a2941b9271b36742b938933438977c523c6a8a461df33d9421260fc9fd802c047475528d46c17834b17314
+c22cb9b6ce11c69546e4acc638cfcb38644920a9963a419f7b32e798a295a2a8883c9c264ca846a3503c9a35225c907a93ccbc1f28f40529f17731ab9c78144a
+b5f4c32cc76f04f5e92b68399a4aa9ac8d8e88eba33993c13b426f92de226a56648dfe257f1127d59b14c668347f521885a0802e36e0eb65959dfa0f02aa32d3
+8f5e2de2d98ab4e1bfe46e4a3c8a28db7e9a750508dd52171bf069e1cf9608052de78ba05d96bd5ac473b79a954fd1db8c781449b3f20185d3c56eb40ba08f0d
+7080d29812caf168be1fcdec7bb508fd114a1be53e2f211e3547a3dde6e16edadd522723d080b4a5417193227f286ab7aef4ecaf4cbf55cdcaa5e22b52c8ca4d
+0a7334da6d1eee66150d07ac96e2574cf0a430bf4ada6ef46a11936eb5f34088895e7568c61e8d6e4784ed86d3cb0a2c42694e09c549618780b06941af16f158
+96bd0742cc4bd5a410195b6b096e6579b43d91e96605d43936a784c026457a9d34fb926e2dc291e7e57ed5f19a55e90fabf5151e8f22aa5ebcc8bd349b7f372b
+a0a1b0b14b884c0a173e0adbad453cd4a8e6674f173996aeafbd5177d4bcb3ee48afda783623c2666cd0cf0c64286c6b10f8b2377d6da679256076e6732314fe
+961b72ed8a88869fc1f1a8271addce1e45730c5a8919d7229544281f1fcd9e97b55a57b71661f8d2ad51faa5cb715a233ea21ac52605e2c2f245ee255a841fcf
+fac8b38a67e4a150981222c74735b5f2f90a85c68955f46827758ec2c834d3a17bc0172b4ae342bdd00d223cdf5ea432df84f999cad08ce8a77fef2c8269de0f
+d5a3bc024aee1d4511029fd743363d3d38a1b89b3bb230cddc8c40a351602a30f904ccbf15833feb002456ef42b4227c7ea7c176dc7872413296445cbb995dc0
+a5fb784fac90c285a36a11ca1e951f9a003d4910e1d59e01bf24fc660468343843bba7d69650683c0ab8d02a73ac003e8d8af802657e0b1d540bad3270e57e08
+be1e5fd2e0df3f520a07a989386f796f17a6a15b9db60bb4347519e213b46b7c16f0d116bc49e1b41f2a806b32e5ae4591c25b45049e4d169d09b5a2c00743a9
+6284f33223420a4291b42f26c75468cb19b6074be2f3afb16c34e7572e32947e805439982932aab692c24ae0ad717bac6641bdd28090245a8500e75f6fbfb80a
+858a11cecb8c40f7f0567217df77715f63a4136139b2807eaafa63e549cee12cfec0378f9be08c462356a6d0247ca788029c8879aa46888bc47519f0b6a7a23d
+c8134bde150795082bcd42f3c11ed689273cd50de40a4adf6b3f540231079d1a1a505c3a6b77422851b8f1b593014488dd3e3acf187be5cc1b1b85cc8f15e588
+359f8437c05d7b7b8f2063b9ffc457bb1b02e3d19690e14b671d4e88bd1ae686541ae2e2282ac2e736023f3408b8101212b4020b4503d74d2003098b47bdd128
+3426bb6fe81a69260224e115a11c59a093db763c2a6b10bdf770d23a156f7d02adbae5022a42f775f6b8b96f2922f4ae69de003cf07e0f2bb75ec019ff7ab153
+8448748f0662cd44001182efc23cf44caac7a100150588d07fedcff52fb1524f0847a3e25164106aa710e1beee41ad04338052887c18af791c2a4e84f746a25b
+9500dc708b50ec15f0a53624bb1c117a67cf579c9ddea19308e56148aeb30e224487c256914222fc811873eb62b597efa1af6d55303cb257205a84f6e75a1bc4
+e4eb8e4643442856db56441870ea0b581cc5360a3fed313c532a7be01461e8236bf21f8e989e490a3052ced71f8d52848fa027691b494022849f85399b4600d9
+01a708636234d8da0b091b8531f1a833fa1f09b0623f2244e3d146629008e1670a07d3544876604d220c590e3302642b8adf1f8d52843a4f3e68b461609bd0fa
+763d8c6fa12c4684c8db97a8b51f6404a401a137103d05ec50bf9208fde70e2011821b8556d62042a06dc2d65e31cc8e25bc8796b12492f7063ed88f08c14961
+c31f448314e1053c3fc46c1b40a6422c19515c0149c89dc1664488ae12d4138044887c51e860b722143ee332d0638f2fe2b48b5ce262816f4784de9599e6834c
+773063ac6c4b84cabbe514e7f700dcf1289080dc71c869bc9408bd67b6a0bd7a8af002fe9753cec59b3d8c00f935730b29ad88345e4f84d5460c8a107a34dbcc
+b64468ba2baf7cc58e016f3c0ad82a1b2127f252220463a3aa43a008334e42ded998088d57f69deb37ed28002adc797d2960a59cc84b89d0bb3c0aedd5538417
+1419d6081022908befbbc9101b28c202b5df7715e1300ca7ebcb28f7f283ee015e95089d17503fdfc2a90470d775b50bb2ad22a7421116a8fd1e14217c78b462
+e5f1045fef596455220cb86ed82144d7667b4c344a11ea936a25078ad07e6e0dbfb3bcc5ba4418f32a9175ad0648da5356312650848ae472451822c091758930
+ec152ad380e88947033e671f912da00815c94147474d22f43cfc31635d228c7c854aaf43473ceabc1ae94644322f28c25ab5648950f96c8dd5fc91054418eb9c
+f66c1b90a2b9a8b04f3f640b28c2025d45a87bb1c663fec802228c7e094a2743bbc341d12845a84f6ac42942cd6714f1125c9f08c35dd4c8d01c8f4645a314a1
+3ea9917e224c79d07c6d224c781451f1f5219058f177b27ac3aed1a7080bf41261d2f3f5ab1361869f91af0b163d961b2d381e1bf39fb027113a1f0efe132a42
+db13ac00ab1361e402e90d7430346eb98745a314a1da90a64798064111260d836f6b14a1f3ec9addd01139a15281c9d5838ec5118e508437224598321bfc607d
+224cea71c2eef732fd0a5d1d8af08322bc1128c2ac50746485225c5285b67854fe119237961245a8f0284c8469d3c10b6b14e1922a94939997585c344a11aa0d
+697a1425c29c29d28d558a304985b2adb6a32f71d12845a836a4e9519408312bccac538439c33fb2576779a456fe0990319a1445a8f0284884a9b1e8db6a4598
+b31815f359edf3b016188d5284faa4466a051c23c2c475d1b6f960e679224c094981b0501f8fcabf883cb2431116481561defea064fec8b2224c392a2b9b8b3f
+9df149c0a39c37e4cc29c20299224c5e9469993fb2b00833668640602827321d4f65ff1477f6cb9953840532cf8e664f081be68f2c2ec2f77129ba08648365af
+a765260f9d8a8f8b231ca0086f0488303f185dbd08c365288f4ada7834321aa508f549b5920b1061878170fd228c9e1bca16cb691c557faef9ae38c27e8af086
+ffcb7acb40783e9f4ea7e370c5f962de4a447808bdd3431e0a75f1a8ec9e5c447764fb294245727e11ea06c2d2a30c40fbdf86080f81f7cbc93989493cb662b1
+90544f29cae65384056a3f778b503310569e27da93082f490dceab8e4782df2713ed51dd72a3caba564a521214212c42bcb5553f59dd9b08af09fa06c58878f4
+4158b1cec9e6bf94083b3d08531521bc47d8f86a7c3773c242aaf64131c0e27ba98945ac7bd85bb69e225438e415211a8d3a55b455115ed3b60851b6594e142f
+23ddd5a711d6bf9e08ab8dd8fb2a13d8ba9a1dedee4538a25e399565a1380d2a5693ce19d9fa9712213812556bd42b422cfb76b0f312223c6837f4e5005136f9
+56edfecc26c8d6bf9408c1feb59ada4f9f08c13ec0edc32e44a83b650a9c601153fb2c36d139c591b511d97a8a704ebd287c22c4b21722abd711a16a47474e4c
+f61ccc5573646d44369e229c532f0a4c84f66278934bf39544a8180c236cbe3a2e1591321aa508b576b4fd718a10ca5daae2971221beb30a188dc6a3d2df29a3
+518a509dd25bb30d7710a1e4ca8b8910552160b4e8fab521637f851361fccb89b03129833458fb8802db20917c78351182db4a2146437fa67c1f9122547af241
+23059708a16506b1305f4d84e0441e690162331c90fcd40e4418bf1f11628b6d2d77a0c3a3b50333506b1267fd2f2742aceb445a00f67184f057da65198a700a
+d6a7b64a9922fca0a708b15921d202b0962c64a78e462942a51923ad52868eccb84428d6f1eb89102a37a80540e7d1c2fd8a307e711102dac14428a733d24a01
+1261cd98981efdf54408cd22a016203a3f88aee9a3518af011ff94103bb7962b4220959d89109a14c6a474125b893e1add870863da4dc8a93168b7de5e0a8827
+402a2d17167a24544ed29519aa79a9f0ce5201a937090f3b11a1e53d0f5b6188497ddf8408f37b34a50807f86d6b6366a808c5a62495af211add8708835e0f0f
+8846a18dc2ea85879008c570678b221c33b5345f38337484023e907097cd0cd9fa0d8830c48b88b5d103b447e113a1d85681545a3f5f428403e89add64386da9
+f48e6dcf2cd1e84e44e8fc39e806941220c2eae516211f516c5184b73c0dab1a98c970ca5238746aff81c901d9fa2d8830e4b1386c5946f205d8a3f8e9b340f2
+432ecba60f0b88f0e18fcf96562ce7a50813a584dae5639ad94658bfbc089db7fca1698c488d04d8a3a8ba127308522e4bef1535d1229c64a99721546cb1a9d5
+3045a33b112112824946805fc48885218bb0fadb900feb01479a29f417e1ec6fc3af68d124e97a99ce164ecbe96e4284fe331311f79c5d708810ab7f7f6fd2fc
+797f1116723c29c2ba98c37e773c770ce3b93c22a7bb091162cdb7a1203408113d9145587f9229666908beafc85c12c1222cfe2f1c95621b4b60627882458ccb
+bb72c29b1021baaa524905bea90428657179b4f11a0c6644bb381537f715e92ec26a86d070884926f87d961ab6687437224423f9a20cf1be0f6816e2f2687571
+34e4a606f7a1cdee226cfc49e5c91b9db5232a75d8976634b93c2027bc0d11e291fcf9a983d55caa8e74a8e2f268c313b0fa1be5e95f27ee2d4221bfe7ea9ae6
+82569d6cb0cef632d6c30672ca1b11a1a6e4ce9f4f6a1e95ef8b20f1d10f49848ddfba9fa24012f007f6a12294ffb0f408236aea074a75589766acc75f23525e
+85087b3c338dd5a5a0c1d653d9704f5209af22ce6f7516213af8cf84a8798d42b6779a349ef2c446653637e4a4b72242d7fe0e0656a4c2ca4c635d46b1265052
+21169c49e677162162f28df159f0d3f13d7ed10530ea30d1d6a19b4fa0cb496f4584bea30e08e0ec5e589969accb687c98d5f8e0bf200735215084e99576cb49
+836d28347f8c1591f44a44981d90a2d186b032f3bdf55b45ed4f37d24009024ef4152166b58f946fdde798a3d15d89303920853bbaa606ffb47fab31e873015f
+f3927448401127c21e03a1451c16bb8c9b84877d8930b74af1326e4e0a9b5342bd0be773f4eca8ab0835b65b49fab021261f30b30d8930332055ccba9b93c2e6
+94307b34479ce829c21e0361de278a53ecd1e8ce4498d7b36a8ab839296c4e090fb9ed1272a2a708fd2e89e46da03f618f46f726c2b48144156bd8a784b94361
+d495735122741c9546318f4feaced09ad1617722ccaa575d37d788478529e1217328c48ab0a3083b9cafc89ca84db05f53b53f11e6a85059c28d7834a034ad80
+25d84f841d0642c73d8acaced0118dee4f841955abede51a978f02bf4e1a0ad102ec27c2fc81d075a5b02eabdc9cb626c27815ea238dea26851c8d4285a107bf
+5bb79f08d3d7465d1ad4b5234f34ba471146077486f2adc6a3c206458afd238af589fd6c51f834a8eb0c93c7dced8930762c31f571150d8a6ba31f84ab50e3c3
+5ece8e7aeed5877db865e6ca484e7f8b220cac5b5b9c51591f85a2d14378441dfd5d79cf8f7aadb8e243b569bedce4f43729c2b0666c5cf4aa5c7c28edd4879b
+3fa21c12fa5ff4744c98047b162bef041ec96d1191fe1a4518d4c39a0bf78f67203c44aa50db1c97b8063f5a86fe5014f6e2233f5f3672065b15217e0149dd6e
+7b5d16976634c905a9501f272df43e6164541a330c82851190a19cc16645e86ec8ae40bf3014b62eb69813b13a63e945167ba9376a388c980d6a4ae3cdbd0e1b
+91c16a45e88a499d214d6128d426e81d1c6c1e2cf85cb6e6e2bb1a9abbbb11108bbcb29773d8b408cdfdab7f56311b0a7503e1c57693e94e0f967db35e737d53
+8168091edcaf8f23c8396c5c84a6e946c4c47eb6400a2f8d3e606e92f6d6b8ac080f0e1d9a9e559391cdf1e620bbb679111e94f5dabc6e56c1d35ea16269f401
+d38285ab352e2ec283292e8daa35832fee49e8201291481f339a80f7b044d6e5e404a93e18fd44d920e5abe3dbc85501a5ef4e4571714ea6020ff2ac206700de
+2b43fbbecaf329b6387f8468f0a019c86b77556f1464448caeb539920dc9d9ef916118ef8ebddf8ff4fecfcbb5f80959fd88d1e088dc1cab97c56f9df132b992
+f369d5f69cbf50f0a15b22249edf9ef9e033b5d6385e4cbd4ffd3d3246b0e3dddbef444c4f70a43064ff45bf757efcfafdfb97655db4cabd2d9e3edeb5894c9c
+cc912290a5ed2364ef48cb328c460949469a8b3312212417692064344a4832d240c84d424272118fef2e6d20217b471a08b92c43482ee251252ecb10928ba441
+2ecb10928b38107259869054e4efb196b690909d237ec2c165194252913f20e3b20c2199c837fc705986904c800b3ab82c434826c037fd4b9b48c8aee970d321
+21a40172abcfd23612b267100d727f82903ca0dbed96369290fd823de7c58190902cc0174096369390bd82be6ac98190901ce0bbce973694905da2787d870321
+21f1681ec0e2611942c2d13d26cbc33284c4a27d9794c1282191185e06e6778484443198dee666304a4814e0befc135c9521240e930897369a903d6109463921
+242412bd06b9324a4828ea592135484830aa3d7a2eca10128f6e28a406098947331452838424a0180a391f2424057828a40609c901b86afb020fab1192053414
+9eb9474f481ac850c85094904cc4a190c32021b90843e199b34142b2699ee366244a483ef5a1f04c0912d285ca50c84094905e1487c213976308e9c76c283c711024a42f5420210b73ba0b905128218bf0f6763e5380e4b5f81f6eb9428cd866468c0000000049454e44ae426082}}{\*\bkmkend OLE_LINK4}}}}}{
+\insrsid2387180 
+\par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8192\dptxbx\dptxlrtb{\dptxbxtext\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\pard\plain 
+\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052\insrsid2387180 {\object\objemb\objw13502\objh3735\objscalex9\objscaley9{\*\objclass PBrush}{\*\objdata 01050000
+0200000007000000504272757368000000000000000000203f0000
+424d043f000000000000360400002800000084030000f90000000100080001000000ce3a0000c40e0000c40e00000000000000000000ffffff00ccffff0099ffff0066ffff0033ffff0000ffff00ffccff00ccccff0099ccff0066ccff0033ccff0000ccff00ff99ff00cc99ff009999ff006699ff003399ff000099ff00
+ff66ff00cc66ff009966ff006666ff003366ff000066ff00ff33ff00cc33ff009933ff006633ff003333ff000033ff00ff00ff00cc00ff009900ff006600ff003300ff000000ff00ffffcc00ccffcc0099ffcc0066ffcc0033ffcc0000ffcc00ffcccc00cccccc0099cccc0066cccc0033cccc0000cccc00ff99cc00cc99
+cc009999cc006699cc003399cc000099cc00ff66cc00cc66cc009966cc006666cc003366cc000066cc00ff33cc00cc33cc009933cc006633cc003333cc000033cc00ff00cc00cc00cc009900cc006600cc003300cc000000cc00ffff9900ccff990099ff990066ff990033ff990000ff9900ffcc9900cccc990099cc9900
+66cc990033cc990000cc9900ff999900cc99990099999900669999003399990000999900ff669900cc66990099669900666699003366990000669900ff339900cc33990099339900663399003333990000339900ff009900cc00990099009900660099003300990000009900ffff6600ccff660099ff660066ff660033ff
+660000ff6600ffcc6600cccc660099cc660066cc660033cc660000cc6600ff996600cc99660099996600669966003399660000996600ff666600cc66660099666600666666003366660000666600ff336600cc33660099336600663366003333660000336600ff006600cc00660099006600660066003300660000006600
+ffff3300ccff330099ff330066ff330033ff330000ff3300ffcc3300cccc330099cc330066cc330033cc330000cc3300ff993300cc99330099993300669933003399330000993300ff663300cc66330099663300666633003366330000663300ff333300cc33330099333300663333003333330000333300ff003300cc00
+330099003300660033003300330000003300ffff0000ccff000099ff000066ff000033ff000000ff0000ffcc0000cccc000099cc000066cc000033cc000000cc0000ff990000cc99000099990000669900003399000000990000ff660000cc66000099660000666600003366000000660000ff330000cc33000099330000
+663300003333000000330000ff000000cc00000099000000660000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0002d702ac000381562b00ff00ff00f10000008d00018108d7000381562b00ff00ff00ed0000008d000dd701810156ff00ff00ea000000
+8c00018110d701810156ff00ff00e70000008b00012b14d70181012bff00ff00e40000008b00018116d701ac0156ff00ff00e20000008a00012b19d701ac0181ff00ff00e00000008a0001811cd70181ff00ff00de0000008900012b1ed701ac0156ff00ff00dc000000890001ac20d701ac012bff00ff00da0000008800
+012b23d70181ff00ff00d9000000880001ac24d701ac012bff00ff00d70000008700012b27d70156ff00ff00d6000000870001ac28d70181ff00ff00d5000000860001562ad70181ff00ff00d4000000860001ac2bd701acff00ff00d3000000850001562dd701acff00ff00d2000000850001ac2ed701acff00ff00d100
+00008400015630d70181ff00ff00d0000000840032d70181ff00ff00cf0000008300018133d7012bff00ff00ce000000830035d7ff00ff00ce0000008200015635d701acff00ff00cd000000830000032b56810033d70156ff00ff00cc00000087000156018131d7012bff00ff00cb0000008a00015601812ed70181ff00
+ff00cb0000008d00015601ac2cd70156ff00ff00ca0000008f00012b01812ad701acff00ff00ca0000009100012b018129d70181ff00ff00c90000009400018128d7ff00ff00c90000009500012b01ac26d70181ff00ff00c80000009700015626d7ff00ff00c80000009800012b01ac24d70181ff00ff00c70000009a00
+018124d7ff00ff00c70000009b00018123d70181ff00ff00c60000009c00018123d7ff00ff00c60000009d0001ac22d70156ff00ff00c50000009e0001ac21d701acff00ff00c50000009e00012b22d70156ff00ff00c40000009f00015621d701acff00ff00c4000000a000018121d7012bff00ff00c3000000a10001ac
+20d70181ff00ff00c3000000a100012b21d7ff00ff00c3000000a200018120d70156ff00ff00c2000000a30020d701acff00ff00c2000000a300018120d7012bff00ff00c1000000a40001ac1fd70181ff00ff00c1000000a400015620d7ff00ff00c1000000a50001ac1fd70156ff00ff00c0000000a50001561fd701ac
+ff00ff00c0000000a60001ac1fd7012bff00ff00bf000000a60001561fd70181ff00ff00bf000000a7001fd701acff00ff00bf0000002e00042b01560681042b6a0001811fd7012bff00a200012a0179029e017901244c00032b015609810156032bb8000000270000032b56810002ac13d702ac02810156012b6200012b
+1fd70181ff00a100019e06c80179450000032b56810002ac14d701ac0281012bb2000000220000032b81ac0021d70003ac8156005f0001ac1fd7ff003400022b038103ac08d704ac02810156012b5300012a09c8019e400000032b81ac001fd70004ac81562bad0000001e0000035681ac0029d70003ac812b005b000156
+1fd70156ff002e00012b028101ac1bd70003ac8156004d00012a0bc8019e3c000156018128d7000381562b00a90000001a0000032b81ac0030d70003ac812b005800012b1fd701814000222b2300212b2100222b400000035681ac0024d70003ac812b004900019e0cc8019e3900018101ac2dd70003ac562b003d00232b
+2400222b000017000156018137d701ac01565500018121d7400022d7012b2100012b20d701ac210001ac21d7012b3c00015601812bd70003ac812b00450001790ec801793500012b018133d701ac01563b00018122d7012b2200012b22d700001400015601813dd70181012b510001ac22d701563f0022d7012b2100012b
+20d701ac210001ac21d7012b3900012b018131d701ac012b4200012b10c801243300018138d70181012b3800018122d7012b2200012b22d70000110000032b81ac0041d70181012b4e0001ac23d701813f0022d7012b2100012b20d701ac210001ac21d7012b3700015601ac35d701ac012b400001a410c8019e31000156
+3cd701ac012b3600018122d7012b2200012b22d700000f00015601ac46d701814c00018125d7012b3e0022d7012b2100012b20d701ac210001ac21d7012b350001813ad701ac012b3d00014f12c8012b2f0001813fd701ac012b3400018122d7012b2200012b22d700000c00012b01814bd701564900018126d701563e00
+22d7012b2100012b20d701ac210001ac21d7012b330001563ed701813c0001a412c8019e2d00012b43d701ac012b3200018122d7012b2200012b22d700000a00015601ac4ed701ac012b4600012b27d701ac3e0022d7012b2100012b20d701ac210001ac21d7012b3100012b01ac40d701ac012b3900014f14c8012b2b00
+015646d701813100018122d7012b2200012b22d700000800015601ac52d70156450001ac28d7012b3d0022d7012b2100012b20d701ac210001ac21d7012b3000018144d7012b380001a414c801792a00015649d701562f00018122d7012b2200012b22d700000600018156d701814300018129d701813d0022d7012b2100
+012b20d701ac210001ac21d7012b2e00015647d701563600012b16c80124280001564bd701ac012b2d00018122d7012b2200012b22d700000400018159d701ac012b4000012b2ad701ac3d0022d7012b2100012b20d701ac210001ac21d7012b2d00018149d701813500017916c80179270001564ed701562c00018122d7
+012b2200012b22d70000020001815dd7012b3f0001ac2bd7012b3c0022d7012b2100012b20d701ac210001ac21d7012b2c0001ac4bd70181340017c801a42600012b50d701812b00018122d7012b2200012b22d70000018160d7012b3d0001562cd701813c0022d7012b2100012b20d701ac210001ac21d7012b2a00012b
+4ed701813200014f18c8014f2400012b52d701ac2a00018122d7012b2200012b22d7000001ac61d7012b3c002ed73c0022d7012b2100012b20d701ac210001ac21d7012b2900015650d701813100019e18c80179240001ac53d701ac012b2800018122d7012b2200012b22d70000015662d7012b3a0001812ed701563b00
+22d7012b2100012b20d701ac210001ac21d7012b2800015652d701812f0001241ac82300018156d7012b2700018122d7012b2200012b22d70000010001ac62d7012b39002fd701813b0022d7012b2100012b20d701ac210001ac21d7012b2700015654d701812e00014f1ac8012b2100012b58d7012b2600018122d7012b
+2200012b22d700000100015662d701ac3800018130d73b0022d7012b2100012b20d701ac210001ac21d7012b2600015656d701562d0001791ac801792100018159d7012b2500018122d7012b2200012b22d70000020063d70181370031d701563a0022d7012b2100012b20d701ac210001ac21d7012b2500012b58d7012b
+2c001bc801a42000012b5bd7012b2400018122d7012b2200012b22d700000200018163d701563500018131d701ac3a0022d7012b2100012b20d701ac210001ac21d7012b250059d701ac2b00014f1cc801241f0001815bd701ac2400018122d7012b2200012b22d70000030064d7012b340033d7012b390022d7012b2100
+012b20d701ac210001ac21d7012b240001ac5ad701812a0001791cc8014f1e00012b5dd701812300018122d7012b2200012b22d700000300018163d701ac3300018133d70156390022d7012b2100012b20d701ac210001ac21d7012b230001815cd701562900019e1cc801791e0001812fd703ac2cd701812200018122d7
+012b2200012b22d70000040064d70156320034d701ac390022d7012b2100012b20d701ac210001ac21d7012b2200012b5ed7012b28001dc801a41e002cd70003ac562b00050000042b5681ac28d7012b2100018122d7012b2200012b22d700000400018164d73100015635d7012b380022d7012b2100012b20d701ac2100
+01ac21d7012b220001ac5ed701ac2700014f1ec801241c0001562ad701ac01560c00012b018126d701ac2100018122d7012b2200012b22d7000005002dd701ac04810256038101ac2cd70181300001ac35d70181380022d7012b2100012b20d701ac210001ac21d7012b2100018160d70156260001791ec8014f1c000181
+29d701811000012b018125d701812000018122d7012b2200012b22d700000500018126d70004ac81562b0e00015601812ad72f00015636d701ac380022d7012b2100012b20d701ac210001ac21d7012b2000012b62d72600019e1ec801791c0029d701561300012b01ac24d72000018122d7012b2200012b22d700000600
+22d70004ac81562b1500018128d701812e0001ac37d7012b370022d7012b2100012b20d701ac210001ac21d7012b200001ac62d7018125001fc8019e1b00012b28d701561600018123d701811f00018122d7012b2200012b22d70000060001811ed70003ac812b001a00012b01ac27d72d00012b38d70181370022d7012b
+2100012b20d701ac210001ac21d7012b1f00012b2bd701ac02810156052b0156028101ac2cd7012b2300012a20c81b00015627d701811800015623d7012b1e00018122d7012b2200012b22d7000007001bd70003ac562b001f00018126d701562c00018139d7370022d7012b2100012b20d701ac210001ac21d7012b1f00
+01ac28d70003ac812b000d0000032b81ac0029d701812300014f20c8012b1a00018126d701ac1a00012b22d701811e00018122d7012b2200012b22d700000700018118d70181012b2300015625d701812c003ad70156360022d7012b2100012b20d701ac210001ac21d7012b1e00012b27d701ac012b1300015629d7012b
+2200017920c8014f1a0001ac26d7012b1b00012b22d71e00018122d7012b2200012b22d70000080015d701ac01562700015625d72b0001563ad70181360022d7012b2100012b20d701ac210001ac21d7012b1e00018125d701ac012b1600012b01ac27d701812200019e20c801791a0026d701ac1d00012b21d701561d00
+018122d7012b2200012b22d700000800018112d70181012b2a00018124d701562a0001ac3bd7360022d7012b2100012b20d701ac210001ac21d7012b1d00012b25d701811a00018127d7220021c8019e1900012b26d7012b1e0001ac20d701811d00018122d7012b2200012b22d700000800012b10d701812e0024d70181
+2900012b3cd70156350022d7012b2100012b20d701ac210001ac21d7012b1d00015624d7012b1c0001ac26d70181210022c81900012b25d701ac1f0001ac21d71d00018122d7012b2200012b22d70000090001810cd701ac01563000018124d7290001813cd701ac350022d7012b2100012b20d701ac210001ac21d7012b
+1d0001ac22d701ac1f0001ac26d72000012b22c81900018125d701561f0001ac21d701561c00018122d7012b2200012b22d700000900012b0ad701ac0156330024d7012b280020d701811dd7012b340022d7012b2100012b20d701ac210001ac21d7012b1c00012b22d701812000012b26d701561f00014f22c8012b1800
+018125d7012b1f0001ac21d701811c00018122d7012b2200012b22d700000a00018108d701563500018123d70156270001561fd7018101561dd70156340022d7012b2100012b20d701ac210001ac21d7012b1c00015621d701812200018125d701ac1f00017922c8014f1800018125d7200001ac21d701ac1c00018122d7
+012b2200012b22d700000a00012b06d701813700018123d70181270001ac1fd70156012b1dd701ac340022d7012b2100012b20d701ac210001ac21d7012b1c0001ac21d7012b2200012b26d7012b1e00019e22c80179180001ac24d701ac200001ac22d71c00018122d7012b2200012b22d700000b00018103d701813900
+012b23d701ac2600012b20d7012b01001ed7012b330022d7012b2100012b20d701ac210001ac21d7012b1c0022d7012b230001ac25d701561e00019e22c8019e180001ac24d70181200001ac22d71c00018122d7012b2200012b22d700000b0000042bd7ac2b3a00012b24d72600015620d7020001ac1dd70181330022d7
+012b2100012b20d701ac210001ac21d7012b1b00012b22d7012b2300015625d701ac1e0023c8019e180001ac24d70156200001ac22d7012b1b00018122d7012b2200012b22d700000c00012b3c00012b24d7260001ac1fd701ac020001811dd701ac330022d7012b2100012b20d701ac210001ac21d7012b1b00015622d7
+012b240026d7012b1c00012424c8180001ac24d7012b200001ac22d7012b1b00018122d7012b2200012b22d700004900012b24d72500012b20d70181020001561ed70156320022d7012b2100012b20d701ac210001ac21d7012b1b00018122d7012b2400018125d701561c00012b24c8180001ac24d7012b200001ac22d7
+01561b00018122d7012b2200012b22d700004900015624d7012b2400018120d7012b0200012b1ed70181320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b2400015625d701ac1c00014f24c8012b170001ac24d7012b200001ac22d701811b00018122d7012b2200012b22d700004900018124d7
+012b240001ac20d704001fd7320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b250026d71c00017924c8012b170001ac24d7012b2000018122d701811b00018122d7012b2200012b22d70000490001ac24d7012b2300012b20d701ac040001ac1ed70156310022d7012b2100012b20d701ac2100
+01ac21d7012b1b0023d7012b250001ac25d701561b00017924c801791700018124d701562000018122d701811b00018122d7012b2200012b22d700004800012b25d7012b2300018120d70181040001811ed70181310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500018125d701811b00019e24c8
+01791700018124d701812000018122d701811b00018122d7012b2200012b22d700004800018125d7012b230001ac20d7012b040001811fd7310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500015625d701ac1b00019e24c801791700018124d701812000018122d701811b00018122d7012b2200
+012b22d700004700012b26d7012b2200012b21d70500012b1fd70156300022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500012b26d71b0025c8019e1700015624d701ac2000018122d701811b00018122d7012b2200012b22d70000470001ac26d7012b2200018120d701ac06001fd701ac300022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701561a0025c8019e1700012b25d72000018122d701811b00018122d7012b2200012b22d70000460001ac27d7012b220001ac20d70181060001ac1fd7012b2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701811a00
+26c8180025d7012b1f00018122d701811b00018122d7012b2200012b22d700004400012b01ac28d72200012b21d7012b060001811fd701812f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac25d701ac1900012b26c8180025d701811f00018122d701811b00018122d7012b2200012b22d7
+0000430001562ad72200018121d7070001561fd701ac2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8180001ac24d701ac1f00018122d701811b00018122d7012b2200012b22d700004100012b01ac2ad701ac220001ac20d701810700012b20d7012b2e0022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8012b1700018125d701561e00018122d701811b00018122d7012b2200012b22d700003f00015601ac2cd701812100012b21d70156080020d701812e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d7
+012b1800014f26c8012b1700015626d71e00018122d701811b00018122d7012b2200012b22d700003c00015601812fd701562100018121d7012b080001ac20d72e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701561800017926c8012b180026d701811d00018122d701811b000181
+22d7012b2200012b22d70000380000032b81ac0032d7012b210001ac21d70900018120d701562d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701811800017926c8012b180001ac26d701811c00018122d701811b00018122d7012b2200012b22d700003200022b028101ac36d72100
+012b21d701810900015620d701812d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800015627d701811b00018122d701811b00018122d7012b2200012b22d700002d0000042b5681ac3bd701812100018121d701560a0021d72d0022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800012b28d701ac012b1900015622d701811b00018122d7012b2200012b22d700002700022b028101ac40d70156210022d7012b0a0001ac20d701562c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800
+019e26c80179190001ac29d701ac012b1700012b22d701811b00018122d7012b2200012b22d70000230000035681ac0046d72100015621d701ac0b00018120d701812c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800019e26c80179190001562bd70003ac562b001400012b22d70181
+1b00018122d7012b2200012b22d7000020000156018149d701812100018121d701810b00012b21d72c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a0001ac2dd70004ac81562b1000012b22d701811b00018122d7012b2200012b22d700001d00012b01814cd7
+012b210022d701560c0021d701562b0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a00015633d702ac03810156082b015622d701811b00018122d7012b2200012b22d700001b00015601ac4dd701812100015622d70d0001ac20d701ac2b0022d7012b2100012b
+20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c8019e1b0001ac63d701811b00018122d7012b2200012b22d700001900015601ac4fd7012b2100018121d701810d00015621d7012b2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1b00
+015663d701811b00018122d7012b2200012b22d700001700012b01ac50d70181220022d701560d00012b21d701812a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1c0001ac62d701811b00018122d7012b2200012b22d700001500012b018152d72200015622d7
+0f0001ac20d701ac2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1c00012b62d701811b00018122d7012b2200012b22d700001400015653d701562200018121d701ac0f00018121d7012b290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2700
+27d70181170027c8019e1d00015661d701811b00018122d7012b2200012b22d700001300018153d70181230022d701560f00015621d70181290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1e00018160d701811b00018122d7012b2200012b22d700001100012b01ac
+53d701ac2300015622d7012b100022d7290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e1f0001ac5fd701811b00018122d7012b2200012b22d700001000015655d72400018121d701ac1100018121d70156280022d7012b2100012b20d701ac210001ac21d7012b
+1b0023d7012b270001ac26d701ac170027c8019e20005fd701811b00018122d7012b2200012b22d700000f00015655d7012b240022d701811100015621d70181280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2000012b5ed701811b00018122d7012b2200012b
+22d700000e00015655d7012b2400015622d70156120022d7280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2100012b01ac5cd701811b00018122d7012b2200012b22d700000d00015655d7012b2500018122d71300018121d70156270022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e230001ac5bd701811b00018122d7012b2200012b22d700000c00012b55d7012b260022d701811300015621d70181270022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e240001815ad70181
+1b00018122d7012b2200012b22d700000c0001ac53d701ac012b2600015622d701561300012b22d7012b260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2500015659d701811b00018122d7012b2200012b22d700000b00015653d701812800018122d7012b1400
+01ac21d70156260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170001a426c8019e2600012b01ac57d701811b00018122d7012b2200012b22d700000b0052d701ac012b290022d701ac1500015621d701ac260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+270027d701811700019e26c8019e2800015656d701811b00018122d7012b2200012b22d700000a00018150d701ac01562a00015622d701811500012b22d7012b250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2a00018154d701811b00018122d7012b2200012b
+22d700000a004fd701ac01562c00018122d7012b160001ac21d70181250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2b00012b018152d701811b00018122d7012b2200012b22d70000090001814dd701ac01562e0022d701ac1700018121d701ac250022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c801792d00012b018150d701811b00018122d7012b2200012b22d70000090001ac4ad70003ac812b002f00015622d701811700012b22d7012b240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700
+019e26c801793000015601814dd701811b00018122d7012b2200012b22d700000800015648d70003ac812b003200018122d70156180001ac21d70181240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c80179320000032b56ac004ad701811b00018122d7012b2200012b
+22d700000800018145d7000381562b00350023d71900018122d7240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179360000035681ac0046d701811b00018122d7012b2200012b22d70000080042d70003ac812b003800015622d701811900015622d70156230022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179390000042b5681ac42d701811b00018122d7012b2200012b22d700000700012b3ed70003ac812b003c00018122d701561a0022d70181230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d7
+1800017926c8014f3e00012b0156028101ac3cd701811b00018122d7012b2200012b22d70000070001813ad70003ac815600400023d7012b1a00018122d7230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d71800017926c8012b4500032b048105ac09d703ac22d701811b00018122d7
+012b2200012b22d70000070001ac36d70003ac8156004300015622d701ac1b00015622d70156220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c8012b5d0001ac21d701811b00018122d7012b2200012b22d70000070033d70004ac81562b4600018122d701811c00
+22d701ac220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701ac1800012b26c8012b5d0001ac21d701811b00018122d7012b2200012b22d700000600012b30d70003ac562b004a0023d7012b1c00018122d7012b210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+2600018126d701811800012b26c801245d0001ac21d701811b00018122d7012b2200012b22d70000060001562ed70181012b4c00015623d71d00015622d70156210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d701561800012b26c85e0001ac21d701811b00018122d7012b2200012b
+22d70000060001812bd701ac01564f00018122d701811e0022d701ac210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac26d7012b1800012426c85e0001ac21d701811b00018122d7012b2200012b22d70000060001812ad70181510023d701561e00018122d7012b200022d7012b21000156
+20d701ac210001ac21d7012b1b0023d7012b260027d71a0025c801a45e0001ac21d701811b00018122d7012b2200012b22d70000060001ac28d701ac012b5100015623d71f00015622d70181200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500012b26d701ac1a0025c8019e5e0001ac21d70181
+1b00018122d7012b2200012b22d70000060001ac27d701ac5300018122d701811f00012b22d701ac200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500015626d701811a00019e24c8019e5e0001ac21d701811b00018122d7012b2200012b22d70000060001ac27d7540023d70156200001ac22d7
+01561f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500018126d701811a00019e24c801795e0001ac21d701811b00018122d7012b2200015622d70000060027d701565300015623d7012b2000015622d701811f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b250001ac26d7
+012b1a00017924c801792800022b340022d701811b00018122d7012b2200018122d70000060026d701ac5400018122d701ac2100012b23d71f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400012b27d71b00017924c8014f28000003acd78100330022d701811b00018122d7012b2200018122d7
+0000060026d70181540023d70181220001ac22d701561e0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400018126d701ac1b00017924c8012b2700018103d701ac012b310022d701811b00018122d701812200018122d70000060026d7012b5300015623d7012b2200018122d701811e0022d7012b
+210001ac20d701ac210001ac21d7012b1b0023d7012b240001ac26d701811b00012b24c8012a2600012b06d701812f00012b22d701811b00018123d701ac210001ac22d70000060001ac25d7012b5300018123d72300012b23d71e0022d7012b210001ac21d70181200022d7012b1b0023d7012b2300015627d7012b1b00
+012b24c82700018108d701562d00015622d701811b00018124d701ac012b1f0001ac22d70000060001ac25d7540023d70181240001ac22d701561d0022d701ac210023d701ac1f0022d7012b1b0023d701ac230001ac27d71d0024c82600012b0ad701ac012b2b00018122d701811b00018126d701561e0023d700000600
+01ac25d75300015623d701562400018122d701ac1d0023d701ac012b1e00012b25d7012b1c00012b22d7012b1b0024d701ac2100015627d701811d0023c8019e260001ac0cd70181012b290001ac22d701811b00018127d701811c00015623d700000600018125d7012b5200018123d72500012b23d7012b1c0025d70156
+1d00015626d701811b00015622d7012b1b0025d701ac200028d701561d00019e22c80179250001810fd70181012b270023d7012b1b00018128d701ac012b1a00018123d700000600015625d70156520023d701ac260023d701561c0026d701811c00018127d701ac012b1900018122d71c0026d701ac1e0001ac28d71e00
+017922c80179250012d70181012b2400015623d7012b1b0001ac2ad70181190024d700000600012b25d701ac2e00012b02ac2000015623d701562600018122d701ac1c0028d701561a002ad70181180001ac22d71c0027d701ac012b1b00018128d701811e00017922c8014f2400018114d70181012b220001ac23d7012b
+1b0001ac2cd701561600015624d70000070026d7012b2b00015601ac03d7012b1f00018123d7012b2600015623d7012b1b0029d701ac012b170001562bd701ac01561500015623d71c0029d701561900018129d7012b1e00014f22c8012b2300012b17d70181012b1f00015624d7012b1b0001ac2dd701ac01561300012b
+25d70000070001ac25d701812900015601ac05d701ac1f0023d701ac280023d701811b002bd70181012b15002ed701ac0156130001ac23d71c002ad701811700018129d701ac1f00012a22c8240001ac19d701ac01561c00012b25d71c0001ac2fd701ac0156110001ac25d700000700018126d701562600018109d7012b
+1d00015623d701812800018122d701ac1b002dd70181012b120001ac30d701ac01561000018124d71c002bd701ac01561300012b01ac2ad70181200021c801a4230001561dd7018101561800012b26d71c0001ac32d70181012b0c00012b01ac26d700000700015627d7012b2200012b01810bd701ac1d0001ac23d7012b
+2800015623d701561900012b2fd70003ac812b000d00012b01ac34d7018101560b00012b01ac24d701ac1c002dd701ac01560f00012b01812cd72100019e20c80179230021d7000381562b001300018126d701ac1c0036d7000381562b000400022b018101ac27d701ac0000080028d701561e0000032b56ac000ed7012b
+1b00012b24d72a0023d701811900012b32d70003ac815600022b050000032b56ac0039d70003ac815600042b00035681ac0026d701ac1c002fd70003ac812b000a00015601812dd701812100017920c801792200018124d70004ac81562b0b0000032b56810028d701ac1c0068d701ac00000800018128d701811a000003
+2b56ac0011d701ac1b00015623d701812a00018123d71900012ba8d701811c0033d702ac048102ac30d7012b2100017920c8014f2100012b2bd708ac2cd701811c0068d701810000080001562ad70181150000032b81ac0015d7012b1a0001ac23d701562a00015623d701561800012ba8d701811c006ad701812200012b
+20c80124210001ac5fd701561b00012b68d70181000009002cd7000381562b000c0000042b5681ac19d701ac1900012b24d72b00012b23d7018118000181a8d701561c006ad7012b230020c82100015660d7012b1b00012b68d7012b0000090001812fd702ac038104ac20d7012b1800015623d701ac2c0001ac23d71800
+0181a8d7012b1c0069d70181240001a41ec8019e210060d701ac1c00018168d7012b00000900012b58d70181180001ac23d701562c00015623d7015617000181a8d71d0069d7012b240001791ec801792000018160d701811c00018168d7010000000a00018158d7012b1600012b24d7012b2c00012b23d701ac170001ac
+a7d701ac1d0068d701812500014f1ec8012b1f00012b61d7012b1c0001ac67d70181010000000a00012b58d701811600015623d701ac2e0001ac23d7012b160001aca7d701811d0067d701ac2600012a1ec8200001ac60d701ac1d0001ac67d70156010000000b00018158d7012b150001ac23d701812e00018123d70181
+1600a8d701561d0067d7012b27001dc8019e1f00015661d701811d0068d7012b010000000c0058d701811400012b24d701562e00012b23d701ac1500012ba8d71e0066d70181280001791cc801791f0062d71d00012b67d701ac020000000c00015658d7012b1300015624d7300001ac23d7012b14000156a7d701811e00
+65d701ac2900014f1cc8012b1e00018161d701811d00015667d70156020000000d00018157d70181130001ac23d701813000018123d7018114000181a7d701561e0065d7012b290001241cc81f00018161d7012b1d00018167d7012b020000000e0001ac57d7012b1100012b24d701563000012b24d7140001ac60d70181
+46d71f0064d701562b0001a41ac801792000012b01ac5ed701811e0001ac66d70181030000000e00012b57d701811100015624d7320024d70156130060d70003ac002b0044d701811f0063d701812c0001791ac8014f220001565cd701ac1f0067d7012b030000000f00015657d7012b100001ac23d701ac3200018123d7
+01811200012b60d7012b0200012b43d7200062d701ac2d00012b1ac80124240001815ad7012b1e00012b21d701ac018143d70181040000001000015656d701810f00012b24d701563200015624d7120001815fd701560400012b01ac40d70156200061d701ac2f0019c8019e2600012b018157d701561f00015621d70003
+8100560041d701ac050000001100015656d7012b0e00015624d7012b330024d70156110001ac21d701813cd70181070001ac3ed70181210060d701ac3000017918c8014f2800012b01ac54d701812000018121d701810200012b01ac3fd7012b050000001200015655d701810e0001ac23d701ac3400018123d701811000
+015622d7010001563ad70181090001813cd701ac22005fd701ac3100012b18c801242a00012b01ac51d70181210022d70181040001563dd70156060000001300015654d701560d00012b24d701813400015624d7012b0f0001ac21d701ac0200012b38d701810b0001813bd7012b22005ed701ac330001a416c801792d00
+012b01814ed701812100015622d7012b0500012b01ac3ad70181070000001400012b01ac50d701810f00015624d70156350024d701560e00012b22d70181040001ac35d701810d00015639d7012b23005dd701813400017916c8014f2f00012b01814bd701812200018122d70800015638d7018108000000160001814cd7
+01ac0156110001ac24d73600018123d701ac0e00018122d701560500018133d701810f00012b01ac36d7012b240001ac21d701ac39d701563500012416c83300015601ac47d70156230022d701ac0900012b01ac35d70181090000001700015649d701ac01561200012b24d701813600015624d7012b0e0000032b81ac00
+1fd7012b0600012b01ac30d701561200018133d701ac012b250001ac21d70156018136d701ac012b3700017914c801793500015601ac43d701ac012b2300012b01ac21d701810b00015601ac32d701560a0000001800012b018145d70181012b1400015624d701563600012b24d70181120000035681ac001ad701ac0900
+01812ed7012b1400012b01ac30d70181270001ac21d700038100560034d701813900012a14c83800012b018140d70181270000032b56ac001ed701560d0001812fd701ac012b0b0000001a00012b01ac41d70181012b160001ac24d7012b370001ac23d701ac150000032b56810017d701810a00012b01ac2ad701811800
+01562dd701ac0156280001ac21d701810200012b01ac30d701ac012b3b00019e12c801793b00015601ac3bd701ac012b2c0000035681ac001ad70f00012b01812cd701810d0000001c00015601ac3cd7018101561800012b24d701ac3800015624d7012b180000032b81ac0013d7012b0c00012b01ac26d701ac012b1b00
+01812ad701812a0001ac21d70181040001812ed701563d00012a12c83e0000032b56ac0036d701ac012b310000032b56ac0016d701811100012b018128d701ac012b0e0000001e00015601ac37d70003ac562b001b00022b0156028102ac1dd701813800012b24d701811c0000035681ac000ed701ac0f00012b01ac22d7
+01ac01561f00018101ac25d701812c0001ac21d701ac0500012b01ac2ad701814000017910c80179410000032b81ac0031d70181012b370000035681ac0012d7012b1400018101ac23d701ac012b100000002000012b018132d70003ac562b002700022b0156028102ac14d7012b390001ac24d71f0000032b5681000bd7
+0156110000032b81ac001dd701ac015623000156018120d7018101562e0001ac21d701ac0700015601ac25d701ac015643000fc8019e450000032b5681002bd701ac01563d0000032b56ac000ed701ac170000032b81ac001ed70181012b120000002300015601812bd70003ac8156003400012b0156028102ac0bd701ac
+820000032b81ac0006d701ac150000032b81ac0017d70003ac562b002800015601811ad701810156310001ac21d701ac0900012b018120d70003ac812b004500014f0ec8012a490000032b81ac0024d7000381562b00430000035681ac000ad701561a0000032b81ac0018d70181015615000000260000035681ac0023d7
+0004ac81562b3f00022b0156028102ac02d70181860000035681ac0002d70156180000042b5681ac0fd70003ac8156002f0000042b5681ac10d70004ac81562b340001ac21d701ac0c00015601811ad70003ac812b00490001790cc8014f4e0000032b56810002ac19d70004ac81562b4a0000032b56ac0006d701ac1f00
+00042b5681ac0ed701ac0281012b180000002a00012b028101ac18d702ac000381562b004d00012b8900012b01561f00032b01560481032b3a00032b015604810156032b3a0001ac21d701ac0f0000042b5681ac10d70004ac81562b4e0001790ac801795500022b015603810bac03810156012b540000035681ac0002d7
+01562500032b015603810156032b1d0000003000022b048107ac04810156022bff008b0001ac21d701ac15000c2b5500017908c8014fc300012b01564e000000ff00cf0001ac21d701ac7700012b019e04c80179012aff0015000000ff00cf0001ac21d701ac7a00022bff0018000000ff00cf0001ac21d701acff009400
+0000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff00
+94000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701ac7a000207ff0018000000ff00cf0001ac21d701ac750000030809100006110003
+10090800ff0013000000ff00cf0001ac21d701ac7200010101090e1101090101ff0010000000ff00cf0001ac21d701ac7100010912110109ff000f000000ff00cf0001ac21d701ac6f0001010110141101100101ff000d000000ff00cf0022d701ac6e00010118110108ff000c000000ff00cf0022d701ac6d0001011a11
+0108ff000b000000ff00cf0022d701ac6d001c110101ff000a000000ff00cf0022d701ac6c0001101c110110ff000a000000ff00cf0022d701ac6b0001081e110109ff0009000000ff00cf0022d701ac6b0020110101ff0008000000ff00cf0022d701ac6a00010920110109ff0008000000ff00cf0022d701ac6a000110
+21110101ff0007000000ff00cf0022d701ac6900010722110108ff0007000000ff00ce00012b22d701ac6900010922110109ff0007000000ff00ce00012b22d701ac690001102311ff0007000000ff00ce00012b22d701ac69002411ff0007000000ff00ce00012b22d701ac690024110107ff0006000000ff00ce000156
+22d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110101ff0006000000ff00ce0001ac22d701ac690001102311ff0007000000ff00ce0001ac22d701ac6900010922110110ff000700
+0000ff00ce0023d701ac6900010822110109ff0007000000ff00cd00012b23d701816a0022110101ff0007000000ff00cd00015623d701816a00010920110110ff0008000000ff00cd00018123d701816b0020110108ff0008000000ff00cd0001ac23d701816b0001091e110110ff0009000000ff00cd0024d701816c00
+01101d110101ff0009000000ff00cd0024d7012b6c0001011c110108ff000a000000ff00ce0000032b81ac0020d7012b6d0001011a110109ff000b000000ff00d20000042b5681ac1bd7012b6e00010118110109ff000c000000ff00d60000042b5681ac17d770000101011015110109ff000d000000ff00db0000032b81
+ac0013d772000109121101100107ff000e000000ff00df0000032b5681000fd77300010101090e1101100109ff0010000000ff00e30000042b5681ac09d701ac760001080110091101090108ff0012000000ff00e80000035681ac0005d701ac7900010105070101ff0015000000ff00ec0000052b81acd78100ff009500
+000000010000000000000000000000000000000000000000000000000000000001050000050000000d0000004d45544146494c455049435400085d000044e6fffff06f03000800085dbc190000
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00
+fefefe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefecb0098653200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000040302020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000504020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020600000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000004020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+030303030604040404040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020203030306040404040404040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020203060405050000000000000000000000000000000000000005050404060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040505
+05000000000000000005050505040406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0d020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202030404050000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e
+0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000406030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303
+030303030303030303030303030303020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000506030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202
+020202020202020202020303030303030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202
+020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000005000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020206000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020204000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020203060405000000000000000000000000000000000000000000000000000000
+000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202030400000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504040404060604040405000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+0202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000000000000000000000000000000000000000000000000000000000000000000000000504060302020202020202020202020202020604
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+0202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020203000000000000000000000000
+000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000050403020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406030303030306040405000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000
+000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202
+0202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202
+020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020300000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202
+02020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000050602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020203000000000000000000000506020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+040000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202
+020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202030000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020400000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000030200000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020d0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020203020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000005020204000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000302020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+000000000000000004020206000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202
+020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202050000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000302020202040000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+0202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000202020202030000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000000005020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000050202020202020000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+0000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020300000000000000000000000000
+000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202
+020202020200000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000030202020202020400000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000020202020202020600000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000006020202020202020200000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000003020202020202020205000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020206000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f
+020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020203030404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020203000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202040000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000
+000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+050406030202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202060500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020202020000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000602020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+000003020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030303040404040505050505000000000000000000050505000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000502020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+0202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+0000000000000006020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+0000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000
+000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+0202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202050004020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+0000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020202020202
+020204000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202
+020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020206000000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000004
+030202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030505020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020400
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000
+000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000
+000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020600000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000050202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202
+020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000
+000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000302020202020202020202020202020202020202020202
+020202020202020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050602020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020305000000000000000000000000
+000000000000000000000000000000000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000502020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202030500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040602020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060302020202
+030304050000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202030605
+000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040603030202020202030605000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030303030604050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000005040603
+020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202030605000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040405050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000005050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000406030202020202020202020202020306040500000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040505050500000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202
+020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202
+020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000002
+020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000502030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000030202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000302020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000400
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202030500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000602020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+000000000000000000000000000000000000000502020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202030500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050602020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202020202020305000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000060202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020206
+050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202060405000000000000000000000000000000000000000000000000000005020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000
+000000000006020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000004020202
+020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+0302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+000000000000000000000000000000000000000000000002020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000
+000000000000000000000000000003020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020204000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202020206040500000000000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020204050000000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202030500000000000000000000
+000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000302020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020202020202
+020202020202020203030604040505000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020203060400000000000000000000000602020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202
+020202020202020202020604000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000000000050202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000
+000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060404050500000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000050202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000050603020202020202020202
+020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020304000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202030405000000
+000000000000000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303060404050500000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000
+000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000005020202020202020202020202020202
+020202020202020202020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040405000000000000000000000000000000000000
+000000000000050504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306020202020202020202020202020202020202020202020202
+020202020202020303030604040404030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030604040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203030604040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405
+000006020202020202020202020202020202020202020202020202020202020202020202020202020303030604040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203030404040405050505050505040404040603030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020303030303030303030303030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202030602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f1002020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090c0a0b0b0b0b0b0b0a0c090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040500000000000000000000000000000000000000020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0a0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020306040500000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090a0b0b0b0b0b0b0b0b0b0c0902020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060405000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020708080808080702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}{\result {\insrsid2387180 {\*\bkmkstart OLE_LINK4}{\nonshppict
+{\pict\picscalex10\picscaley10\piccropl0\piccropr0\piccropt0\piccropb0\picw23816\pich6588\picwgoal13502\pichgoal3735\wmetafile8\bliptag-1424617728\blipupi95{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900
+840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00fefe
+fe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefe
+cb009865320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202040000000000000000040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000506020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000504020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000506
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400
+00000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203050000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020200000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000005
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030306040404
+04040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f1202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020303030604040404040404040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040505000000000000
+00000000000000000000000000050504040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f0202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000
+00000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202030304040405050500000000000000000505050504040603020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e
+0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203040500000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020203040405000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e
+0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000040603020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030303030303030303030303030303
+03030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303
+03030303030303030302020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303
+03030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506030202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030303030303030303
+03030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020203030303
+03030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020206040000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202030405000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202030400000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020206050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020605
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202
+02020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102
+02020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020600000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020400000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020204
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506030202020202030604050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020203
+04000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040404040606040404050000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202
+02020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202020304000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202060400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202
+0202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202
+02020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+02020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+00000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202040000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202
+03050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406
+03030303030604040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+02020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000030202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020200000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000050403
+02020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+0202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000005
+03020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e1102020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+00000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020200000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000050202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202040000000000000000000000000000000000000403020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000060202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+00000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+00000000000000020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000402020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+0000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202040000000000000000000000000506020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000002020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020300000000000000000000050602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000060202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+00000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202040000000000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020300000000000004020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+00000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000
+0000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202040000000402020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+00000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020300000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020206
+00000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202030202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000050202040000000000000000000000000000000000000000000000000000
+00000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020206000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202
+02020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+02020202020300000000000000000000000000000000000000000000000000000000000000000402020600000000000000000000000000000000000000000000
+00000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202
+0202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206
+00000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000020202020000000000000000000000000000
+00000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202
+020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020205000000000000000000
+00000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000004
+0202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0f020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000003020202020400
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000050202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0f0202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000020202
+02020300000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000502020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+05020202020202000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+0000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000
+00000000020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000302020202020204000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+0000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000
+00000000000000000000000000000000000000060202020202020202000000000000000000000000000000000000000000000000000000000000000004020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202110e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020400
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020500000000000000000000000000000000000000000000000000000000000000
+00020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020f0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020400000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020203000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+0202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000060202020202020202020200000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+02020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+02020202020202060000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202
+0202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+06030202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000004020202020202020202020203000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005040603020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000
+00000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0f0202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+0000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020605000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000006020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020206000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000005020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+0000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+00000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+00000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205
+00000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020600000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202
+02020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+02020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+02020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202
+02020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202
+02020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+0000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+0000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000002
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000004020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000
+0000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202030604040500000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000030202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020203030304040404050505050500000000000000000005050500
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+00000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+0202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020600000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202
+02020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020204
+00000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202060000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+06000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+02020206000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000
+00000000000000000000020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+00000000000000000000000000000202020202020000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+0000000000000000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020500040202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+00000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000
+000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202020202020202020202020202020400000005030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000030202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+0000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+00000000000000000000000000000000000000000000000000000202020202020500000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020204
+00000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000006020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000000020202020202050000000000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+0000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000
+00000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020203050502020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000
+00000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202
+02020202020202020202020202020202040000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202
+02020202020202020205000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000202020202020200000000000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202
+06000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060500000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202
+02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000050602020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00050602020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000030202020202020202020202020202020202020202020202020202020202060000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202
+02020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+0202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000406020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000403020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020202030400000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202
+02020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202
+02020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202
+02020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004
+06030202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004060302020202030304050000000000000000000000000000000000000000000000000000000000000000000000000000
+00050202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+02020202020202020202020202020202020306050000000000000000000000000000030202020202020202020202020202020202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406
+03030202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000005040603030303060405000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+04030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000000005040603020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020203060500000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050504040404050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e1102020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000050505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000602020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000004060302020202020202020202020203060405000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000505040404050505050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000005020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000020202020202020202020204000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000000502020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+0202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202
+02020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020203000000000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202
+02020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000
+00000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502030000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202
+02020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000006020202020305000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202
+02020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402060000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020206000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202
+02020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000004020203
+05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000020600000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202040000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+04020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000006020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000004020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00000006020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000
+00000000000000050202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000006020202020204
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+00000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202
+02020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000000006040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050302020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202
+02020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000000040202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000
+05020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000
+00000000000000000000000000000000000000060202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020203060400000000000000000000000000000000000000
+00000000040202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000506020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+00000000000000000000000000000402020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020304000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020605
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000502020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000000000000000
+00000000000000000302020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000050302
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000004020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000
+00000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603
+02020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202060405000000
+00000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005
+06020202020202020202020202020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000
+00000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000050202020202030500000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206040500000000000000000000000000000000000003020202020202020202020202020202020202020204050000000000000000000000
+00000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+03020202020202020202020202020202020202020202020202020202020202020202020202020202030306040405050000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+02030604000000000000000000000006020202020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000
+00050602020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000
+00000000000000000406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000502020202020202060500000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202030605000000000000000000000000000005020202020202020202020202020202020202020202020203040500000000
+00000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504
+06020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040405050000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020203040500000000000005020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000
+00000506030202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000
+00000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202030400000000000000000000000000000000000000000000
+00000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000
+00000000000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202
+03040500000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000504
+06030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030306040405050000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+00000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000
+00000000000000000504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000
+00000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000
+00000000000000000000000000000000000504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030605000000000000050202020202020202020202020202020202020202020202
+02020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020304040500000000000000000000000000000000000000000000000005050406
+03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020203060202020202020202020202020202020202020202020202020202020202020203030306040404
+04030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303
+03060404040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020203060405000000000000
+00000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030306
+04040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020206040500000602020202020202020202020202020202020202
+02020202020202020202020202020202020203030306040404060303030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040405050505050505040404040603030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+03030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f10020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020808020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202090c0a0b0b0b0b0b0b0a0c09020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0a0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b02020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+08020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b080202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b08020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030405000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020306040500000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0c02
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000050202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090a0b0b0b0b0b0b0b0b0b0c
+09020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000
+00050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020708080808
+08070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030405000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}}{\*\bkmkend OLE_LINK4}}}}}{\insrsid2387180 
+
+\par }}\dpx8136\dpy0\dpxsize1296\dpysize358\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}}{\scaps0\insrsid2387180 
+\par }{\field{\*\fldinst {\insrsid2387180  REF DocTitle  \\* MERGEFORMAT }}{\fldrslt {\insrsid9137866 <Unit/Component/Component Integration Name> Test Specification}}}{\insrsid2387180 
+\par }\pard \s15\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw15\brsp20 \tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\field{\*\fldinst {\insrsid2387180  REF DocRef  \\* MERGEFORMAT }}{\fldrslt {\insrsid9137866 <SXX.XXXnnn.nnn>}}}{
+\insrsid2387180 \tab }{\field{\*\fldinst {\insrsid2387180  REF Securityclass  \\* MERGEFORMAT }}{\fldrslt {\insrsid9137866 <Security Classification>}}}{\insrsid2387180 \tab }{\field{\*\fldinst {\insrsid2387180  REF status  \\* MERGEFORMAT }}{\fldrslt {
+\insrsid9137866 <Draft>}}}{\insrsid2387180  Rev }{\field{\*\fldinst {\insrsid2387180  REF version  \\* MERGEFORMAT }}{\fldrslt {\insrsid9137866 <X.X>}}}{\insrsid2387180 
+\par }\pard \s15\ql \li0\ri0\widctlpar\tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\insrsid2387180 
+\par 
+\par }\pard \s15\ql \li0\ri0\widctlpar\tx0\tqc\tx4680\tqr\tx9360\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\scaps0\insrsid2387180 \tab \tab }{\insrsid2387180 
+\par }}{\footer \pard\plain \s16\qj \li0\ri0\sa120\widctlpar\brdrt\brdrs\brdrw15\brsp120 \tqc\tx4950\tqc\tx9000\tqc\tx9090\tqr\tx10490\aspalpha\aspnum\faauto\adjustright\rin0\lin0\rtlgutter\itap0 
+\scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid2387180 \'a9 Copyright Symbian Ltd. }{\field{\*\fldinst {\insrsid2387180  DATE \\@ "yyyy" }}{\fldrslt {\lang1024\langfe1024\noproof\insrsid14837579 2004}}}{\insrsid2387180 \tab }
+{\field{\*\fldinst {\insrsid2387180  REF Securityclass  \\* MERGEFORMAT }}{\fldrslt {\insrsid9137866 <Security Classification>}}}{\insrsid2387180 \tab Page }{\field{\*\fldinst {\cs18\insrsid2387180  PAGE }}{\fldrslt {
+\cs18\lang1024\langfe1024\noproof\insrsid14837579 8}}}{\cs18\insrsid2387180  of }{\field{\*\fldinst {\cs18\insrsid2387180  NUMPAGES }}{\fldrslt {\cs18\lang1024\langfe1024\noproof\insrsid9137866 8}}}{\insrsid2387180 \tab \tab 
+\par }}{\headerf \pard\plain \s15\ql \li0\ri0\widctlpar\tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid2387180 
+{\shp{\*\shpinst\shpleft5832\shptop720\shpright9288\shpbottom1675\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr1\shpwrk0\shpfblwtxt0\shpz1\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn hspNext}{\sv 1026}}{\sp{\sn pib}{\sv {\pict\picscalex26\picscaley26\piccropl0\piccropr0\piccropt0\piccropb0\picw23816\pich6588\picwgoal13502\pichgoal3735\pngblip\bliptag-1424617728{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}
+89504e470d0a1a0a0000000d4948445200000384000000f9080300000048c40b8b0000000467414d410000b1889598f4a600000300504c5445ffffffffffccff
+ff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff66
+00ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99
+cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc
+00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999
+669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff
+66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc66669966666666
+66336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cc
+cc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc333399333366333333
+3333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc00
+99990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc0000990000660000330000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199e9ab4000000
+097048597300000ec300000ec401882e3ea30000194449444154789ced9dbb951b391045296b579e360759ea60e43117994c44964c06a20c269d9de67048361b
+40bdfaa13f7cd7d2391a0255001e50f8347038905761389ddf4e4b1b41c8ab727c17e0c879310bbefc33f265b1fc09598ee153800b8af0df6fff7df2f5df654c
+206419de05f836650123be7cfd6fc2b7af0b1841c8020c0f03e092227c92e04586fff4378390ae4c22d06545f8e5db5c836350dadb0e42fad110e0c8d0d79a2f
+4509528564b79423d0054558d5205548f68924c0ee226c68f0bfffb84a4a760822c2aebbf5e5f9e027dc3324fb438c453b8bb0b02efac8b78ea610d287e73dc1
+a545d8d6200352b2438eeb12a130107228243b64589708250d725648760820c27e8747ff9545c86d0ab23b8095997e2214a351c6a36487ac4a84edfd890fba19
+43482780e5d17e220434c84921d91d9b1321bfa6207b8322246461808d428a90904c808d428a90904c3627c26ec610d2895589905b14e41559950881cd7a9e98
+21fb634d22fc4716213fa320fb634d2204e251eed593fdb12a118af128a351b243562542717d940321d921eb12a1f031130742b247d625c2f6ac90df31915db2
+321136035206a36497ac4d848d8b47b93d41f6c9da445857213548768afc697def070acb0fc27c632c4af6cafa4458dc2ee4ba28d92f6b14e1ec91d0af1c06c9
+8e59a508dff9f7eb352afdc6d7b2c9ce59ab082ffcc34f78c90bb06a1112f20a5084842c0c4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842c0c
+4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842cccaa45380ccbe54d482fd62bc2e1f7df777efd5828fb7d310ca777ce1f8cff3cb2835b0f5611
+0e0fa418f6ebef959f29c9f765382e97f5bbf6aa557b7e17636c6ea1a979108bfcbde11ec7eec8d5803f1339ba52d18bf03dd7d98fc22bf3aec1f7c13036e52b
+1fa577be7329ca8c9c2ee585a9f05aa7be2a7dca59ae60bfdf17b3cfef999d22ccf6d32ef2420b7e2f0365169132508af0786a55665c1b7ed060f85838165fdd
+edd8fe64389e0ba55831ead9105f79b6aaaae4b5258f4fed951bcb320ca766910fd58ee98c577cab6c0d25a911e120566b940e7ffe9d10372fac57c1534146f8
+31d155a36a1a46d9b4815455a1f260a78799f86ed8cb0daa18c9b0893ae6652755ff19296eb977d3d61a2ec223544a981f12530dfefd1d90e4730d25fb313c17
+576d8c10bb0543bf065655c9e956660dedddad551bfb9938625f33f5792cf19c05502c62b563bdb8ae1c5011220e980c28f1eb498401d34270089cfa61edd68b
+73b16262d8a44d678759821f4ed7a752c8cfcdf1e81149bd5a10e5ea9dfc39da829ba5ade8c6152a902d3b29331ff18d223f9e35f8f7af2bbdf9b084a26cfecd
+bce69582c78c0a3b34bd65855ae703a56cedb8a0dea8ec7135c27928f2904104ea28eed6c22a8044a8af5843ebbdf37b2e42cf50e81a19748e3497239ffe5637
+6d03fb55cb5cb0945bd16ba80d5a27b19059059b5a257e17adb2588aeeeb55800e868808751d80d280398581d03e14fa5b25ea8838dc4e9ba7d62ea83730d554
+39bb8298fcd336a7e54f45204f31ae3fd0cba7e0bda521815db86c9e6a39436fc09cd98cd03e14faa6471a47807a7e6c9e16c3e431266618bc529061c402a6c3
+f4b3fa274773b13cf725d6281f1201b03063cbfdcd1a997c2f69d0341486481075444ee561afc7669830c804cc06850c13e35143cac0c07c7120a2b0ed2106a2
+4273e208a6d0a43810ea77ec836647b02340769f7f6aaed1f60abd35d516d3769f178f9ad646a1957dc866c90f4f5b0254e8481dc0b260fda72c425d3c1a2ac1
+37a46501cde8a33a3c0356c38c140d3e67685fc21440aa6be63ce0b2a7584e2aebaa00e5e1493ec6822786b206fffefdae48233c30035408a6e1134b35d6cbd1
+e07337eedbcc73155ec977601e8e245cfd319c0d948ccf7b0f6a1556a251453c9a20c137a028e5fa366df63c5169e1491a9c2d4f203f324c0a21f32d45eee3e2
+89bf39890512616b13ad0a6b1a44cfae4507a237a4a2941b9271b36742b938933438977c523c6a8a461df33d9421260fc9fd802c047475528d46c17834b17314
+c22cb9b6ce11c69546e4acc638cfcb38644920a9963a419f7b32e798a295a2a8883c9c264ca846a3503c9a35225c907a93ccbc1f28f40529f17731ab9c78144a
+b5f4c32cc76f04f5e92b68399a4aa9ac8d8e88eba33993c13b426f92de226a56648dfe257f1127d59b14c668347f521885a0802e36e0eb65959dfa0f02aa32d3
+8f5e2de2d98ab4e1bfe46e4a3c8a28db7e9a750508dd52171bf069e1cf9608052de78ba05d96bd5ac473b79a954fd1db8c781449b3f20185d3c56eb40ba08f0d
+7080d29812caf168be1fcdec7bb508fd114a1be53e2f211e3547a3dde6e16edadd522723d080b4a5417193227f286ab7aef4ecaf4cbf55cdcaa5e22b52c8ca4d
+0a7334da6d1eee66150d07ac96e2574cf0a430bf4ada6ef46a11936eb5f34088895e7568c61e8d6e4784ed86d3cb0a2c42694e09c549618780b06941af16f158
+96bd0742cc4bd5a410195b6b096e6579b43d91e96605d43936a784c026457a9d34fb926e2dc291e7e57ed5f19a55e90fabf5151e8f22aa5ebcc8bd349b7f372b
+a0a1b0b14b884c0a173e0adbad453cd4a8e6674f173996aeafbd5177d4bcb3ee48afda783623c2666cd0cf0c64286c6b10f8b2377d6da679256076e6732314fe
+961b72ed8a88869fc1f1a8271addce1e45730c5a8919d7229544281f1fcd9e97b55a57b71661f8d2ad51faa5cb715a233ea21ac52605e2c2f245ee255a841fcf
+fac8b38a67e4a150981222c74735b5f2f90a85c68955f46827758ec2c834d3a17bc0172b4ae342bdd00d223cdf5ea432df84f999cad08ce8a77fef2c8269de0f
+d5a3bc024aee1d4511029fd743363d3d38a1b89b3bb230cddc8c40a351602a30f904ccbf15833feb002456ef42b4227c7ea7c176dc7872413296445cbb995dc0
+a5fb784fac90c285a36a11ca1e951f9a003d4910e1d59e01bf24fc660468343843bba7d69650683c0ab8d02a73ac003e8d8af802657e0b1d540bad3270e57e08
+be1e5fd2e0df3f520a07a989386f796f17a6a15b9db60bb4347519e213b46b7c16f0d116bc49e1b41f2a806b32e5ae4591c25b45049e4d169d09b5a2c00743a9
+6284f33223420a4291b42f26c75468cb19b6074be2f3afb16c34e7572e32947e805439982932aab692c24ae0ad717bac6641bdd28090245a8500e75f6fbfb80a
+858a11cecb8c40f7f0567217df77715f63a4136139b2807eaafa63e549cee12cfec0378f9be08c462356a6d0247ca788029c8879aa46888bc47519f0b6a7a23d
+c8134bde150795082bcd42f3c11ed689273cd50de40a4adf6b3f540231079d1a1a505c3a6b77422851b8f1b593014488dd3e3acf187be5cc1b1b85cc8f15e588
+359f8437c05d7b7b8f2063b9ffc457bb1b02e3d19690e14b671d4e88bd1ae686541ae2e2282ac2e736023f3408b8101212b4020b4503d74d2003098b47bdd128
+3426bb6fe81a69260224e115a11c59a093db763c2a6b10bdf770d23a156f7d02adbae5022a42f775f6b8b96f2922f4ae69de003cf07e0f2bb75ec019ff7ab153
+8448748f0662cd44001182efc23cf44caac7a100150588d07fedcff52fb1524f0847a3e25164106aa710e1beee41ad04338052887c18af791c2a4e84f746a25b
+9500dc708b50ec15f0a53624bb1c117a67cf579c9ddea19308e56148aeb30e224487c256914222fc811873eb62b597efa1af6d55303cb257205a84f6e75a1bc4
+e4eb8e4643442856db56441870ea0b581cc5360a3fed313c532a7be01461e8236bf21f8e989e490a3052ced71f8d52848fa027691b494022849f85399b4600d9
+01a708636234d8da0b091b8531f1a833fa1f09b0623f2244e3d146629008e1670a07d3544876604d220c590e3302642b8adf1f8d52843a4f3e68b461609bd0fa
+763d8c6fa12c4684c8db97a8b51f6404a401a137103d05ec50bf9208fde70e2011821b8556d62042a06dc2d65e31cc8e25bc8796b12492f7063ed88f08c14961
+c31f448314e1053c3fc46c1b40a6422c19515c0149c89dc1664488ae12d4138044887c51e860b722143ee332d0638f2fe2b48b5ce262816f4784de9599e6834c
+773063ac6c4b84cabbe514e7f700dcf1289080dc71c869bc9408bd67b6a0bd7a8af002fe9753cec59b3d8c00f935730b29ad88345e4f84d5460c8a107a34dbcc
+b64468ba2baf7cc58e016f3c0ad82a1b2127f252220463a3aa43a008334e42ded998088d57f69deb37ed28002adc797d2960a59cc84b89d0bb3c0aedd5538417
+1419d6081022908befbbc9101b28c202b5df7715e1300ca7ebcb28f7f283ee015e95089d17503fdfc2a90470d775b50bb2ad22a7421116a8fd1e14217c78b462
+e5f1045fef596455220cb86ed82144d7667b4c344a11ea936a25078ad07e6e0dbfb3bcc5ba4418f32a9175ad0648da5356312650848ae472451822c091758930
+ec152ad380e88947033e671f912da00815c94147474d22f43cfc31635d228c7c854aaf43473ceabc1ae94644322f28c25ab5648950f96c8dd5fc91054418eb9c
+f66c1b90a2b9a8b04f3f640b28c2025d45a87bb1c663fec802228c7e094a2743bbc341d12845a84f6ac42942cd6714f1125c9f08c35dd4c8d01c8f4645a314a1
+3ea9917e224c79d07c6d224c781451f1f5219058f177b27ac3aed1a7080bf41261d2f3f5ab1361869f91af0b163d961b2d381e1bf39fb027113a1f0efe132a42
+db13ac00ab1361e402e90d7430346eb98745a314a1da90a64798064111260d836f6b14a1f3ec9addd01139a15281c9d5838ec5118e508437224598321bfc607d
+224cea71c2eef732fd0a5d1d8af08322bc1128c2ac50746485225c5285b67854fe119237961245a8f0284c8469d3c10b6b14e1922a94939997585c344a11aa0d
+697a1425c29c29d28d558a304985b2adb6a32f71d12845a836a4e9519408312bccac538439c33fb2576779a456fe0990319a1445a8f0284884a9b1e8db6a4598
+b31815f359edf3b016188d5284faa4466a051c23c2c475d1b6f960e679224c094981b0501f8fcabf883cb2431116481561defea064fec8b2224c392a2b9b8b3f
+9df149c0a39c37e4cc29c20299224c5e9469993fb2b00833668640602827321d4f65ff1477f6cb9953840532cf8e664f081be68f2c2ec2f77129ba08648365af
+a765260f9d8a8f8b231ca0086f0488303f185dbd08c365288f4ada7834321aa508f549b5920b1061878170fd228c9e1bca16cb691c557faef9ae38c27e8af086
+ffcb7acb40783e9f4ea7e370c5f962de4a447808bdd3431e0a75f1a8ec9e5c447764fb294245727e11ea06c2d2a30c40fbdf86080f81f7cbc93989493cb662b1
+90544f29cae65384056a3f778b503310569e27da93082f490dceab8e4782df2713ed51dd72a3caba564a521214212c42bcb5553f59dd9b08af09fa06c58878f4
+4158b1cec9e6bf94083b3d08531521bc47d8f86a7c3773c242aaf64131c0e27ba98945ac7bd85bb69e225438e415211a8d3a55b455115ed3b60851b6594e142f
+23ddd5a711d6bf9e08ab8dd8fb2a13d8ba9a1dedee4538a25e399565a1380d2a5693ce19d9fa9712213812556bd42b422cfb76b0f312223c6837f4e5005136f9
+56edfecc26c8d6bf9408c1feb59ada4f9f08c13ec0edc32e44a83b650a9c601153fb2c36d139c591b511d97a8a704ebd287c22c4b21722abd711a16a47474e4c
+f61ccc5573646d44369e229c532f0a4c84f66278934bf39544a8180c236cbe3a2e1591321aa508b576b4fd718a10ca5daae2971221beb30a188dc6a3d2df29a3
+518a509dd25bb30d7710a1e4ca8b8910552160b4e8fab521637f851361fccb89b03129833458fb8802db20917c78351182db4a2146437fa67c1f9122547af241
+23059708a16506b1305f4d84e0441e690162331c90fcd40e4418bf1f11628b6d2d77a0c3a3b50333506b1267fd2f2742aceb445a00f67184f057da65198a700a
+d6a7b64a9922fca0a708b15921d202b0962c64a78e462942a51923ad52868eccb84428d6f1eb89102a37a80540e7d1c2fd8a307e711102dac14428a733d24a01
+1261cd98981efdf54408cd22a016203a3f88aee9a3518af011ff94103bb7962b4220959d89109a14c6a474125b893e1add870863da4dc8a93168b7de5e0a8827
+402a2d17167a24544ed29519aa79a9f0ce5201a937090f3b11a1e53d0f5b6188497ddf8408f37b34a50807f86d6b6366a808c5a62495af211add8708835e0f0f
+8846a18dc2ea85879008c570678b221c33b5345f38337484023e907097cd0cd9fa0d8830c48b88b5d103b447e113a1d85681545a3f5f428403e89add64386da9
+f48e6dcf2cd1e84e44e8fc39e806941220c2eae516211f516c5184b73c0dab1a98c970ca5238746aff81c901d9fa2d8830e4b1386c5946f205d8a3f8e9b340f2
+432ecba60f0b88f0e18fcf96562ce7a50813a584dae5639ad94658bfbc089db7fca1698c488d04d8a3a8ba127308522e4bef1535d1229c64a99721546cb1a9d5
+3045a33b112112824946805fc48885218bb0fadb900feb01479a29f417e1ec6fc3af68d124e97a99ce164ecbe96e4284fe331311f79c5d708810ab7f7f6fd2fc
+797f1116723c29c2ba98c37e773c770ce3b93c22a7bb091162cdb7a1203408113d9145587f9229666908beafc85c12c1222cfe2f1c95621b4b60627882458ccb
+bb72c29b1021baaa524905bea90428657179b4f11a0c6644bb381537f715e92ec26a86d070884926f87d961ab6687437224423f9a20cf1be0f6816e2f2687571
+34e4a606f7a1cdee226cfc49e5c91b9db5232a75d8976634b93c2027bc0d11e291fcf9a983d55caa8e74a8e2f268c313b0fa1be5e95f27ee2d4221bfe7ea9ae6
+82569d6cb0cef632d6c30672ca1b11a1a6e4ce9f4f6a1e95ef8b20f1d10f49848ddfba9fa24012f007f6a12294ffb0f408236aea074a75589766acc75f23525e
+85087b3c338dd5a5a0c1d653d9704f5209af22ce6f7516213af8cf84a8798d42b6779a349ef2c446653637e4a4b72242d7fe0e0656a4c2ca4c635d46b1265052
+21169c49e677162162f28df159f0d3f13d7ed10530ea30d1d6a19b4fa0cb496f4584bea30e08e0ec5e589969accb687c98d5f8e0bf200735215084e99576cb49
+836d28347f8c1591f44a44981d90a2d186b032f3bdf55b45ed4f37d24009024ef4152166b58f946fdde798a3d15d89303920853bbaa606ffb47fab31e873015f
+f3927448401127c21e03a1451c16bb8c9b84877d8930b74af1326e4e0a9b5342bd0be773f4eca8ab0835b65b49fab021261f30b30d8930332055ccba9b93c2e6
+94307b34479ce829c21e0361de278a53ecd1e8ce4498d7b36a8ab839296c4e090fb9ed1272a2a708fd2e89e46da03f618f46f726c2b48144156bd8a784b94361
+d495735122741c9546318f4feaced09ad1617722ccaa575d37d788478529e1217328c48ab0a3083b9cafc89ca84db05f53b53f11e6a85059c28d7834a034ad80
+25d84f841d0642c73d8acaced0118dee4f841955abede51a978f02bf4e1a0ad102ec27c2fc81d075a5b02eabdc9cb626c27815ea238dea26851c8d4285a107bf
+5bb79f08d3d7465d1ad4b5234f34ba471146077486f2adc6a3c206458afd238af589fd6c51f834a8eb0c93c7dced8930762c31f571150d8a6ba31f84ab50e3c3
+5ece8e7aeed5877db865e6ca484e7f8b220cac5b5b9c51591f85a2d14378441dfd5d79cf8f7aadb8e243b569bedce4f43729c2b0666c5cf4aa5c7c28edd4879b
+3fa21c12fa5ff4744c98047b162bef041ec96d1191fe1a4518d4c39a0bf78f67203c44aa50db1c97b8063f5a86fe5014f6e2233f5f3672065b15217e0149dd6e
+7b5d16976634c905a9501f272df43e6164541a330c82851190a19cc16645e86ec8ae40bf3014b62eb69813b13a63e945167ba9376a388c980d6a4ae3cdbd0e1b
+91c16a45e88a499d214d6128d426e81d1c6c1e2cf85cb6e6e2bb1a9abbbb11108bbcb29773d8b408cdfdab7f56311b0a7503e1c57693e94e0f967db35e737d53
+8168091edcaf8f23c8396c5c84a6e946c4c47eb6400a2f8d3e606e92f6d6b8ac080f0e1d9a9e559391cdf1e620bbb679111e94f5dabc6e56c1d35ea16269f401
+d38285ab352e2ec283292e8daa35832fee49e8201291481f339a80f7b044d6e5e404a93e18fd44d920e5abe3dbc85501a5ef4e4571714ea6020ff2ac206700de
+2b43fbbecaf329b6387f8468f0a019c86b77556f1464448caeb539920dc9d9ef916118ef8ebddf8ff4fecfcbb5f80959fd88d1e088dc1cab97c56f9df132b992
+f369d5f69cbf50f0a15b22249edf9ef9e033b5d6385e4cbd4ffd3d3246b0e3dddbef444c4f70a43064ff45bf757efcfafdfb97655db4cabd2d9e3edeb5894c9c
+cc912290a5ed2364ef48cb328c460949469a8b3312212417692064344a4832d240c84d424272118fef2e6d20217b471a08b92c43482ee251252ecb10928ba441
+2ecb10928b38107259869054e4efb196b690909d237ec2c165194252913f20e3b20c2199c837fc705986904c800b3ab82c434826c037fd4b9b48c8aee970d321
+21a40172abcfd23612b267100d727f82903ca0dbed96369290fd823de7c58190902cc0174096369390bd82be6ac98190901ce0bbce973694905da2787d870321
+21f1681ec0e2611942c2d13d26cbc33284c4a27d9794c1282191185e06e6778484443198dee666304a4814e0befc135c9521240e930897369a903d6109463921
+242412bd06b9324a4828ea592135484830aa3d7a2eca10128f6e28a406098947331452838424a0180a391f2424057828a40609c901b86afb020fab1192053414
+9eb9474f481ac850c85094904cc4a190c32021b90843e199b34142b2699ee366244a483ef5a1f04c0912d285ca50c84094905e1487c213976308e9c76c283c711024a42f5420210b73ba0b905128218bf0f6763e5380e4b5f81f6eb9428cd866468c0000000049454e44ae426082}
+}}{\sp{\sn pictureId}{\sv 131072}}{\sp{\sn pictureActive}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 0}}{\shptxt \pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052\insrsid2387180 {\object\objemb
+\objw13502\objh3735\objscalex25\objscaley25{\*\objclass PBrush}{\*\objdata 010500000200000007000000504272757368000000000000000000203f0000
+424d043f000000000000360400002800000084030000f90000000100080001000000ce3a0000c40e0000c40e00000000000000000000ffffff00ccffff0099ffff0066ffff0033ffff0000ffff00ffccff00ccccff0099ccff0066ccff0033ccff0000ccff00ff99ff00cc99ff009999ff006699ff003399ff000099ff00
+ff66ff00cc66ff009966ff006666ff003366ff000066ff00ff33ff00cc33ff009933ff006633ff003333ff000033ff00ff00ff00cc00ff009900ff006600ff003300ff000000ff00ffffcc00ccffcc0099ffcc0066ffcc0033ffcc0000ffcc00ffcccc00cccccc0099cccc0066cccc0033cccc0000cccc00ff99cc00cc99
+cc009999cc006699cc003399cc000099cc00ff66cc00cc66cc009966cc006666cc003366cc000066cc00ff33cc00cc33cc009933cc006633cc003333cc000033cc00ff00cc00cc00cc009900cc006600cc003300cc000000cc00ffff9900ccff990099ff990066ff990033ff990000ff9900ffcc9900cccc990099cc9900
+66cc990033cc990000cc9900ff999900cc99990099999900669999003399990000999900ff669900cc66990099669900666699003366990000669900ff339900cc33990099339900663399003333990000339900ff009900cc00990099009900660099003300990000009900ffff6600ccff660099ff660066ff660033ff
+660000ff6600ffcc6600cccc660099cc660066cc660033cc660000cc6600ff996600cc99660099996600669966003399660000996600ff666600cc66660099666600666666003366660000666600ff336600cc33660099336600663366003333660000336600ff006600cc00660099006600660066003300660000006600
+ffff3300ccff330099ff330066ff330033ff330000ff3300ffcc3300cccc330099cc330066cc330033cc330000cc3300ff993300cc99330099993300669933003399330000993300ff663300cc66330099663300666633003366330000663300ff333300cc33330099333300663333003333330000333300ff003300cc00
+330099003300660033003300330000003300ffff0000ccff000099ff000066ff000033ff000000ff0000ffcc0000cccc000099cc000066cc000033cc000000cc0000ff990000cc99000099990000669900003399000000990000ff660000cc66000099660000666600003366000000660000ff330000cc33000099330000
+663300003333000000330000ff000000cc00000099000000660000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0002d702ac000381562b00ff00ff00f10000008d00018108d7000381562b00ff00ff00ed0000008d000dd701810156ff00ff00ea000000
+8c00018110d701810156ff00ff00e70000008b00012b14d70181012bff00ff00e40000008b00018116d701ac0156ff00ff00e20000008a00012b19d701ac0181ff00ff00e00000008a0001811cd70181ff00ff00de0000008900012b1ed701ac0156ff00ff00dc000000890001ac20d701ac012bff00ff00da0000008800
+012b23d70181ff00ff00d9000000880001ac24d701ac012bff00ff00d70000008700012b27d70156ff00ff00d6000000870001ac28d70181ff00ff00d5000000860001562ad70181ff00ff00d4000000860001ac2bd701acff00ff00d3000000850001562dd701acff00ff00d2000000850001ac2ed701acff00ff00d100
+00008400015630d70181ff00ff00d0000000840032d70181ff00ff00cf0000008300018133d7012bff00ff00ce000000830035d7ff00ff00ce0000008200015635d701acff00ff00cd000000830000032b56810033d70156ff00ff00cc00000087000156018131d7012bff00ff00cb0000008a00015601812ed70181ff00
+ff00cb0000008d00015601ac2cd70156ff00ff00ca0000008f00012b01812ad701acff00ff00ca0000009100012b018129d70181ff00ff00c90000009400018128d7ff00ff00c90000009500012b01ac26d70181ff00ff00c80000009700015626d7ff00ff00c80000009800012b01ac24d70181ff00ff00c70000009a00
+018124d7ff00ff00c70000009b00018123d70181ff00ff00c60000009c00018123d7ff00ff00c60000009d0001ac22d70156ff00ff00c50000009e0001ac21d701acff00ff00c50000009e00012b22d70156ff00ff00c40000009f00015621d701acff00ff00c4000000a000018121d7012bff00ff00c3000000a10001ac
+20d70181ff00ff00c3000000a100012b21d7ff00ff00c3000000a200018120d70156ff00ff00c2000000a30020d701acff00ff00c2000000a300018120d7012bff00ff00c1000000a40001ac1fd70181ff00ff00c1000000a400015620d7ff00ff00c1000000a50001ac1fd70156ff00ff00c0000000a50001561fd701ac
+ff00ff00c0000000a60001ac1fd7012bff00ff00bf000000a60001561fd70181ff00ff00bf000000a7001fd701acff00ff00bf0000002e00042b01560681042b6a0001811fd7012bff00a200012a0179029e017901244c00032b015609810156032bb8000000270000032b56810002ac13d702ac02810156012b6200012b
+1fd70181ff00a100019e06c80179450000032b56810002ac14d701ac0281012bb2000000220000032b81ac0021d70003ac8156005f0001ac1fd7ff003400022b038103ac08d704ac02810156012b5300012a09c8019e400000032b81ac001fd70004ac81562bad0000001e0000035681ac0029d70003ac812b005b000156
+1fd70156ff002e00012b028101ac1bd70003ac8156004d00012a0bc8019e3c000156018128d7000381562b00a90000001a0000032b81ac0030d70003ac812b005800012b1fd701814000222b2300212b2100222b400000035681ac0024d70003ac812b004900019e0cc8019e3900018101ac2dd70003ac562b003d00232b
+2400222b000017000156018137d701ac01565500018121d7400022d7012b2100012b20d701ac210001ac21d7012b3c00015601812bd70003ac812b00450001790ec801793500012b018133d701ac01563b00018122d7012b2200012b22d700001400015601813dd70181012b510001ac22d701563f0022d7012b2100012b
+20d701ac210001ac21d7012b3900012b018131d701ac012b4200012b10c801243300018138d70181012b3800018122d7012b2200012b22d70000110000032b81ac0041d70181012b4e0001ac23d701813f0022d7012b2100012b20d701ac210001ac21d7012b3700015601ac35d701ac012b400001a410c8019e31000156
+3cd701ac012b3600018122d7012b2200012b22d700000f00015601ac46d701814c00018125d7012b3e0022d7012b2100012b20d701ac210001ac21d7012b350001813ad701ac012b3d00014f12c8012b2f0001813fd701ac012b3400018122d7012b2200012b22d700000c00012b01814bd701564900018126d701563e00
+22d7012b2100012b20d701ac210001ac21d7012b330001563ed701813c0001a412c8019e2d00012b43d701ac012b3200018122d7012b2200012b22d700000a00015601ac4ed701ac012b4600012b27d701ac3e0022d7012b2100012b20d701ac210001ac21d7012b3100012b01ac40d701ac012b3900014f14c8012b2b00
+015646d701813100018122d7012b2200012b22d700000800015601ac52d70156450001ac28d7012b3d0022d7012b2100012b20d701ac210001ac21d7012b3000018144d7012b380001a414c801792a00015649d701562f00018122d7012b2200012b22d700000600018156d701814300018129d701813d0022d7012b2100
+012b20d701ac210001ac21d7012b2e00015647d701563600012b16c80124280001564bd701ac012b2d00018122d7012b2200012b22d700000400018159d701ac012b4000012b2ad701ac3d0022d7012b2100012b20d701ac210001ac21d7012b2d00018149d701813500017916c80179270001564ed701562c00018122d7
+012b2200012b22d70000020001815dd7012b3f0001ac2bd7012b3c0022d7012b2100012b20d701ac210001ac21d7012b2c0001ac4bd70181340017c801a42600012b50d701812b00018122d7012b2200012b22d70000018160d7012b3d0001562cd701813c0022d7012b2100012b20d701ac210001ac21d7012b2a00012b
+4ed701813200014f18c8014f2400012b52d701ac2a00018122d7012b2200012b22d7000001ac61d7012b3c002ed73c0022d7012b2100012b20d701ac210001ac21d7012b2900015650d701813100019e18c80179240001ac53d701ac012b2800018122d7012b2200012b22d70000015662d7012b3a0001812ed701563b00
+22d7012b2100012b20d701ac210001ac21d7012b2800015652d701812f0001241ac82300018156d7012b2700018122d7012b2200012b22d70000010001ac62d7012b39002fd701813b0022d7012b2100012b20d701ac210001ac21d7012b2700015654d701812e00014f1ac8012b2100012b58d7012b2600018122d7012b
+2200012b22d700000100015662d701ac3800018130d73b0022d7012b2100012b20d701ac210001ac21d7012b2600015656d701562d0001791ac801792100018159d7012b2500018122d7012b2200012b22d70000020063d70181370031d701563a0022d7012b2100012b20d701ac210001ac21d7012b2500012b58d7012b
+2c001bc801a42000012b5bd7012b2400018122d7012b2200012b22d700000200018163d701563500018131d701ac3a0022d7012b2100012b20d701ac210001ac21d7012b250059d701ac2b00014f1cc801241f0001815bd701ac2400018122d7012b2200012b22d70000030064d7012b340033d7012b390022d7012b2100
+012b20d701ac210001ac21d7012b240001ac5ad701812a0001791cc8014f1e00012b5dd701812300018122d7012b2200012b22d700000300018163d701ac3300018133d70156390022d7012b2100012b20d701ac210001ac21d7012b230001815cd701562900019e1cc801791e0001812fd703ac2cd701812200018122d7
+012b2200012b22d70000040064d70156320034d701ac390022d7012b2100012b20d701ac210001ac21d7012b2200012b5ed7012b28001dc801a41e002cd70003ac562b00050000042b5681ac28d7012b2100018122d7012b2200012b22d700000400018164d73100015635d7012b380022d7012b2100012b20d701ac2100
+01ac21d7012b220001ac5ed701ac2700014f1ec801241c0001562ad701ac01560c00012b018126d701ac2100018122d7012b2200012b22d7000005002dd701ac04810256038101ac2cd70181300001ac35d70181380022d7012b2100012b20d701ac210001ac21d7012b2100018160d70156260001791ec8014f1c000181
+29d701811000012b018125d701812000018122d7012b2200012b22d700000500018126d70004ac81562b0e00015601812ad72f00015636d701ac380022d7012b2100012b20d701ac210001ac21d7012b2000012b62d72600019e1ec801791c0029d701561300012b01ac24d72000018122d7012b2200012b22d700000600
+22d70004ac81562b1500018128d701812e0001ac37d7012b370022d7012b2100012b20d701ac210001ac21d7012b200001ac62d7018125001fc8019e1b00012b28d701561600018123d701811f00018122d7012b2200012b22d70000060001811ed70003ac812b001a00012b01ac27d72d00012b38d70181370022d7012b
+2100012b20d701ac210001ac21d7012b1f00012b2bd701ac02810156052b0156028101ac2cd7012b2300012a20c81b00015627d701811800015623d7012b1e00018122d7012b2200012b22d7000007001bd70003ac562b001f00018126d701562c00018139d7370022d7012b2100012b20d701ac210001ac21d7012b1f00
+01ac28d70003ac812b000d0000032b81ac0029d701812300014f20c8012b1a00018126d701ac1a00012b22d701811e00018122d7012b2200012b22d700000700018118d70181012b2300015625d701812c003ad70156360022d7012b2100012b20d701ac210001ac21d7012b1e00012b27d701ac012b1300015629d7012b
+2200017920c8014f1a0001ac26d7012b1b00012b22d71e00018122d7012b2200012b22d70000080015d701ac01562700015625d72b0001563ad70181360022d7012b2100012b20d701ac210001ac21d7012b1e00018125d701ac012b1600012b01ac27d701812200019e20c801791a0026d701ac1d00012b21d701561d00
+018122d7012b2200012b22d700000800018112d70181012b2a00018124d701562a0001ac3bd7360022d7012b2100012b20d701ac210001ac21d7012b1d00012b25d701811a00018127d7220021c8019e1900012b26d7012b1e0001ac20d701811d00018122d7012b2200012b22d700000800012b10d701812e0024d70181
+2900012b3cd70156350022d7012b2100012b20d701ac210001ac21d7012b1d00015624d7012b1c0001ac26d70181210022c81900012b25d701ac1f0001ac21d71d00018122d7012b2200012b22d70000090001810cd701ac01563000018124d7290001813cd701ac350022d7012b2100012b20d701ac210001ac21d7012b
+1d0001ac22d701ac1f0001ac26d72000012b22c81900018125d701561f0001ac21d701561c00018122d7012b2200012b22d700000900012b0ad701ac0156330024d7012b280020d701811dd7012b340022d7012b2100012b20d701ac210001ac21d7012b1c00012b22d701812000012b26d701561f00014f22c8012b1800
+018125d7012b1f0001ac21d701811c00018122d7012b2200012b22d700000a00018108d701563500018123d70156270001561fd7018101561dd70156340022d7012b2100012b20d701ac210001ac21d7012b1c00015621d701812200018125d701ac1f00017922c8014f1800018125d7200001ac21d701ac1c00018122d7
+012b2200012b22d700000a00012b06d701813700018123d70181270001ac1fd70156012b1dd701ac340022d7012b2100012b20d701ac210001ac21d7012b1c0001ac21d7012b2200012b26d7012b1e00019e22c80179180001ac24d701ac200001ac22d71c00018122d7012b2200012b22d700000b00018103d701813900
+012b23d701ac2600012b20d7012b01001ed7012b330022d7012b2100012b20d701ac210001ac21d7012b1c0022d7012b230001ac25d701561e00019e22c8019e180001ac24d70181200001ac22d71c00018122d7012b2200012b22d700000b0000042bd7ac2b3a00012b24d72600015620d7020001ac1dd70181330022d7
+012b2100012b20d701ac210001ac21d7012b1b00012b22d7012b2300015625d701ac1e0023c8019e180001ac24d70156200001ac22d7012b1b00018122d7012b2200012b22d700000c00012b3c00012b24d7260001ac1fd701ac020001811dd701ac330022d7012b2100012b20d701ac210001ac21d7012b1b00015622d7
+012b240026d7012b1c00012424c8180001ac24d7012b200001ac22d7012b1b00018122d7012b2200012b22d700004900012b24d72500012b20d70181020001561ed70156320022d7012b2100012b20d701ac210001ac21d7012b1b00018122d7012b2400018125d701561c00012b24c8180001ac24d7012b200001ac22d7
+01561b00018122d7012b2200012b22d700004900015624d7012b2400018120d7012b0200012b1ed70181320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b2400015625d701ac1c00014f24c8012b170001ac24d7012b200001ac22d701811b00018122d7012b2200012b22d700004900018124d7
+012b240001ac20d704001fd7320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b250026d71c00017924c8012b170001ac24d7012b2000018122d701811b00018122d7012b2200012b22d70000490001ac24d7012b2300012b20d701ac040001ac1ed70156310022d7012b2100012b20d701ac2100
+01ac21d7012b1b0023d7012b250001ac25d701561b00017924c801791700018124d701562000018122d701811b00018122d7012b2200012b22d700004800012b25d7012b2300018120d70181040001811ed70181310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500018125d701811b00019e24c8
+01791700018124d701812000018122d701811b00018122d7012b2200012b22d700004800018125d7012b230001ac20d7012b040001811fd7310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500015625d701ac1b00019e24c801791700018124d701812000018122d701811b00018122d7012b2200
+012b22d700004700012b26d7012b2200012b21d70500012b1fd70156300022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500012b26d71b0025c8019e1700015624d701ac2000018122d701811b00018122d7012b2200012b22d70000470001ac26d7012b2200018120d701ac06001fd701ac300022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701561a0025c8019e1700012b25d72000018122d701811b00018122d7012b2200012b22d70000460001ac27d7012b220001ac20d70181060001ac1fd7012b2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701811a00
+26c8180025d7012b1f00018122d701811b00018122d7012b2200012b22d700004400012b01ac28d72200012b21d7012b060001811fd701812f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac25d701ac1900012b26c8180025d701811f00018122d701811b00018122d7012b2200012b22d7
+0000430001562ad72200018121d7070001561fd701ac2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8180001ac24d701ac1f00018122d701811b00018122d7012b2200012b22d700004100012b01ac2ad701ac220001ac20d701810700012b20d7012b2e0022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8012b1700018125d701561e00018122d701811b00018122d7012b2200012b22d700003f00015601ac2cd701812100012b21d70156080020d701812e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d7
+012b1800014f26c8012b1700015626d71e00018122d701811b00018122d7012b2200012b22d700003c00015601812fd701562100018121d7012b080001ac20d72e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701561800017926c8012b180026d701811d00018122d701811b000181
+22d7012b2200012b22d70000380000032b81ac0032d7012b210001ac21d70900018120d701562d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701811800017926c8012b180001ac26d701811c00018122d701811b00018122d7012b2200012b22d700003200022b028101ac36d72100
+012b21d701810900015620d701812d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800015627d701811b00018122d701811b00018122d7012b2200012b22d700002d0000042b5681ac3bd701812100018121d701560a0021d72d0022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800012b28d701ac012b1900015622d701811b00018122d7012b2200012b22d700002700022b028101ac40d70156210022d7012b0a0001ac20d701562c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800
+019e26c80179190001ac29d701ac012b1700012b22d701811b00018122d7012b2200012b22d70000230000035681ac0046d72100015621d701ac0b00018120d701812c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800019e26c80179190001562bd70003ac562b001400012b22d70181
+1b00018122d7012b2200012b22d7000020000156018149d701812100018121d701810b00012b21d72c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a0001ac2dd70004ac81562b1000012b22d701811b00018122d7012b2200012b22d700001d00012b01814cd7
+012b210022d701560c0021d701562b0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a00015633d702ac03810156082b015622d701811b00018122d7012b2200012b22d700001b00015601ac4dd701812100015622d70d0001ac20d701ac2b0022d7012b2100012b
+20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c8019e1b0001ac63d701811b00018122d7012b2200012b22d700001900015601ac4fd7012b2100018121d701810d00015621d7012b2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1b00
+015663d701811b00018122d7012b2200012b22d700001700012b01ac50d70181220022d701560d00012b21d701812a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1c0001ac62d701811b00018122d7012b2200012b22d700001500012b018152d72200015622d7
+0f0001ac20d701ac2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1c00012b62d701811b00018122d7012b2200012b22d700001400015653d701562200018121d701ac0f00018121d7012b290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2700
+27d70181170027c8019e1d00015661d701811b00018122d7012b2200012b22d700001300018153d70181230022d701560f00015621d70181290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1e00018160d701811b00018122d7012b2200012b22d700001100012b01ac
+53d701ac2300015622d7012b100022d7290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e1f0001ac5fd701811b00018122d7012b2200012b22d700001000015655d72400018121d701ac1100018121d70156280022d7012b2100012b20d701ac210001ac21d7012b
+1b0023d7012b270001ac26d701ac170027c8019e20005fd701811b00018122d7012b2200012b22d700000f00015655d7012b240022d701811100015621d70181280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2000012b5ed701811b00018122d7012b2200012b
+22d700000e00015655d7012b2400015622d70156120022d7280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2100012b01ac5cd701811b00018122d7012b2200012b22d700000d00015655d7012b2500018122d71300018121d70156270022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e230001ac5bd701811b00018122d7012b2200012b22d700000c00012b55d7012b260022d701811300015621d70181270022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e240001815ad70181
+1b00018122d7012b2200012b22d700000c0001ac53d701ac012b2600015622d701561300012b22d7012b260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2500015659d701811b00018122d7012b2200012b22d700000b00015653d701812800018122d7012b1400
+01ac21d70156260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170001a426c8019e2600012b01ac57d701811b00018122d7012b2200012b22d700000b0052d701ac012b290022d701ac1500015621d701ac260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+270027d701811700019e26c8019e2800015656d701811b00018122d7012b2200012b22d700000a00018150d701ac01562a00015622d701811500012b22d7012b250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2a00018154d701811b00018122d7012b2200012b
+22d700000a004fd701ac01562c00018122d7012b160001ac21d70181250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2b00012b018152d701811b00018122d7012b2200012b22d70000090001814dd701ac01562e0022d701ac1700018121d701ac250022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c801792d00012b018150d701811b00018122d7012b2200012b22d70000090001ac4ad70003ac812b002f00015622d701811700012b22d7012b240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700
+019e26c801793000015601814dd701811b00018122d7012b2200012b22d700000800015648d70003ac812b003200018122d70156180001ac21d70181240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c80179320000032b56ac004ad701811b00018122d7012b2200012b
+22d700000800018145d7000381562b00350023d71900018122d7240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179360000035681ac0046d701811b00018122d7012b2200012b22d70000080042d70003ac812b003800015622d701811900015622d70156230022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179390000042b5681ac42d701811b00018122d7012b2200012b22d700000700012b3ed70003ac812b003c00018122d701561a0022d70181230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d7
+1800017926c8014f3e00012b0156028101ac3cd701811b00018122d7012b2200012b22d70000070001813ad70003ac815600400023d7012b1a00018122d7230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d71800017926c8012b4500032b048105ac09d703ac22d701811b00018122d7
+012b2200012b22d70000070001ac36d70003ac8156004300015622d701ac1b00015622d70156220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c8012b5d0001ac21d701811b00018122d7012b2200012b22d70000070033d70004ac81562b4600018122d701811c00
+22d701ac220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701ac1800012b26c8012b5d0001ac21d701811b00018122d7012b2200012b22d700000600012b30d70003ac562b004a0023d7012b1c00018122d7012b210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+2600018126d701811800012b26c801245d0001ac21d701811b00018122d7012b2200012b22d70000060001562ed70181012b4c00015623d71d00015622d70156210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d701561800012b26c85e0001ac21d701811b00018122d7012b2200012b
+22d70000060001812bd701ac01564f00018122d701811e0022d701ac210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac26d7012b1800012426c85e0001ac21d701811b00018122d7012b2200012b22d70000060001812ad70181510023d701561e00018122d7012b200022d7012b21000156
+20d701ac210001ac21d7012b1b0023d7012b260027d71a0025c801a45e0001ac21d701811b00018122d7012b2200012b22d70000060001ac28d701ac012b5100015623d71f00015622d70181200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500012b26d701ac1a0025c8019e5e0001ac21d70181
+1b00018122d7012b2200012b22d70000060001ac27d701ac5300018122d701811f00012b22d701ac200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500015626d701811a00019e24c8019e5e0001ac21d701811b00018122d7012b2200012b22d70000060001ac27d7540023d70156200001ac22d7
+01561f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500018126d701811a00019e24c801795e0001ac21d701811b00018122d7012b2200015622d70000060027d701565300015623d7012b2000015622d701811f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b250001ac26d7
+012b1a00017924c801792800022b340022d701811b00018122d7012b2200018122d70000060026d701ac5400018122d701ac2100012b23d71f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400012b27d71b00017924c8014f28000003acd78100330022d701811b00018122d7012b2200018122d7
+0000060026d70181540023d70181220001ac22d701561e0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400018126d701ac1b00017924c8012b2700018103d701ac012b310022d701811b00018122d701812200018122d70000060026d7012b5300015623d7012b2200018122d701811e0022d7012b
+210001ac20d701ac210001ac21d7012b1b0023d7012b240001ac26d701811b00012b24c8012a2600012b06d701812f00012b22d701811b00018123d701ac210001ac22d70000060001ac25d7012b5300018123d72300012b23d71e0022d7012b210001ac21d70181200022d7012b1b0023d7012b2300015627d7012b1b00
+012b24c82700018108d701562d00015622d701811b00018124d701ac012b1f0001ac22d70000060001ac25d7540023d70181240001ac22d701561d0022d701ac210023d701ac1f0022d7012b1b0023d701ac230001ac27d71d0024c82600012b0ad701ac012b2b00018122d701811b00018126d701561e0023d700000600
+01ac25d75300015623d701562400018122d701ac1d0023d701ac012b1e00012b25d7012b1c00012b22d7012b1b0024d701ac2100015627d701811d0023c8019e260001ac0cd70181012b290001ac22d701811b00018127d701811c00015623d700000600018125d7012b5200018123d72500012b23d7012b1c0025d70156
+1d00015626d701811b00015622d7012b1b0025d701ac200028d701561d00019e22c80179250001810fd70181012b270023d7012b1b00018128d701ac012b1a00018123d700000600015625d70156520023d701ac260023d701561c0026d701811c00018127d701ac012b1900018122d71c0026d701ac1e0001ac28d71e00
+017922c80179250012d70181012b2400015623d7012b1b0001ac2ad70181190024d700000600012b25d701ac2e00012b02ac2000015623d701562600018122d701ac1c0028d701561a002ad70181180001ac22d71c0027d701ac012b1b00018128d701811e00017922c8014f2400018114d70181012b220001ac23d7012b
+1b0001ac2cd701561600015624d70000070026d7012b2b00015601ac03d7012b1f00018123d7012b2600015623d7012b1b0029d701ac012b170001562bd701ac01561500015623d71c0029d701561900018129d7012b1e00014f22c8012b2300012b17d70181012b1f00015624d7012b1b0001ac2dd701ac01561300012b
+25d70000070001ac25d701812900015601ac05d701ac1f0023d701ac280023d701811b002bd70181012b15002ed701ac0156130001ac23d71c002ad701811700018129d701ac1f00012a22c8240001ac19d701ac01561c00012b25d71c0001ac2fd701ac0156110001ac25d700000700018126d701562600018109d7012b
+1d00015623d701812800018122d701ac1b002dd70181012b120001ac30d701ac01561000018124d71c002bd701ac01561300012b01ac2ad70181200021c801a4230001561dd7018101561800012b26d71c0001ac32d70181012b0c00012b01ac26d700000700015627d7012b2200012b01810bd701ac1d0001ac23d7012b
+2800015623d701561900012b2fd70003ac812b000d00012b01ac34d7018101560b00012b01ac24d701ac1c002dd701ac01560f00012b01812cd72100019e20c80179230021d7000381562b001300018126d701ac1c0036d7000381562b000400022b018101ac27d701ac0000080028d701561e0000032b56ac000ed7012b
+1b00012b24d72a0023d701811900012b32d70003ac815600022b050000032b56ac0039d70003ac815600042b00035681ac0026d701ac1c002fd70003ac812b000a00015601812dd701812100017920c801792200018124d70004ac81562b0b0000032b56810028d701ac1c0068d701ac00000800018128d701811a000003
+2b56ac0011d701ac1b00015623d701812a00018123d71900012ba8d701811c0033d702ac048102ac30d7012b2100017920c8014f2100012b2bd708ac2cd701811c0068d701810000080001562ad70181150000032b81ac0015d7012b1a0001ac23d701562a00015623d701561800012ba8d701811c006ad701812200012b
+20c80124210001ac5fd701561b00012b68d70181000009002cd7000381562b000c0000042b5681ac19d701ac1900012b24d72b00012b23d7018118000181a8d701561c006ad7012b230020c82100015660d7012b1b00012b68d7012b0000090001812fd702ac038104ac20d7012b1800015623d701ac2c0001ac23d71800
+0181a8d7012b1c0069d70181240001a41ec8019e210060d701ac1c00018168d7012b00000900012b58d70181180001ac23d701562c00015623d7015617000181a8d71d0069d7012b240001791ec801792000018160d701811c00018168d7010000000a00018158d7012b1600012b24d7012b2c00012b23d701ac170001ac
+a7d701ac1d0068d701812500014f1ec8012b1f00012b61d7012b1c0001ac67d70181010000000a00012b58d701811600015623d701ac2e0001ac23d7012b160001aca7d701811d0067d701ac2600012a1ec8200001ac60d701ac1d0001ac67d70156010000000b00018158d7012b150001ac23d701812e00018123d70181
+1600a8d701561d0067d7012b27001dc8019e1f00015661d701811d0068d7012b010000000c0058d701811400012b24d701562e00012b23d701ac1500012ba8d71e0066d70181280001791cc801791f0062d71d00012b67d701ac020000000c00015658d7012b1300015624d7300001ac23d7012b14000156a7d701811e00
+65d701ac2900014f1cc8012b1e00018161d701811d00015667d70156020000000d00018157d70181130001ac23d701813000018123d7018114000181a7d701561e0065d7012b290001241cc81f00018161d7012b1d00018167d7012b020000000e0001ac57d7012b1100012b24d701563000012b24d7140001ac60d70181
+46d71f0064d701562b0001a41ac801792000012b01ac5ed701811e0001ac66d70181030000000e00012b57d701811100015624d7320024d70156130060d70003ac002b0044d701811f0063d701812c0001791ac8014f220001565cd701ac1f0067d7012b030000000f00015657d7012b100001ac23d701ac3200018123d7
+01811200012b60d7012b0200012b43d7200062d701ac2d00012b1ac80124240001815ad7012b1e00012b21d701ac018143d70181040000001000015656d701810f00012b24d701563200015624d7120001815fd701560400012b01ac40d70156200061d701ac2f0019c8019e2600012b018157d701561f00015621d70003
+8100560041d701ac050000001100015656d7012b0e00015624d7012b330024d70156110001ac21d701813cd70181070001ac3ed70181210060d701ac3000017918c8014f2800012b01ac54d701812000018121d701810200012b01ac3fd7012b050000001200015655d701810e0001ac23d701ac3400018123d701811000
+015622d7010001563ad70181090001813cd701ac22005fd701ac3100012b18c801242a00012b01ac51d70181210022d70181040001563dd70156060000001300015654d701560d00012b24d701813400015624d7012b0f0001ac21d701ac0200012b38d701810b0001813bd7012b22005ed701ac330001a416c801792d00
+012b01814ed701812100015622d7012b0500012b01ac3ad70181070000001400012b01ac50d701810f00015624d70156350024d701560e00012b22d70181040001ac35d701810d00015639d7012b23005dd701813400017916c8014f2f00012b01814bd701812200018122d70800015638d7018108000000160001814cd7
+01ac0156110001ac24d73600018123d701ac0e00018122d701560500018133d701810f00012b01ac36d7012b240001ac21d701ac39d701563500012416c83300015601ac47d70156230022d701ac0900012b01ac35d70181090000001700015649d701ac01561200012b24d701813600015624d7012b0e0000032b81ac00
+1fd7012b0600012b01ac30d701561200018133d701ac012b250001ac21d70156018136d701ac012b3700017914c801793500015601ac43d701ac012b2300012b01ac21d701810b00015601ac32d701560a0000001800012b018145d70181012b1400015624d701563600012b24d70181120000035681ac001ad701ac0900
+01812ed7012b1400012b01ac30d70181270001ac21d700038100560034d701813900012a14c83800012b018140d70181270000032b56ac001ed701560d0001812fd701ac012b0b0000001a00012b01ac41d70181012b160001ac24d7012b370001ac23d701ac150000032b56810017d701810a00012b01ac2ad701811800
+01562dd701ac0156280001ac21d701810200012b01ac30d701ac012b3b00019e12c801793b00015601ac3bd701ac012b2c0000035681ac001ad70f00012b01812cd701810d0000001c00015601ac3cd7018101561800012b24d701ac3800015624d7012b180000032b81ac0013d7012b0c00012b01ac26d701ac012b1b00
+01812ad701812a0001ac21d70181040001812ed701563d00012a12c83e0000032b56ac0036d701ac012b310000032b56ac0016d701811100012b018128d701ac012b0e0000001e00015601ac37d70003ac562b001b00022b0156028102ac1dd701813800012b24d701811c0000035681ac000ed701ac0f00012b01ac22d7
+01ac01561f00018101ac25d701812c0001ac21d701ac0500012b01ac2ad701814000017910c80179410000032b81ac0031d70181012b370000035681ac0012d7012b1400018101ac23d701ac012b100000002000012b018132d70003ac562b002700022b0156028102ac14d7012b390001ac24d71f0000032b5681000bd7
+0156110000032b81ac001dd701ac015623000156018120d7018101562e0001ac21d701ac0700015601ac25d701ac015643000fc8019e450000032b5681002bd701ac01563d0000032b56ac000ed701ac170000032b81ac001ed70181012b120000002300015601812bd70003ac8156003400012b0156028102ac0bd701ac
+820000032b81ac0006d701ac150000032b81ac0017d70003ac562b002800015601811ad701810156310001ac21d701ac0900012b018120d70003ac812b004500014f0ec8012a490000032b81ac0024d7000381562b00430000035681ac000ad701561a0000032b81ac0018d70181015615000000260000035681ac0023d7
+0004ac81562b3f00022b0156028102ac02d70181860000035681ac0002d70156180000042b5681ac0fd70003ac8156002f0000042b5681ac10d70004ac81562b340001ac21d701ac0c00015601811ad70003ac812b00490001790cc8014f4e0000032b56810002ac19d70004ac81562b4a0000032b56ac0006d701ac1f00
+00042b5681ac0ed701ac0281012b180000002a00012b028101ac18d702ac000381562b004d00012b8900012b01561f00032b01560481032b3a00032b015604810156032b3a0001ac21d701ac0f0000042b5681ac10d70004ac81562b4e0001790ac801795500022b015603810bac03810156012b540000035681ac0002d7
+01562500032b015603810156032b1d0000003000022b048107ac04810156022bff008b0001ac21d701ac15000c2b5500017908c8014fc300012b01564e000000ff00cf0001ac21d701ac7700012b019e04c80179012aff0015000000ff00cf0001ac21d701ac7a00022bff0018000000ff00cf0001ac21d701acff009400
+0000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff00
+94000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701ac7a000207ff0018000000ff00cf0001ac21d701ac750000030809100006110003
+10090800ff0013000000ff00cf0001ac21d701ac7200010101090e1101090101ff0010000000ff00cf0001ac21d701ac7100010912110109ff000f000000ff00cf0001ac21d701ac6f0001010110141101100101ff000d000000ff00cf0022d701ac6e00010118110108ff000c000000ff00cf0022d701ac6d0001011a11
+0108ff000b000000ff00cf0022d701ac6d001c110101ff000a000000ff00cf0022d701ac6c0001101c110110ff000a000000ff00cf0022d701ac6b0001081e110109ff0009000000ff00cf0022d701ac6b0020110101ff0008000000ff00cf0022d701ac6a00010920110109ff0008000000ff00cf0022d701ac6a000110
+21110101ff0007000000ff00cf0022d701ac6900010722110108ff0007000000ff00ce00012b22d701ac6900010922110109ff0007000000ff00ce00012b22d701ac690001102311ff0007000000ff00ce00012b22d701ac69002411ff0007000000ff00ce00012b22d701ac690024110107ff0006000000ff00ce000156
+22d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110101ff0006000000ff00ce0001ac22d701ac690001102311ff0007000000ff00ce0001ac22d701ac6900010922110110ff000700
+0000ff00ce0023d701ac6900010822110109ff0007000000ff00cd00012b23d701816a0022110101ff0007000000ff00cd00015623d701816a00010920110110ff0008000000ff00cd00018123d701816b0020110108ff0008000000ff00cd0001ac23d701816b0001091e110110ff0009000000ff00cd0024d701816c00
+01101d110101ff0009000000ff00cd0024d7012b6c0001011c110108ff000a000000ff00ce0000032b81ac0020d7012b6d0001011a110109ff000b000000ff00d20000042b5681ac1bd7012b6e00010118110109ff000c000000ff00d60000042b5681ac17d770000101011015110109ff000d000000ff00db0000032b81
+ac0013d772000109121101100107ff000e000000ff00df0000032b5681000fd77300010101090e1101100109ff0010000000ff00e30000042b5681ac09d701ac760001080110091101090108ff0012000000ff00e80000035681ac0005d701ac7900010105070101ff0015000000ff00ec0000052b81acd78100ff009500
+000000010000000000000000000000000000000000000000000000000000000001050000050000000d0000004d45544146494c455049435400085d000044e6fffff06f03000800085dbc190000
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00
+fefefe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefecb0098653200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000040302020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000504020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020600000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000004020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+030303030604040404040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020203030306040404040404040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020203060405050000000000000000000000000000000000000005050404060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040505
+05000000000000000005050505040406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0d020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202030404050000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e
+0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000406030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303
+030303030303030303030303030303020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000506030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202
+020202020202020202020303030303030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202
+020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000005000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020206000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020204000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020203060405000000000000000000000000000000000000000000000000000000
+000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202030400000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504040404060604040405000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+0202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000000000000000000000000000000000000000000000000000000000000000000000000504060302020202020202020202020202020604
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+0202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020203000000000000000000000000
+000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000050403020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406030303030306040405000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000
+000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202
+0202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202
+020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020300000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202
+02020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000050602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020203000000000000000000000506020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+040000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202
+020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202030000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020400000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000030200000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020d0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020203020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000005020204000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000302020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+000000000000000004020206000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202
+020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202050000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000302020202040000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+0202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000202020202030000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000000005020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000050202020202020000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+0000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020300000000000000000000000000
+000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202
+020202020200000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000030202020202020400000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000020202020202020600000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000006020202020202020200000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000003020202020202020205000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020206000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f
+020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020203030404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020203000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202040000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000
+000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+050406030202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202060500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020202020000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000602020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+000003020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030303040404040505050505000000000000000000050505000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000502020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+0202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+0000000000000006020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+0000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000
+000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+0202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202050004020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+0000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020202020202
+020204000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202
+020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020206000000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000004
+030202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030505020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020400
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000
+000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000
+000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020600000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000050202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202
+020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000
+000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000302020202020202020202020202020202020202020202
+020202020202020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050602020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020305000000000000000000000000
+000000000000000000000000000000000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000502020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202030500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040602020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060302020202
+030304050000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202030605
+000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040603030202020202030605000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030303030604050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000005040603
+020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202030605000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040405050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000005050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000406030202020202020202020202020306040500000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040505050500000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202
+020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202
+020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000002
+020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000502030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000030202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000302020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000400
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202030500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000602020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+000000000000000000000000000000000000000502020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202030500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050602020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202020202020305000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000060202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020206
+050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202060405000000000000000000000000000000000000000000000000000005020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000
+000000000006020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000004020202
+020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+0302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+000000000000000000000000000000000000000000000002020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000
+000000000000000000000000000003020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020204000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202020206040500000000000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020204050000000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202030500000000000000000000
+000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000302020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020202020202
+020202020202020203030604040505000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020203060400000000000000000000000602020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202
+020202020202020202020604000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000000000050202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000
+000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060404050500000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000050202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000050603020202020202020202
+020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020304000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202030405000000
+000000000000000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303060404050500000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000
+000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000005020202020202020202020202020202
+020202020202020202020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040405000000000000000000000000000000000000
+000000000000050504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306020202020202020202020202020202020202020202020202
+020202020202020303030604040404030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030604040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203030604040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405
+000006020202020202020202020202020202020202020202020202020202020202020202020202020303030604040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203030404040405050505050505040404040603030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020303030303030303030303030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202030602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f1002020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090c0a0b0b0b0b0b0b0a0c090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040500000000000000000000000000000000000000020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0a0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020306040500000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090a0b0b0b0b0b0b0b0b0b0c0902020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060405000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020708080808080702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}{\result {\insrsid2387180 {\*\shppict
+{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex25\picscaley25\piccropl0\piccropr0\piccropt0\piccropb0
+\picw23813\pich6588\picwgoal13500\pichgoal3735\pngblip\bliptag-1424617728{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}89504e470d0a1a0a0000000d4948445200000384000000f9080300000048c40b8b0000000467414d410000b1889598f4a600000300504c5445ffffffffffccff
+ff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff66
+00ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99
+cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc
+00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999
+669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff
+66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc66669966666666
+66336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cc
+cc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc333399333366333333
+3333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc00
+99990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc0000990000660000330000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199e9ab4000000
+097048597300000ec300000ec401882e3ea30000194449444154789ced9dbb951b391045296b579e360759ea60e43117994c44964c06a20c269d9de67048361b
+40bdfaa13f7cd7d2391a0255001e50f8347038905761389ddf4e4b1b41c8ab727c17e0c879310bbefc33f265b1fc09598ee153800b8af0df6fff7df2f5df654c
+206419de05f836650123be7cfd6fc2b7af0b1841c8020c0f03e092227c92e04586fff4378390ae4c22d06545f8e5db5c836350dadb0e42fad110e0c8d0d79a2f
+4509528564b79423d0054558d5205548f68924c0ee226c68f0bfffb84a4a760822c2aebbf5e5f9e027dc3324fb438c453b8bb0b02efac8b78ea610d287e73dc1
+a545d8d6200352b2438eeb12a130107228243b64589708250d725648760820c27e8747ff9545c86d0ab23b8095997e2214a351c6a36487ac4a84edfd890fba19
+43482780e5d17e220434c84921d91d9b1321bfa6207b8322246461808d428a90904c808d428a90904c3627c26ec610d2895589905b14e41559950881cd7a9e98
+21fb634d22fc4716213fa320fb634d2204e251eed593fdb12a118af128a351b243562542717d940321d921eb12a1f031130742b247d625c2f6ac90df31915db2
+321136035206a36497ac4d848d8b47b93d41f6c9da445857213548768afc697def070acb0fc27c632c4af6cafa4458dc2ee4ba28d92f6b14e1ec91d0af1c06c9
+8e59a508dff9f7eb352afdc6d7b2c9ce59ab082ffcc34f78c90bb06a1112f20a5084842c0c4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842c0c
+4548c8c25084842c0c4548c8c25084842c0c4548c8c25084842cccaa45380ccbe54d482fd62bc2e1f7df777efd5828fb7d310ca777ce1f8cff3cb2835b0f5611
+0e0fa418f6ebef959f29c9f765382e97f5bbf6aa557b7e17636c6ea1a979108bfcbde11ec7eec8d5803f1339ba52d18bf03dd7d98fc22bf3aec1f7c13036e52b
+1fa577be7329ca8c9c2ee585a9f05aa7be2a7dca59ae60bfdf17b3cfef999d22ccf6d32ef2420b7e2f0365169132508af0786a55665c1b7ed060f85838165fdd
+edd8fe64389e0ba55831ead9105f79b6aaaae4b5258f4fed951bcb320ca766910fd58ee98c577cab6c0d25a911e120566b940e7ffe9d10372fac57c1534146f8
+31d155a36a1a46d9b4815455a1f260a78799f86ed8cb0daa18c9b0893ae6652755ff19296eb977d3d61a2ec223544a981f12530dfefd1d90e4730d25fb313c17
+576d8c10bb0543bf065655c9e956660dedddad551bfb9938625f33f5792cf19c05502c62b563bdb8ae1c5011220e980c28f1eb498401d34270089cfa61edd68b
+73b16262d8a44d678759821f4ed7a752c8cfcdf1e81149bd5a10e5ea9dfc39da829ba5ade8c6152a902d3b29331ff18d223f9e35f8f7af2bbdf9b084a26cfecd
+bce69582c78c0a3b34bd65855ae703a56cedb8a0dea8ec7135c27928f2904104ea28eed6c22a8044a8af5843ebbdf37b2e42cf50e81a19748e3497239ffe5637
+6d03fb55cb5cb0945bd16ba80d5a27b19059059b5a257e17adb2588aeeeb55800e868808751d80d280398581d03e14fa5b25ea8838dc4e9ba7d62ea83730d554
+39bb8298fcd336a7e54f45204f31ae3fd0cba7e0bda521815db86c9e6a39436fc09cd98cd03e14faa6471a47807a7e6c9e16c3e431266618bc529061c402a6c3
+f4b3fa274773b13cf725d6281f1201b03063cbfdcd1a997c2f69d0341486481075444ee561afc7669830c804cc06850c13e35143cac0c07c7120a2b0ed2106a2
+4273e208a6d0a43810ea77ec836647b02340769f7f6aaed1f60abd35d516d3769f178f9ad646a1957dc866c90f4f5b0254e8481dc0b260fda72c425d3c1a2ac1
+37a46501cde8a33a3c0356c38c140d3e67685fc21440aa6be63ce0b2a7584e2aebaa00e5e1493ec6822786b206fffefdae48233c30035408a6e1134b35d6cbd1
+e07337eedbcc73155ec977601e8e245cfd319c0d948ccf7b0f6a1556a251453c9a20c137a028e5fa366df63c5169e1491a9c2d4f203f324c0a21f32d45eee3e2
+89bf39890512616b13ad0a6b1a44cfae4507a237a4a2941b9271b36742b938933438977c523c6a8a461df33d9421260fc9fd802c047475528d46c17834b17314
+c22cb9b6ce11c69546e4acc638cfcb38644920a9963a419f7b32e798a295a2a8883c9c264ca846a3503c9a35225c907a93ccbc1f28f40529f17731ab9c78144a
+b5f4c32cc76f04f5e92b68399a4aa9ac8d8e88eba33993c13b426f92de226a56648dfe257f1127d59b14c668347f521885a0802e36e0eb65959dfa0f02aa32d3
+8f5e2de2d98ab4e1bfe46e4a3c8a28db7e9a750508dd52171bf069e1cf9608052de78ba05d96bd5ac473b79a954fd1db8c781449b3f20185d3c56eb40ba08f0d
+7080d29812caf168be1fcdec7bb508fd114a1be53e2f211e3547a3dde6e16edadd522723d080b4a5417193227f286ab7aef4ecaf4cbf55cdcaa5e22b52c8ca4d
+0a7334da6d1eee66150d07ac96e2574cf0a430bf4ada6ef46a11936eb5f34088895e7568c61e8d6e4784ed86d3cb0a2c42694e09c549618780b06941af16f158
+96bd0742cc4bd5a410195b6b096e6579b43d91e96605d43936a784c026457a9d34fb926e2dc291e7e57ed5f19a55e90fabf5151e8f22aa5ebcc8bd349b7f372b
+a0a1b0b14b884c0a173e0adbad453cd4a8e6674f173996aeafbd5177d4bcb3ee48afda783623c2666cd0cf0c64286c6b10f8b2377d6da679256076e6732314fe
+961b72ed8a88869fc1f1a8271addce1e45730c5a8919d7229544281f1fcd9e97b55a57b71661f8d2ad51faa5cb715a233ea21ac52605e2c2f245ee255a841fcf
+fac8b38a67e4a150981222c74735b5f2f90a85c68955f46827758ec2c834d3a17bc0172b4ae342bdd00d223cdf5ea432df84f999cad08ce8a77fef2c8269de0f
+d5a3bc024aee1d4511029fd743363d3d38a1b89b3bb230cddc8c40a351602a30f904ccbf15833feb002456ef42b4227c7ea7c176dc7872413296445cbb995dc0
+a5fb784fac90c285a36a11ca1e951f9a003d4910e1d59e01bf24fc660468343843bba7d69650683c0ab8d02a73ac003e8d8af802657e0b1d540bad3270e57e08
+be1e5fd2e0df3f520a07a989386f796f17a6a15b9db60bb4347519e213b46b7c16f0d116bc49e1b41f2a806b32e5ae4591c25b45049e4d169d09b5a2c00743a9
+6284f33223420a4291b42f26c75468cb19b6074be2f3afb16c34e7572e32947e805439982932aab692c24ae0ad717bac6641bdd28090245a8500e75f6fbfb80a
+858a11cecb8c40f7f0567217df77715f63a4136139b2807eaafa63e549cee12cfec0378f9be08c462356a6d0247ca788029c8879aa46888bc47519f0b6a7a23d
+c8134bde150795082bcd42f3c11ed689273cd50de40a4adf6b3f540231079d1a1a505c3a6b77422851b8f1b593014488dd3e3acf187be5cc1b1b85cc8f15e588
+359f8437c05d7b7b8f2063b9ffc457bb1b02e3d19690e14b671d4e88bd1ae686541ae2e2282ac2e736023f3408b8101212b4020b4503d74d2003098b47bdd128
+3426bb6fe81a69260224e115a11c59a093db763c2a6b10bdf770d23a156f7d02adbae5022a42f775f6b8b96f2922f4ae69de003cf07e0f2bb75ec019ff7ab153
+8448748f0662cd44001182efc23cf44caac7a100150588d07fedcff52fb1524f0847a3e25164106aa710e1beee41ad04338052887c18af791c2a4e84f746a25b
+9500dc708b50ec15f0a53624bb1c117a67cf579c9ddea19308e56148aeb30e224487c256914222fc811873eb62b597efa1af6d55303cb257205a84f6e75a1bc4
+e4eb8e4643442856db56441870ea0b581cc5360a3fed313c532a7be01461e8236bf21f8e989e490a3052ced71f8d52848fa027691b494022849f85399b4600d9
+01a708636234d8da0b091b8531f1a833fa1f09b0623f2244e3d146629008e1670a07d3544876604d220c590e3302642b8adf1f8d52843a4f3e68b461609bd0fa
+763d8c6fa12c4684c8db97a8b51f6404a401a137103d05ec50bf9208fde70e2011821b8556d62042a06dc2d65e31cc8e25bc8796b12492f7063ed88f08c14961
+c31f448314e1053c3fc46c1b40a6422c19515c0149c89dc1664488ae12d4138044887c51e860b722143ee332d0638f2fe2b48b5ce262816f4784de9599e6834c
+773063ac6c4b84cabbe514e7f700dcf1289080dc71c869bc9408bd67b6a0bd7a8af002fe9753cec59b3d8c00f935730b29ad88345e4f84d5460c8a107a34dbcc
+b64468ba2baf7cc58e016f3c0ad82a1b2127f252220463a3aa43a008334e42ded998088d57f69deb37ed28002adc797d2960a59cc84b89d0bb3c0aedd5538417
+1419d6081022908befbbc9101b28c202b5df7715e1300ca7ebcb28f7f283ee015e95089d17503fdfc2a90470d775b50bb2ad22a7421116a8fd1e14217c78b462
+e5f1045fef596455220cb86ed82144d7667b4c344a11ea936a25078ad07e6e0dbfb3bcc5ba4418f32a9175ad0648da5356312650848ae472451822c091758930
+ec152ad380e88947033e671f912da00815c94147474d22f43cfc31635d228c7c854aaf43473ceabc1ae94644322f28c25ab5648950f96c8dd5fc91054418eb9c
+f66c1b90a2b9a8b04f3f640b28c2025d45a87bb1c663fec802228c7e094a2743bbc341d12845a84f6ac42942cd6714f1125c9f08c35dd4c8d01c8f4645a314a1
+3ea9917e224c79d07c6d224c781451f1f5219058f177b27ac3aed1a7080bf41261d2f3f5ab1361869f91af0b163d961b2d381e1bf39fb027113a1f0efe132a42
+db13ac00ab1361e402e90d7430346eb98745a314a1da90a64798064111260d836f6b14a1f3ec9addd01139a15281c9d5838ec5118e508437224598321bfc607d
+224cea71c2eef732fd0a5d1d8af08322bc1128c2ac50746485225c5285b67854fe119237961245a8f0284c8469d3c10b6b14e1922a94939997585c344a11aa0d
+697a1425c29c29d28d558a304985b2adb6a32f71d12845a836a4e9519408312bccac538439c33fb2576779a456fe0990319a1445a8f0284884a9b1e8db6a4598
+b31815f359edf3b016188d5284faa4466a051c23c2c475d1b6f960e679224c094981b0501f8fcabf883cb2431116481561defea064fec8b2224c392a2b9b8b3f
+9df149c0a39c37e4cc29c20299224c5e9469993fb2b00833668640602827321d4f65ff1477f6cb9953840532cf8e664f081be68f2c2ec2f77129ba08648365af
+a765260f9d8a8f8b231ca0086f0488303f185dbd08c365288f4ada7834321aa508f549b5920b1061878170fd228c9e1bca16cb691c557faef9ae38c27e8af086
+ffcb7acb40783e9f4ea7e370c5f962de4a447808bdd3431e0a75f1a8ec9e5c447764fb294245727e11ea06c2d2a30c40fbdf86080f81f7cbc93989493cb662b1
+90544f29cae65384056a3f778b503310569e27da93082f490dceab8e4782df2713ed51dd72a3caba564a521214212c42bcb5553f59dd9b08af09fa06c58878f4
+4158b1cec9e6bf94083b3d08531521bc47d8f86a7c3773c242aaf64131c0e27ba98945ac7bd85bb69e225438e415211a8d3a55b455115ed3b60851b6594e142f
+23ddd5a711d6bf9e08ab8dd8fb2a13d8ba9a1dedee4538a25e399565a1380d2a5693ce19d9fa9712213812556bd42b422cfb76b0f312223c6837f4e5005136f9
+56edfecc26c8d6bf9408c1feb59ada4f9f08c13ec0edc32e44a83b650a9c601153fb2c36d139c591b511d97a8a704ebd287c22c4b21722abd711a16a47474e4c
+f61ccc5573646d44369e229c532f0a4c84f66278934bf39544a8180c236cbe3a2e1591321aa508b576b4fd718a10ca5daae2971221beb30a188dc6a3d2df29a3
+518a509dd25bb30d7710a1e4ca8b8910552160b4e8fab521637f851361fccb89b03129833458fb8802db20917c78351182db4a2146437fa67c1f9122547af241
+23059708a16506b1305f4d84e0441e690162331c90fcd40e4418bf1f11628b6d2d77a0c3a3b50333506b1267fd2f2742aceb445a00f67184f057da65198a700a
+d6a7b64a9922fca0a708b15921d202b0962c64a78e462942a51923ad52868eccb84428d6f1eb89102a37a80540e7d1c2fd8a307e711102dac14428a733d24a01
+1261cd98981efdf54408cd22a016203a3f88aee9a3518af011ff94103bb7962b4220959d89109a14c6a474125b893e1add870863da4dc8a93168b7de5e0a8827
+402a2d17167a24544ed29519aa79a9f0ce5201a937090f3b11a1e53d0f5b6188497ddf8408f37b34a50807f86d6b6366a808c5a62495af211add8708835e0f0f
+8846a18dc2ea85879008c570678b221c33b5345f38337484023e907097cd0cd9fa0d8830c48b88b5d103b447e113a1d85681545a3f5f428403e89add64386da9
+f48e6dcf2cd1e84e44e8fc39e806941220c2eae516211f516c5184b73c0dab1a98c970ca5238746aff81c901d9fa2d8830e4b1386c5946f205d8a3f8e9b340f2
+432ecba60f0b88f0e18fcf96562ce7a50813a584dae5639ad94658bfbc089db7fca1698c488d04d8a3a8ba127308522e4bef1535d1229c64a99721546cb1a9d5
+3045a33b112112824946805fc48885218bb0fadb900feb01479a29f417e1ec6fc3af68d124e97a99ce164ecbe96e4284fe331311f79c5d708810ab7f7f6fd2fc
+797f1116723c29c2ba98c37e773c770ce3b93c22a7bb091162cdb7a1203408113d9145587f9229666908beafc85c12c1222cfe2f1c95621b4b60627882458ccb
+bb72c29b1021baaa524905bea90428657179b4f11a0c6644bb381537f715e92ec26a86d070884926f87d961ab6687437224423f9a20cf1be0f6816e2f2687571
+34e4a606f7a1cdee226cfc49e5c91b9db5232a75d8976634b93c2027bc0d11e291fcf9a983d55caa8e74a8e2f268c313b0fa1be5e95f27ee2d4221bfe7ea9ae6
+82569d6cb0cef632d6c30672ca1b11a1a6e4ce9f4f6a1e95ef8b20f1d10f49848ddfba9fa24012f007f6a12294ffb0f408236aea074a75589766acc75f23525e
+85087b3c338dd5a5a0c1d653d9704f5209af22ce6f7516213af8cf84a8798d42b6779a349ef2c446653637e4a4b72242d7fe0e0656a4c2ca4c635d46b1265052
+21169c49e677162162f28df159f0d3f13d7ed10530ea30d1d6a19b4fa0cb496f4584bea30e08e0ec5e589969accb687c98d5f8e0bf200735215084e99576cb49
+836d28347f8c1591f44a44981d90a2d186b032f3bdf55b45ed4f37d24009024ef4152166b58f946fdde798a3d15d89303920853bbaa606ffb47fab31e873015f
+f3927448401127c21e03a1451c16bb8c9b84877d8930b74af1326e4e0a9b5342bd0be773f4eca8ab0835b65b49fab021261f30b30d8930332055ccba9b93c2e6
+94307b34479ce829c21e0361de278a53ecd1e8ce4498d7b36a8ab839296c4e090fb9ed1272a2a708fd2e89e46da03f618f46f726c2b48144156bd8a784b94361
+d495735122741c9546318f4feaced09ad1617722ccaa575d37d788478529e1217328c48ab0a3083b9cafc89ca84db05f53b53f11e6a85059c28d7834a034ad80
+25d84f841d0642c73d8acaced0118dee4f841955abede51a978f02bf4e1a0ad102ec27c2fc81d075a5b02eabdc9cb626c27815ea238dea26851c8d4285a107bf
+5bb79f08d3d7465d1ad4b5234f34ba471146077486f2adc6a3c206458afd238af589fd6c51f834a8eb0c93c7dced8930762c31f571150d8a6ba31f84ab50e3c3
+5ece8e7aeed5877db865e6ca484e7f8b220cac5b5b9c51591f85a2d14378441dfd5d79cf8f7aadb8e243b569bedce4f43729c2b0666c5cf4aa5c7c28edd4879b
+3fa21c12fa5ff4744c98047b162bef041ec96d1191fe1a4518d4c39a0bf78f67203c44aa50db1c97b8063f5a86fe5014f6e2233f5f3672065b15217e0149dd6e
+7b5d16976634c905a9501f272df43e6164541a330c82851190a19cc16645e86ec8ae40bf3014b62eb69813b13a63e945167ba9376a388c980d6a4ae3cdbd0e1b
+91c16a45e88a499d214d6128d426e81d1c6c1e2cf85cb6e6e2bb1a9abbbb11108bbcb29773d8b408cdfdab7f56311b0a7503e1c57693e94e0f967db35e737d53
+8168091edcaf8f23c8396c5c84a6e946c4c47eb6400a2f8d3e606e92f6d6b8ac080f0e1d9a9e559391cdf1e620bbb679111e94f5dabc6e56c1d35ea16269f401
+d38285ab352e2ec283292e8daa35832fee49e8201291481f339a80f7b044d6e5e404a93e18fd44d920e5abe3dbc85501a5ef4e4571714ea6020ff2ac206700de
+2b43fbbecaf329b6387f8468f0a019c86b77556f1464448caeb539920dc9d9ef916118ef8ebddf8ff4fecfcbb5f80959fd88d1e088dc1cab97c56f9df132b992
+f369d5f69cbf50f0a15b22249edf9ef9e033b5d6385e4cbd4ffd3d3246b0e3dddbef444c4f70a43064ff45bf757efcfafdfb97655db4cabd2d9e3edeb5894c9c
+cc912290a5ed2364ef48cb328c460949469a8b3312212417692064344a4832d240c84d424272118fef2e6d20217b471a08b92c43482ee251252ecb10928ba441
+2ecb10928b38107259869054e4efb196b690909d237ec2c165194252913f20e3b20c2199c837fc705986904c800b3ab82c434826c037fd4b9b48c8aee970d321
+21a40172abcfd23612b267100d727f82903ca0dbed96369290fd823de7c58190902cc0174096369390bd82be6ac98190901ce0bbce973694905da2787d870321
+21f1681ec0e2611942c2d13d26cbc33284c4a27d9794c1282191185e06e6778484443198dee666304a4814e0befc135c9521240e930897369a903d6109463921
+242412bd06b9324a4828ea592135484830aa3d7a2eca10128f6e28a406098947331452838424a0180a391f2424057828a40609c901b86afb020fab1192053414
+9eb9474f481ac850c85094904cc4a190c32021b90843e199b34142b2699ee366244a483ef5a1f04c0912d285ca50c84094905e1487c213976308e9c76c283c711024a42f5420210b73ba0b905128218bf0f6763e5380e4b5f81f6eb9428cd866468c0000000049454e44ae426082}}}}}}{\insrsid2387180 
+\par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8193\dptxbx\dptxlrtb{\dptxbxtext\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\pard\plain 
+\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052\insrsid2387180 {\object\objemb\objw13502\objh3735\objscalex25\objscaley25{\*\objclass PBrush}{\*\objdata 01050000
+0200000007000000504272757368000000000000000000203f0000
+424d043f000000000000360400002800000084030000f90000000100080001000000ce3a0000c40e0000c40e00000000000000000000ffffff00ccffff0099ffff0066ffff0033ffff0000ffff00ffccff00ccccff0099ccff0066ccff0033ccff0000ccff00ff99ff00cc99ff009999ff006699ff003399ff000099ff00
+ff66ff00cc66ff009966ff006666ff003366ff000066ff00ff33ff00cc33ff009933ff006633ff003333ff000033ff00ff00ff00cc00ff009900ff006600ff003300ff000000ff00ffffcc00ccffcc0099ffcc0066ffcc0033ffcc0000ffcc00ffcccc00cccccc0099cccc0066cccc0033cccc0000cccc00ff99cc00cc99
+cc009999cc006699cc003399cc000099cc00ff66cc00cc66cc009966cc006666cc003366cc000066cc00ff33cc00cc33cc009933cc006633cc003333cc000033cc00ff00cc00cc00cc009900cc006600cc003300cc000000cc00ffff9900ccff990099ff990066ff990033ff990000ff9900ffcc9900cccc990099cc9900
+66cc990033cc990000cc9900ff999900cc99990099999900669999003399990000999900ff669900cc66990099669900666699003366990000669900ff339900cc33990099339900663399003333990000339900ff009900cc00990099009900660099003300990000009900ffff6600ccff660099ff660066ff660033ff
+660000ff6600ffcc6600cccc660099cc660066cc660033cc660000cc6600ff996600cc99660099996600669966003399660000996600ff666600cc66660099666600666666003366660000666600ff336600cc33660099336600663366003333660000336600ff006600cc00660099006600660066003300660000006600
+ffff3300ccff330099ff330066ff330033ff330000ff3300ffcc3300cccc330099cc330066cc330033cc330000cc3300ff993300cc99330099993300669933003399330000993300ff663300cc66330099663300666633003366330000663300ff333300cc33330099333300663333003333330000333300ff003300cc00
+330099003300660033003300330000003300ffff0000ccff000099ff000066ff000033ff000000ff0000ffcc0000cccc000099cc000066cc000033cc000000cc0000ff990000cc99000099990000669900003399000000990000ff660000cc66000099660000666600003366000000660000ff330000cc33000099330000
+663300003333000000330000ff000000cc00000099000000660000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0002d702ac000381562b00ff00ff00f10000008d00018108d7000381562b00ff00ff00ed0000008d000dd701810156ff00ff00ea000000
+8c00018110d701810156ff00ff00e70000008b00012b14d70181012bff00ff00e40000008b00018116d701ac0156ff00ff00e20000008a00012b19d701ac0181ff00ff00e00000008a0001811cd70181ff00ff00de0000008900012b1ed701ac0156ff00ff00dc000000890001ac20d701ac012bff00ff00da0000008800
+012b23d70181ff00ff00d9000000880001ac24d701ac012bff00ff00d70000008700012b27d70156ff00ff00d6000000870001ac28d70181ff00ff00d5000000860001562ad70181ff00ff00d4000000860001ac2bd701acff00ff00d3000000850001562dd701acff00ff00d2000000850001ac2ed701acff00ff00d100
+00008400015630d70181ff00ff00d0000000840032d70181ff00ff00cf0000008300018133d7012bff00ff00ce000000830035d7ff00ff00ce0000008200015635d701acff00ff00cd000000830000032b56810033d70156ff00ff00cc00000087000156018131d7012bff00ff00cb0000008a00015601812ed70181ff00
+ff00cb0000008d00015601ac2cd70156ff00ff00ca0000008f00012b01812ad701acff00ff00ca0000009100012b018129d70181ff00ff00c90000009400018128d7ff00ff00c90000009500012b01ac26d70181ff00ff00c80000009700015626d7ff00ff00c80000009800012b01ac24d70181ff00ff00c70000009a00
+018124d7ff00ff00c70000009b00018123d70181ff00ff00c60000009c00018123d7ff00ff00c60000009d0001ac22d70156ff00ff00c50000009e0001ac21d701acff00ff00c50000009e00012b22d70156ff00ff00c40000009f00015621d701acff00ff00c4000000a000018121d7012bff00ff00c3000000a10001ac
+20d70181ff00ff00c3000000a100012b21d7ff00ff00c3000000a200018120d70156ff00ff00c2000000a30020d701acff00ff00c2000000a300018120d7012bff00ff00c1000000a40001ac1fd70181ff00ff00c1000000a400015620d7ff00ff00c1000000a50001ac1fd70156ff00ff00c0000000a50001561fd701ac
+ff00ff00c0000000a60001ac1fd7012bff00ff00bf000000a60001561fd70181ff00ff00bf000000a7001fd701acff00ff00bf0000002e00042b01560681042b6a0001811fd7012bff00a200012a0179029e017901244c00032b015609810156032bb8000000270000032b56810002ac13d702ac02810156012b6200012b
+1fd70181ff00a100019e06c80179450000032b56810002ac14d701ac0281012bb2000000220000032b81ac0021d70003ac8156005f0001ac1fd7ff003400022b038103ac08d704ac02810156012b5300012a09c8019e400000032b81ac001fd70004ac81562bad0000001e0000035681ac0029d70003ac812b005b000156
+1fd70156ff002e00012b028101ac1bd70003ac8156004d00012a0bc8019e3c000156018128d7000381562b00a90000001a0000032b81ac0030d70003ac812b005800012b1fd701814000222b2300212b2100222b400000035681ac0024d70003ac812b004900019e0cc8019e3900018101ac2dd70003ac562b003d00232b
+2400222b000017000156018137d701ac01565500018121d7400022d7012b2100012b20d701ac210001ac21d7012b3c00015601812bd70003ac812b00450001790ec801793500012b018133d701ac01563b00018122d7012b2200012b22d700001400015601813dd70181012b510001ac22d701563f0022d7012b2100012b
+20d701ac210001ac21d7012b3900012b018131d701ac012b4200012b10c801243300018138d70181012b3800018122d7012b2200012b22d70000110000032b81ac0041d70181012b4e0001ac23d701813f0022d7012b2100012b20d701ac210001ac21d7012b3700015601ac35d701ac012b400001a410c8019e31000156
+3cd701ac012b3600018122d7012b2200012b22d700000f00015601ac46d701814c00018125d7012b3e0022d7012b2100012b20d701ac210001ac21d7012b350001813ad701ac012b3d00014f12c8012b2f0001813fd701ac012b3400018122d7012b2200012b22d700000c00012b01814bd701564900018126d701563e00
+22d7012b2100012b20d701ac210001ac21d7012b330001563ed701813c0001a412c8019e2d00012b43d701ac012b3200018122d7012b2200012b22d700000a00015601ac4ed701ac012b4600012b27d701ac3e0022d7012b2100012b20d701ac210001ac21d7012b3100012b01ac40d701ac012b3900014f14c8012b2b00
+015646d701813100018122d7012b2200012b22d700000800015601ac52d70156450001ac28d7012b3d0022d7012b2100012b20d701ac210001ac21d7012b3000018144d7012b380001a414c801792a00015649d701562f00018122d7012b2200012b22d700000600018156d701814300018129d701813d0022d7012b2100
+012b20d701ac210001ac21d7012b2e00015647d701563600012b16c80124280001564bd701ac012b2d00018122d7012b2200012b22d700000400018159d701ac012b4000012b2ad701ac3d0022d7012b2100012b20d701ac210001ac21d7012b2d00018149d701813500017916c80179270001564ed701562c00018122d7
+012b2200012b22d70000020001815dd7012b3f0001ac2bd7012b3c0022d7012b2100012b20d701ac210001ac21d7012b2c0001ac4bd70181340017c801a42600012b50d701812b00018122d7012b2200012b22d70000018160d7012b3d0001562cd701813c0022d7012b2100012b20d701ac210001ac21d7012b2a00012b
+4ed701813200014f18c8014f2400012b52d701ac2a00018122d7012b2200012b22d7000001ac61d7012b3c002ed73c0022d7012b2100012b20d701ac210001ac21d7012b2900015650d701813100019e18c80179240001ac53d701ac012b2800018122d7012b2200012b22d70000015662d7012b3a0001812ed701563b00
+22d7012b2100012b20d701ac210001ac21d7012b2800015652d701812f0001241ac82300018156d7012b2700018122d7012b2200012b22d70000010001ac62d7012b39002fd701813b0022d7012b2100012b20d701ac210001ac21d7012b2700015654d701812e00014f1ac8012b2100012b58d7012b2600018122d7012b
+2200012b22d700000100015662d701ac3800018130d73b0022d7012b2100012b20d701ac210001ac21d7012b2600015656d701562d0001791ac801792100018159d7012b2500018122d7012b2200012b22d70000020063d70181370031d701563a0022d7012b2100012b20d701ac210001ac21d7012b2500012b58d7012b
+2c001bc801a42000012b5bd7012b2400018122d7012b2200012b22d700000200018163d701563500018131d701ac3a0022d7012b2100012b20d701ac210001ac21d7012b250059d701ac2b00014f1cc801241f0001815bd701ac2400018122d7012b2200012b22d70000030064d7012b340033d7012b390022d7012b2100
+012b20d701ac210001ac21d7012b240001ac5ad701812a0001791cc8014f1e00012b5dd701812300018122d7012b2200012b22d700000300018163d701ac3300018133d70156390022d7012b2100012b20d701ac210001ac21d7012b230001815cd701562900019e1cc801791e0001812fd703ac2cd701812200018122d7
+012b2200012b22d70000040064d70156320034d701ac390022d7012b2100012b20d701ac210001ac21d7012b2200012b5ed7012b28001dc801a41e002cd70003ac562b00050000042b5681ac28d7012b2100018122d7012b2200012b22d700000400018164d73100015635d7012b380022d7012b2100012b20d701ac2100
+01ac21d7012b220001ac5ed701ac2700014f1ec801241c0001562ad701ac01560c00012b018126d701ac2100018122d7012b2200012b22d7000005002dd701ac04810256038101ac2cd70181300001ac35d70181380022d7012b2100012b20d701ac210001ac21d7012b2100018160d70156260001791ec8014f1c000181
+29d701811000012b018125d701812000018122d7012b2200012b22d700000500018126d70004ac81562b0e00015601812ad72f00015636d701ac380022d7012b2100012b20d701ac210001ac21d7012b2000012b62d72600019e1ec801791c0029d701561300012b01ac24d72000018122d7012b2200012b22d700000600
+22d70004ac81562b1500018128d701812e0001ac37d7012b370022d7012b2100012b20d701ac210001ac21d7012b200001ac62d7018125001fc8019e1b00012b28d701561600018123d701811f00018122d7012b2200012b22d70000060001811ed70003ac812b001a00012b01ac27d72d00012b38d70181370022d7012b
+2100012b20d701ac210001ac21d7012b1f00012b2bd701ac02810156052b0156028101ac2cd7012b2300012a20c81b00015627d701811800015623d7012b1e00018122d7012b2200012b22d7000007001bd70003ac562b001f00018126d701562c00018139d7370022d7012b2100012b20d701ac210001ac21d7012b1f00
+01ac28d70003ac812b000d0000032b81ac0029d701812300014f20c8012b1a00018126d701ac1a00012b22d701811e00018122d7012b2200012b22d700000700018118d70181012b2300015625d701812c003ad70156360022d7012b2100012b20d701ac210001ac21d7012b1e00012b27d701ac012b1300015629d7012b
+2200017920c8014f1a0001ac26d7012b1b00012b22d71e00018122d7012b2200012b22d70000080015d701ac01562700015625d72b0001563ad70181360022d7012b2100012b20d701ac210001ac21d7012b1e00018125d701ac012b1600012b01ac27d701812200019e20c801791a0026d701ac1d00012b21d701561d00
+018122d7012b2200012b22d700000800018112d70181012b2a00018124d701562a0001ac3bd7360022d7012b2100012b20d701ac210001ac21d7012b1d00012b25d701811a00018127d7220021c8019e1900012b26d7012b1e0001ac20d701811d00018122d7012b2200012b22d700000800012b10d701812e0024d70181
+2900012b3cd70156350022d7012b2100012b20d701ac210001ac21d7012b1d00015624d7012b1c0001ac26d70181210022c81900012b25d701ac1f0001ac21d71d00018122d7012b2200012b22d70000090001810cd701ac01563000018124d7290001813cd701ac350022d7012b2100012b20d701ac210001ac21d7012b
+1d0001ac22d701ac1f0001ac26d72000012b22c81900018125d701561f0001ac21d701561c00018122d7012b2200012b22d700000900012b0ad701ac0156330024d7012b280020d701811dd7012b340022d7012b2100012b20d701ac210001ac21d7012b1c00012b22d701812000012b26d701561f00014f22c8012b1800
+018125d7012b1f0001ac21d701811c00018122d7012b2200012b22d700000a00018108d701563500018123d70156270001561fd7018101561dd70156340022d7012b2100012b20d701ac210001ac21d7012b1c00015621d701812200018125d701ac1f00017922c8014f1800018125d7200001ac21d701ac1c00018122d7
+012b2200012b22d700000a00012b06d701813700018123d70181270001ac1fd70156012b1dd701ac340022d7012b2100012b20d701ac210001ac21d7012b1c0001ac21d7012b2200012b26d7012b1e00019e22c80179180001ac24d701ac200001ac22d71c00018122d7012b2200012b22d700000b00018103d701813900
+012b23d701ac2600012b20d7012b01001ed7012b330022d7012b2100012b20d701ac210001ac21d7012b1c0022d7012b230001ac25d701561e00019e22c8019e180001ac24d70181200001ac22d71c00018122d7012b2200012b22d700000b0000042bd7ac2b3a00012b24d72600015620d7020001ac1dd70181330022d7
+012b2100012b20d701ac210001ac21d7012b1b00012b22d7012b2300015625d701ac1e0023c8019e180001ac24d70156200001ac22d7012b1b00018122d7012b2200012b22d700000c00012b3c00012b24d7260001ac1fd701ac020001811dd701ac330022d7012b2100012b20d701ac210001ac21d7012b1b00015622d7
+012b240026d7012b1c00012424c8180001ac24d7012b200001ac22d7012b1b00018122d7012b2200012b22d700004900012b24d72500012b20d70181020001561ed70156320022d7012b2100012b20d701ac210001ac21d7012b1b00018122d7012b2400018125d701561c00012b24c8180001ac24d7012b200001ac22d7
+01561b00018122d7012b2200012b22d700004900015624d7012b2400018120d7012b0200012b1ed70181320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b2400015625d701ac1c00014f24c8012b170001ac24d7012b200001ac22d701811b00018122d7012b2200012b22d700004900018124d7
+012b240001ac20d704001fd7320022d7012b2100012b20d701ac210001ac21d7012b1b0001ac22d7012b250026d71c00017924c8012b170001ac24d7012b2000018122d701811b00018122d7012b2200012b22d70000490001ac24d7012b2300012b20d701ac040001ac1ed70156310022d7012b2100012b20d701ac2100
+01ac21d7012b1b0023d7012b250001ac25d701561b00017924c801791700018124d701562000018122d701811b00018122d7012b2200012b22d700004800012b25d7012b2300018120d70181040001811ed70181310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500018125d701811b00019e24c8
+01791700018124d701812000018122d701811b00018122d7012b2200012b22d700004800018125d7012b230001ac20d7012b040001811fd7310022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500015625d701ac1b00019e24c801791700018124d701812000018122d701811b00018122d7012b2200
+012b22d700004700012b26d7012b2200012b21d70500012b1fd70156300022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2500012b26d71b0025c8019e1700015624d701ac2000018122d701811b00018122d7012b2200012b22d70000470001ac26d7012b2200018120d701ac06001fd701ac300022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701561a0025c8019e1700012b25d72000018122d701811b00018122d7012b2200012b22d70000460001ac27d7012b220001ac20d70181060001ac1fd7012b2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260026d701811a00
+26c8180025d7012b1f00018122d701811b00018122d7012b2200012b22d700004400012b01ac28d72200012b21d7012b060001811fd701812f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac25d701ac1900012b26c8180025d701811f00018122d701811b00018122d7012b2200012b22d7
+0000430001562ad72200018121d7070001561fd701ac2f0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8180001ac24d701ac1f00018122d701811b00018122d7012b2200012b22d700004100012b01ac2ad701ac220001ac20d701810700012b20d7012b2e0022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d71900012b26c8012b1700018125d701561e00018122d701811b00018122d7012b2200012b22d700003f00015601ac2cd701812100012b21d70156080020d701812e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d7
+012b1800014f26c8012b1700015626d71e00018122d701811b00018122d7012b2200012b22d700003c00015601812fd701562100018121d7012b080001ac20d72e0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701561800017926c8012b180026d701811d00018122d701811b000181
+22d7012b2200012b22d70000380000032b81ac0032d7012b210001ac21d70900018120d701562d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701811800017926c8012b180001ac26d701811c00018122d701811b00018122d7012b2200012b22d700003200022b028101ac36d72100
+012b21d701810900015620d701812d0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800015627d701811b00018122d701811b00018122d7012b2200012b22d700002d0000042b5681ac3bd701812100018121d701560a0021d72d0022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c801791800012b28d701ac012b1900015622d701811b00018122d7012b2200012b22d700002700022b028101ac40d70156210022d7012b0a0001ac20d701562c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800
+019e26c80179190001ac29d701ac012b1700012b22d701811b00018122d7012b2200012b22d70000230000035681ac0046d72100015621d701ac0b00018120d701812c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d71800019e26c80179190001562bd70003ac562b001400012b22d70181
+1b00018122d7012b2200012b22d7000020000156018149d701812100018121d701810b00012b21d72c0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a0001ac2dd70004ac81562b1000012b22d701811b00018122d7012b2200012b22d700001d00012b01814cd7
+012b210022d701560c0021d701562b0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c801791a00015633d702ac03810156082b015622d701811b00018122d7012b2200012b22d700001b00015601ac4dd701812100015622d70d0001ac20d701ac2b0022d7012b2100012b
+20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c8019e1b0001ac63d701811b00018122d7012b2200012b22d700001900015601ac4fd7012b2100018121d701810d00015621d7012b2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1b00
+015663d701811b00018122d7012b2200012b22d700001700012b01ac50d70181220022d701560d00012b21d701812a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e1c0001ac62d701811b00018122d7012b2200012b22d700001500012b018152d72200015622d7
+0f0001ac20d701ac2a0022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1c00012b62d701811b00018122d7012b2200012b22d700001400015653d701562200018121d701ac0f00018121d7012b290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2700
+27d70181170027c8019e1d00015661d701811b00018122d7012b2200012b22d700001300018153d70181230022d701560f00015621d70181290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d70181170027c8019e1e00018160d701811b00018122d7012b2200012b22d700001100012b01ac
+53d701ac2300015622d7012b100022d7290022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e1f0001ac5fd701811b00018122d7012b2200012b22d700001000015655d72400018121d701ac1100018121d70156280022d7012b2100012b20d701ac210001ac21d7012b
+1b0023d7012b270001ac26d701ac170027c8019e20005fd701811b00018122d7012b2200012b22d700000f00015655d7012b240022d701811100015621d70181280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2000012b5ed701811b00018122d7012b2200012b
+22d700000e00015655d7012b2400015622d70156120022d7280022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2100012b01ac5cd701811b00018122d7012b2200012b22d700000d00015655d7012b2500018122d71300018121d70156270022d7012b2100012b20d7
+01ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e230001ac5bd701811b00018122d7012b2200012b22d700000c00012b55d7012b260022d701811300015621d70181270022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e240001815ad70181
+1b00018122d7012b2200012b22d700000c0001ac53d701ac012b2600015622d701561300012b22d7012b260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170027c8019e2500015659d701811b00018122d7012b2200012b22d700000b00015653d701812800018122d7012b1400
+01ac21d70156260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270001ac26d701ac170001a426c8019e2600012b01ac57d701811b00018122d7012b2200012b22d700000b0052d701ac012b290022d701ac1500015621d701ac260022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+270027d701811700019e26c8019e2800015656d701811b00018122d7012b2200012b22d700000a00018150d701ac01562a00015622d701811500012b22d7012b250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2a00018154d701811b00018122d7012b2200012b
+22d700000a004fd701ac01562c00018122d7012b160001ac21d70181250022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c8019e2b00012b018152d701811b00018122d7012b2200012b22d70000090001814dd701ac01562e0022d701ac1700018121d701ac250022d7012b
+2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700019e26c801792d00012b018150d701811b00018122d7012b2200012b22d70000090001ac4ad70003ac812b002f00015622d701811700012b22d7012b240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d701811700
+019e26c801793000015601814dd701811b00018122d7012b2200012b22d700000800015648d70003ac812b003200018122d70156180001ac21d70181240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700019e26c80179320000032b56ac004ad701811b00018122d7012b2200012b
+22d700000800018145d7000381562b00350023d71900018122d7240022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179360000035681ac0046d701811b00018122d7012b2200012b22d70000080042d70003ac812b003800015622d701811900015622d70156230022d7
+012b2100012b20d701ac210001ac21d7012b1b0023d7012b270027d7012b1700017926c80179390000042b5681ac42d701811b00018122d7012b2200012b22d700000700012b3ed70003ac812b003c00018122d701561a0022d70181230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d7
+1800017926c8014f3e00012b0156028101ac3cd701811b00018122d7012b2200012b22d70000070001813ad70003ac815600400023d7012b1a00018122d7230022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b27d71800017926c8012b4500032b048105ac09d703ac22d701811b00018122d7
+012b2200012b22d70000070001ac36d70003ac8156004300015622d701ac1b00015622d70156220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600012b26d701ac1800017926c8012b5d0001ac21d701811b00018122d7012b2200012b22d70000070033d70004ac81562b4600018122d701811c00
+22d701ac220022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600015626d701ac1800012b26c8012b5d0001ac21d701811b00018122d7012b2200012b22d700000600012b30d70003ac562b004a0023d7012b1c00018122d7012b210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b
+2600018126d701811800012b26c801245d0001ac21d701811b00018122d7012b2200012b22d70000060001562ed70181012b4c00015623d71d00015622d70156210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b2600018126d701561800012b26c85e0001ac21d701811b00018122d7012b2200012b
+22d70000060001812bd701ac01564f00018122d701811e0022d701ac210022d7012b2100012b20d701ac210001ac21d7012b1b0023d7012b260001ac26d7012b1800012426c85e0001ac21d701811b00018122d7012b2200012b22d70000060001812ad70181510023d701561e00018122d7012b200022d7012b21000156
+20d701ac210001ac21d7012b1b0023d7012b260027d71a0025c801a45e0001ac21d701811b00018122d7012b2200012b22d70000060001ac28d701ac012b5100015623d71f00015622d70181200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500012b26d701ac1a0025c8019e5e0001ac21d70181
+1b00018122d7012b2200012b22d70000060001ac27d701ac5300018122d701811f00012b22d701ac200022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500015626d701811a00019e24c8019e5e0001ac21d701811b00018122d7012b2200012b22d70000060001ac27d7540023d70156200001ac22d7
+01561f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2500018126d701811a00019e24c801795e0001ac21d701811b00018122d7012b2200015622d70000060027d701565300015623d7012b2000015622d701811f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b250001ac26d7
+012b1a00017924c801792800022b340022d701811b00018122d7012b2200018122d70000060026d701ac5400018122d701ac2100012b23d71f0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400012b27d71b00017924c8014f28000003acd78100330022d701811b00018122d7012b2200018122d7
+0000060026d70181540023d70181220001ac22d701561e0022d7012b2100018120d701ac210001ac21d7012b1b0023d7012b2400018126d701ac1b00017924c8012b2700018103d701ac012b310022d701811b00018122d701812200018122d70000060026d7012b5300015623d7012b2200018122d701811e0022d7012b
+210001ac20d701ac210001ac21d7012b1b0023d7012b240001ac26d701811b00012b24c8012a2600012b06d701812f00012b22d701811b00018123d701ac210001ac22d70000060001ac25d7012b5300018123d72300012b23d71e0022d7012b210001ac21d70181200022d7012b1b0023d7012b2300015627d7012b1b00
+012b24c82700018108d701562d00015622d701811b00018124d701ac012b1f0001ac22d70000060001ac25d7540023d70181240001ac22d701561d0022d701ac210023d701ac1f0022d7012b1b0023d701ac230001ac27d71d0024c82600012b0ad701ac012b2b00018122d701811b00018126d701561e0023d700000600
+01ac25d75300015623d701562400018122d701ac1d0023d701ac012b1e00012b25d7012b1c00012b22d7012b1b0024d701ac2100015627d701811d0023c8019e260001ac0cd70181012b290001ac22d701811b00018127d701811c00015623d700000600018125d7012b5200018123d72500012b23d7012b1c0025d70156
+1d00015626d701811b00015622d7012b1b0025d701ac200028d701561d00019e22c80179250001810fd70181012b270023d7012b1b00018128d701ac012b1a00018123d700000600015625d70156520023d701ac260023d701561c0026d701811c00018127d701ac012b1900018122d71c0026d701ac1e0001ac28d71e00
+017922c80179250012d70181012b2400015623d7012b1b0001ac2ad70181190024d700000600012b25d701ac2e00012b02ac2000015623d701562600018122d701ac1c0028d701561a002ad70181180001ac22d71c0027d701ac012b1b00018128d701811e00017922c8014f2400018114d70181012b220001ac23d7012b
+1b0001ac2cd701561600015624d70000070026d7012b2b00015601ac03d7012b1f00018123d7012b2600015623d7012b1b0029d701ac012b170001562bd701ac01561500015623d71c0029d701561900018129d7012b1e00014f22c8012b2300012b17d70181012b1f00015624d7012b1b0001ac2dd701ac01561300012b
+25d70000070001ac25d701812900015601ac05d701ac1f0023d701ac280023d701811b002bd70181012b15002ed701ac0156130001ac23d71c002ad701811700018129d701ac1f00012a22c8240001ac19d701ac01561c00012b25d71c0001ac2fd701ac0156110001ac25d700000700018126d701562600018109d7012b
+1d00015623d701812800018122d701ac1b002dd70181012b120001ac30d701ac01561000018124d71c002bd701ac01561300012b01ac2ad70181200021c801a4230001561dd7018101561800012b26d71c0001ac32d70181012b0c00012b01ac26d700000700015627d7012b2200012b01810bd701ac1d0001ac23d7012b
+2800015623d701561900012b2fd70003ac812b000d00012b01ac34d7018101560b00012b01ac24d701ac1c002dd701ac01560f00012b01812cd72100019e20c80179230021d7000381562b001300018126d701ac1c0036d7000381562b000400022b018101ac27d701ac0000080028d701561e0000032b56ac000ed7012b
+1b00012b24d72a0023d701811900012b32d70003ac815600022b050000032b56ac0039d70003ac815600042b00035681ac0026d701ac1c002fd70003ac812b000a00015601812dd701812100017920c801792200018124d70004ac81562b0b0000032b56810028d701ac1c0068d701ac00000800018128d701811a000003
+2b56ac0011d701ac1b00015623d701812a00018123d71900012ba8d701811c0033d702ac048102ac30d7012b2100017920c8014f2100012b2bd708ac2cd701811c0068d701810000080001562ad70181150000032b81ac0015d7012b1a0001ac23d701562a00015623d701561800012ba8d701811c006ad701812200012b
+20c80124210001ac5fd701561b00012b68d70181000009002cd7000381562b000c0000042b5681ac19d701ac1900012b24d72b00012b23d7018118000181a8d701561c006ad7012b230020c82100015660d7012b1b00012b68d7012b0000090001812fd702ac038104ac20d7012b1800015623d701ac2c0001ac23d71800
+0181a8d7012b1c0069d70181240001a41ec8019e210060d701ac1c00018168d7012b00000900012b58d70181180001ac23d701562c00015623d7015617000181a8d71d0069d7012b240001791ec801792000018160d701811c00018168d7010000000a00018158d7012b1600012b24d7012b2c00012b23d701ac170001ac
+a7d701ac1d0068d701812500014f1ec8012b1f00012b61d7012b1c0001ac67d70181010000000a00012b58d701811600015623d701ac2e0001ac23d7012b160001aca7d701811d0067d701ac2600012a1ec8200001ac60d701ac1d0001ac67d70156010000000b00018158d7012b150001ac23d701812e00018123d70181
+1600a8d701561d0067d7012b27001dc8019e1f00015661d701811d0068d7012b010000000c0058d701811400012b24d701562e00012b23d701ac1500012ba8d71e0066d70181280001791cc801791f0062d71d00012b67d701ac020000000c00015658d7012b1300015624d7300001ac23d7012b14000156a7d701811e00
+65d701ac2900014f1cc8012b1e00018161d701811d00015667d70156020000000d00018157d70181130001ac23d701813000018123d7018114000181a7d701561e0065d7012b290001241cc81f00018161d7012b1d00018167d7012b020000000e0001ac57d7012b1100012b24d701563000012b24d7140001ac60d70181
+46d71f0064d701562b0001a41ac801792000012b01ac5ed701811e0001ac66d70181030000000e00012b57d701811100015624d7320024d70156130060d70003ac002b0044d701811f0063d701812c0001791ac8014f220001565cd701ac1f0067d7012b030000000f00015657d7012b100001ac23d701ac3200018123d7
+01811200012b60d7012b0200012b43d7200062d701ac2d00012b1ac80124240001815ad7012b1e00012b21d701ac018143d70181040000001000015656d701810f00012b24d701563200015624d7120001815fd701560400012b01ac40d70156200061d701ac2f0019c8019e2600012b018157d701561f00015621d70003
+8100560041d701ac050000001100015656d7012b0e00015624d7012b330024d70156110001ac21d701813cd70181070001ac3ed70181210060d701ac3000017918c8014f2800012b01ac54d701812000018121d701810200012b01ac3fd7012b050000001200015655d701810e0001ac23d701ac3400018123d701811000
+015622d7010001563ad70181090001813cd701ac22005fd701ac3100012b18c801242a00012b01ac51d70181210022d70181040001563dd70156060000001300015654d701560d00012b24d701813400015624d7012b0f0001ac21d701ac0200012b38d701810b0001813bd7012b22005ed701ac330001a416c801792d00
+012b01814ed701812100015622d7012b0500012b01ac3ad70181070000001400012b01ac50d701810f00015624d70156350024d701560e00012b22d70181040001ac35d701810d00015639d7012b23005dd701813400017916c8014f2f00012b01814bd701812200018122d70800015638d7018108000000160001814cd7
+01ac0156110001ac24d73600018123d701ac0e00018122d701560500018133d701810f00012b01ac36d7012b240001ac21d701ac39d701563500012416c83300015601ac47d70156230022d701ac0900012b01ac35d70181090000001700015649d701ac01561200012b24d701813600015624d7012b0e0000032b81ac00
+1fd7012b0600012b01ac30d701561200018133d701ac012b250001ac21d70156018136d701ac012b3700017914c801793500015601ac43d701ac012b2300012b01ac21d701810b00015601ac32d701560a0000001800012b018145d70181012b1400015624d701563600012b24d70181120000035681ac001ad701ac0900
+01812ed7012b1400012b01ac30d70181270001ac21d700038100560034d701813900012a14c83800012b018140d70181270000032b56ac001ed701560d0001812fd701ac012b0b0000001a00012b01ac41d70181012b160001ac24d7012b370001ac23d701ac150000032b56810017d701810a00012b01ac2ad701811800
+01562dd701ac0156280001ac21d701810200012b01ac30d701ac012b3b00019e12c801793b00015601ac3bd701ac012b2c0000035681ac001ad70f00012b01812cd701810d0000001c00015601ac3cd7018101561800012b24d701ac3800015624d7012b180000032b81ac0013d7012b0c00012b01ac26d701ac012b1b00
+01812ad701812a0001ac21d70181040001812ed701563d00012a12c83e0000032b56ac0036d701ac012b310000032b56ac0016d701811100012b018128d701ac012b0e0000001e00015601ac37d70003ac562b001b00022b0156028102ac1dd701813800012b24d701811c0000035681ac000ed701ac0f00012b01ac22d7
+01ac01561f00018101ac25d701812c0001ac21d701ac0500012b01ac2ad701814000017910c80179410000032b81ac0031d70181012b370000035681ac0012d7012b1400018101ac23d701ac012b100000002000012b018132d70003ac562b002700022b0156028102ac14d7012b390001ac24d71f0000032b5681000bd7
+0156110000032b81ac001dd701ac015623000156018120d7018101562e0001ac21d701ac0700015601ac25d701ac015643000fc8019e450000032b5681002bd701ac01563d0000032b56ac000ed701ac170000032b81ac001ed70181012b120000002300015601812bd70003ac8156003400012b0156028102ac0bd701ac
+820000032b81ac0006d701ac150000032b81ac0017d70003ac562b002800015601811ad701810156310001ac21d701ac0900012b018120d70003ac812b004500014f0ec8012a490000032b81ac0024d7000381562b00430000035681ac000ad701561a0000032b81ac0018d70181015615000000260000035681ac0023d7
+0004ac81562b3f00022b0156028102ac02d70181860000035681ac0002d70156180000042b5681ac0fd70003ac8156002f0000042b5681ac10d70004ac81562b340001ac21d701ac0c00015601811ad70003ac812b00490001790cc8014f4e0000032b56810002ac19d70004ac81562b4a0000032b56ac0006d701ac1f00
+00042b5681ac0ed701ac0281012b180000002a00012b028101ac18d702ac000381562b004d00012b8900012b01561f00032b01560481032b3a00032b015604810156032b3a0001ac21d701ac0f0000042b5681ac10d70004ac81562b4e0001790ac801795500022b015603810bac03810156012b540000035681ac0002d7
+01562500032b015603810156032b1d0000003000022b048107ac04810156022bff008b0001ac21d701ac15000c2b5500017908c8014fc300012b01564e000000ff00cf0001ac21d701ac7700012b019e04c80179012aff0015000000ff00cf0001ac21d701ac7a00022bff0018000000ff00cf0001ac21d701acff009400
+0000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff00
+94000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701acff0094000000ff00cf0001ac21d701ac7a000207ff0018000000ff00cf0001ac21d701ac750000030809100006110003
+10090800ff0013000000ff00cf0001ac21d701ac7200010101090e1101090101ff0010000000ff00cf0001ac21d701ac7100010912110109ff000f000000ff00cf0001ac21d701ac6f0001010110141101100101ff000d000000ff00cf0022d701ac6e00010118110108ff000c000000ff00cf0022d701ac6d0001011a11
+0108ff000b000000ff00cf0022d701ac6d001c110101ff000a000000ff00cf0022d701ac6c0001101c110110ff000a000000ff00cf0022d701ac6b0001081e110109ff0009000000ff00cf0022d701ac6b0020110101ff0008000000ff00cf0022d701ac6a00010920110109ff0008000000ff00cf0022d701ac6a000110
+21110101ff0007000000ff00cf0022d701ac6900010722110108ff0007000000ff00ce00012b22d701ac6900010922110109ff0007000000ff00ce00012b22d701ac690001102311ff0007000000ff00ce00012b22d701ac69002411ff0007000000ff00ce00012b22d701ac690024110107ff0006000000ff00ce000156
+22d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110107ff0006000000ff00ce00018122d701ac690024110101ff0006000000ff00ce0001ac22d701ac690001102311ff0007000000ff00ce0001ac22d701ac6900010922110110ff000700
+0000ff00ce0023d701ac6900010822110109ff0007000000ff00cd00012b23d701816a0022110101ff0007000000ff00cd00015623d701816a00010920110110ff0008000000ff00cd00018123d701816b0020110108ff0008000000ff00cd0001ac23d701816b0001091e110110ff0009000000ff00cd0024d701816c00
+01101d110101ff0009000000ff00cd0024d7012b6c0001011c110108ff000a000000ff00ce0000032b81ac0020d7012b6d0001011a110109ff000b000000ff00d20000042b5681ac1bd7012b6e00010118110109ff000c000000ff00d60000042b5681ac17d770000101011015110109ff000d000000ff00db0000032b81
+ac0013d772000109121101100107ff000e000000ff00df0000032b5681000fd77300010101090e1101100109ff0010000000ff00e30000042b5681ac09d701ac760001080110091101090108ff0012000000ff00e80000035681ac0005d701ac7900010105070101ff0015000000ff00ec0000052b81acd78100ff009500
+000000010000000000000000000000000000000000000000000000000000000001050000050000000d0000004d45544146494c455049435400085d000044e6fffff06f03000800085dbc190000
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00
+fefefe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefecb0098653200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000040302020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000504020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020600000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000004020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+030303030604040404040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000
+000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020203030306040404040404040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020203060405050000000000000000000000000000000000000005050404060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040505
+05000000000000000005050505040406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0d020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202030404050000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e
+0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000406030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303
+030303030303030303030303030303020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000506030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303030303030303030303030303030202020202020202020202020202020202020202020202020202
+020202020202020202020303030303030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202
+020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000005000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202
+020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020206000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020204000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020203060405000000000000000000000000000000000000000000000000000000
+000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202030400000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504040404060604040405000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+0202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000000000000000000000000000000000000000000000000000000000000000000000000504060302020202020202020202020202020604
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202
+0202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000000000006020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020203000000000000000000000000
+000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000050403020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406030303030306040405000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000
+000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202
+0202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202
+020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020300000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202
+02020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000050602020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020203000000000000000000000506020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+040000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202
+020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202030000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020400000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000030200000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020d0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020203020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000005020204000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000302020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+000000000000000004020206000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202
+020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202050000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000000000000000000000000000000000000000000000000000000402020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000302020202040000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+0202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000202020202030000000000
+000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000000005020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+000000000000050202020202020000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+0000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020300000000000000000000000000
+000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202
+020202020200000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000030202020202020400000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02
+020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000020202020202020600000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000006020202020202020200000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000003020202020202020205000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202050000000000000000000000
+000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020206000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f
+020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020203030404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020203000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202040000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000
+000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+050406030202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+000000020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202050000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202060500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+020202020000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202
+020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000602020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020200000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202
+020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+000003020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020500000000000000000000000000
+000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202
+020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202
+020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060404050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030303040404040505050505000000000000000000050505000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000
+000000000502020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202030e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+0202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+020202020202060000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+0000000000000006020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202020202
+020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+0000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+0202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000
+000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+0202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0003020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+0000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020d0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+0202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+020202020202020203000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+0000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202050004020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000302020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+0000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020202020202
+020204000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000002020202020205000000
+000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202
+020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202000000000000000000
+000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020206000000000000000000000000000000000000000000000000000000000000000000000002020202020204000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000004
+030202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000002020202020203000000000000000000000000000000000000000000000000000000000000000000000000000502
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030505020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+000000000000000602020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020400
+000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020205000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000000000000000
+000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000
+000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000
+000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020600000000000000
+000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202
+020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000050202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202
+020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000
+000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000302020202020202020202020202020202020202020202
+020202020202020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202
+020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040302020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000050602020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020305000000000000000000000000
+000000000000000000000000000000000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000502020202
+020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+000000000000000000000000060202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202030500000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000040602020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202040000
+000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060302020202
+030304050000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202030605
+000000000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040603030202020202030605000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406030303030604050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000005040603
+020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202030605000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040405050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000005050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+000000000004020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020300000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000406030202020202020202020202020306040500000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020204000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202
+020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005050404040505050500000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020206000000000000000000000000
+000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202
+020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000302020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202
+020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000
+000000000000000000000000000005020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202
+020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000002020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020200000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202030000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202050000000000000000000000000000
+000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000003020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020203000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000002
+020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+000000000000000000000000000000000006020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000502030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000030202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204
+000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000302020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000400
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202030500
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020206000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020206000000000000000000000000000000000000
+000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+020202020202020200000000000000000000000000000000000000000000000000000000000000000000040202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202030000000000000000000000000000000000
+000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020205
+000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202040000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+040202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+000602020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+060202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+000000000000000000000000000000000000000502020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000060202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202030500000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000050602020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020600000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202020202020305000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000060202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020206
+050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202060405000000000000000000000000000000000000000000000000000005020202020202020202040000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000
+000000000006020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000004020202
+020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+0302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+000000000000000000000000000000000000000000000002020202020202020202020202020203040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000005
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000
+000000000000000000000000000003020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020204000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000
+000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+020202020202020202020202020206040500000000000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202020204050000000000000000
+000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202030500000000000000000000
+000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000302020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202020202020202
+020202020202020203030604040505000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+000000000202020202020202020202020202020202020202020202020202020202020203060400000000000000000000000602020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202
+020202020202020202020604000000000000000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020605000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000000000050202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000
+000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504060202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020203060404050500000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000050202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000050603020202020202020202
+020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020304000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000
+000000000000000000000406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202030405000000
+000000000000000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000000000050406030202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303060404050500000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+000005040602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000
+000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060500000000000005020202020202020202020202020202
+020202020202020202020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040405000000000000000000000000000000000000
+000000000000050504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306020202020202020202020202020202020202020202020202
+020202020202020303030604040404030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030604040404060303030202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020306040500000000000000000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020203030604040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405
+000006020202020202020202020202020202020202020202020202020202020202020202020202020303030604040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020203030404040405050505050505040404040603030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020303030303030303030303030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202030602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f1002020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090c0a0b0b0b0b0b0b0a0c090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0802
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000
+000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020500000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020304050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c0202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203040500000000000000000000000000000000000000020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0a0c0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020306040500000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202090a0b0b0b0b0b0b0b0b0b0c0902020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202060405000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020708080808080702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304050004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}{\result {\insrsid2387180 {\nonshppict
+{\pict\picscalex26\picscaley26\piccropl0\piccropr0\piccropt0\piccropb0\picw23816\pich6588\picwgoal13502\pichgoal3735\wmetafile8\bliptag-1424617728\blipupi95{\*\blipuid ab160f00a4c36810b7379ad3d398dc7e}
+010009000003f4b701000000d3b7010000000400000003010800050000000b0200000000050000000c02fa008503030000001e00d3b70100410b2000cc00f900
+840300000000f9008403000000002800000084030000f90000000100080000000000000000000000000000000000000000000000000000000000ffffff00fefe
+fe00cbcbcb00656565003232320098989800cbfefe00cbcbfe0098cbfe003298fe000098fe0065cbfe009898320098650000cb986500fecbcb00cbcb9800fefe
+cb009865320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202000005050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202040000000000000000040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000040602020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000506020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000504020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000506
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202060500000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400
+00000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203050000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020200000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000005
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030306040404
+04040403030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100f0d0d0f1202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020303030604040404040404040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040505000000000000
+00000000000000000000000000050504040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0f0202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203060405050000000000000000000000000000000000000000050404030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000
+00000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202030304040405050500000000000000000505050504040603020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e
+0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203040500000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020203040405000000000000000000000000000000000000000000000000000000050406020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e
+0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000040603020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030303030303030303030303030303
+03030303030202020202020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030303030303030303
+03030303030303030302020202020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303030303030303
+03030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020d
+0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020204050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506030202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303030303030303030303
+03030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020203030303
+03030303030303030303030303030303030303030303030303030303030302020202020202020202020202020202020202020202020604000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000050403020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020206040000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000004030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202030405000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020206050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202030400000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020206050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020605
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e120202020202020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202
+02020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102
+02020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503020202
+02020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020600000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e130202020202020202020202020202020202020202020202020202020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020400000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020f
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020400000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020204
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505050000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506030202020202030604050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202020202020202020202020202020202020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020203
+04000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040404040606040404050000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202
+02020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202020304000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202060400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202
+0202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202
+02020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+02020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+00000000000000000000000000000000000000000000000000000000000000000000050406030202020202020202020202020202020202020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202040000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202
+03050000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040406
+03030303030604040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202
+02020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000030202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020200000000000000000000000000000000000000000000000000000005060302020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000050403
+02020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+0202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202040000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000005
+03020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000302
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e1102020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000
+00000002020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020200000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00050302020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000
+000004020202020202020202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000050202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202040000000000000000000000000000000000000403020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000060202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000
+00000000040202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+00000000000000020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000402020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020300000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+0000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202040000000000000000000000000506020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000002020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000
+000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020300000000000000000000050602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202040000000000000000060202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000
+00000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000040600000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202040000000000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020300000000000004020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+00000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000
+0000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020d0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202040000000402020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+00000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020300050302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000020205000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020300000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020206
+00000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202
+020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202030202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000050202040000000000000000000000000000000000000000000000000000
+00000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020206000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202
+02020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202
+02020202020300000000000000000000000000000000000000000000000000000000000000000402020600000000000000000000000000000000000000000000
+00000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202
+0202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206
+00000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000020202020000000000000000000000000000
+00000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202
+020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020205000000000000000000
+00000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000006020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000402020202040000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000004
+0202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0f020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000003020202020400
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+000000050202020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0f0202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000020202
+02020300000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000
+00000000000502020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+05020202020202000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000
+0000000000000000000000000602020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000040202020202020500000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000
+00000000020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000302020202020204000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020200000000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000002020202020202060000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+0000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000004020202020202020300000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000
+00000000000000000000000000000000000000060202020202020202000000000000000000000000000000000000000000000000000000000000000004020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202110e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020206000000000000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020400
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202060400000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020500000000000000000000000000000000000000000000000000000000000000
+00020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020f0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020400000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020204000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020203000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+0202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000060202020202020202020200000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202
+02020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020303040405000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202050000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+02020202020202060000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202
+0202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+06030202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000004020202020202020202020203000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000302
+020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000005040603020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020202020202030400000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000
+00000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0f0202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000050504040406030303030303030306000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202020202020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+0000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020605000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020206000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000006020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020202020202020202020202020203040000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202
+02020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+0000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020206000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000005020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000
+00000000000000060202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020305000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+0000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000
+00000602020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020500000000
+000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000
+00000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020205
+00000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020600000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202
+02020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+0202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202020202020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202
+02020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202
+02020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202
+02020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020200000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000402
+020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202
+02020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020300000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0d0202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+0000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030400000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000050403020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020604
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000000002020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000504030202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000602020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+0000000000000000000000000000000000000302020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004060302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000002
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000000000202020202020202000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000006
+02020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000
+00000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202030604050000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000000002020202020202030000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000004020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000
+0000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202030604040500000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000000030202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202030000000000
+000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020f0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020203030304040404050505050500000000000000000005050500
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000202020202020205000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040602020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000
+00000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020205000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020f0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020202000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005040603020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+00000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202030000000000000000
+00000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202
+0202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000050603020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020300000000
+00000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202020202020600000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202
+02020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202
+02020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202
+02020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202
+02020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000002020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+0202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000402020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020204
+00000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02020202020202060000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202
+02020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+06000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+02020206000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+02020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202020202020400000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202
+02020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000
+0402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000
+00000000000002020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000050202020202020202020202
+02020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+000000000402020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000
+00000000000000000000020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+02020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000502020202020202
+02020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000003020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202020202030302020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000
+00000000000000000000000000000202020202020000000000000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+02020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+0000000000000000000000000202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202020202020202020202020202020500040202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+00000000000000000000000000000000000002020202020200000000000000000000000000000000000000000000000000000000000000000000000000000402
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202
+02020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000006020202
+02020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000
+000000000000000000000000000000050202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e030202020202020202020202020202020202020202020202020202020202020202020202020202020400000005030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000
+00000000000000000000000000000000000000000000020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000030202020202
+02020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00030202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000050202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000030202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+0000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1002020202020202020202020202020202020202020202020202020202020202020202020202020300000000
+00000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000
+00000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000000000000000000000000000
+00000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202050000000000000000
+00000000000000000000000000000000000000000000000000000202020202020500000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000
+00000000000202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000
+00000000000302020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000
+000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020204
+00000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000002020202020205000000000000000000000000000000000000000000000000000000
+00000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000006020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000
+00000000000000000005020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000
+00000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000
+00000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202
+02020300000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000000020202020202050000000000000000000000000000000000000000000000
+00000000000000000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000
+00000000000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202030000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020206000000000000000000
+0000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202
+02020202020205000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020500
+00000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202040000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000002020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020600000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202000000000000
+00000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000002020202020206000000000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202020200000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202
+020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000020202020202030000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020203050502020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000
+00000000000000000000000000000000060202020202020202020202020202020202020202020202020202020202020202020202020202040000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202000000000000000000
+00000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202020202000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202
+04000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202
+02020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202020202020202020202020202020202
+02020202020202020202020202020202040000000000000000000000000000000000000000040302020202020202020202020202020202020202020202020202
+02020202020202020205000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000202020202020200000000000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020605000000030202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202020202020202020202020600000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020000000000
+00000000000000000000000000000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202060000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202020202020202
+06000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0302020202020202020202020202020202
+02020202020202020202020202020202020202030000000000000000000000000000000000000000000000040302020202020202020202020202020202020202
+02020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202
+02020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202
+02020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000002020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060500000000000502020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020200
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202020202020202
+02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+02020202020202020202020202020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02020202020202020202020202
+02020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000050602020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00050602020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000020202020202
+02040000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202020202
+02020202020202020202020202020204000000000000000000030202020202020202020202020202020202020202020202020202020202060000000000000000
+00000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202
+02020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202020202020202
+02020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+0202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e13020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000406020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202
+02020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000403020202020202020202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000202
+02020202020600000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202
+02020202020202020202020202020202030400000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000
+00000000000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202
+02020202020202020600000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202
+02020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005040302020202020202
+02020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202
+02020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005060202020202
+02020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202
+020202020202020202020202020202020202020202020202020d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000004
+06030202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000004060302020202030304050000000000000000000000000000000000000000000000000000000000000000000000000000
+00050202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+02020202020202020202020202020202020306050000000000000000000000000000030202020202020202020202020202020202020202020202020202020300
+00000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050406
+03030202020202030605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000005040603030303060405000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+04030202020202020202020206040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02
+02020202020202020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000000005040603020202020202020202020203060400000000000000000000000000000000000000000000000000000000000000000000000000000000
+05020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000502020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020203060500000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020600000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202
+02020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050504040404050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e1102020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000050505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000040202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202030405000000000000000000000000000000000000000000030202020202020202020202020202020202020202
+02020202020205000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000006020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e12020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000602020202020202020202020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000040202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000004060302020202020202020202020203060405000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020203000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000040202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000302020202020202020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000302020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000505040404050505050000000000000000000000000000000000000000000000000000000000000000030202020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000
+00000202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000005020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000003020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202
+02020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020204000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000020202020202020202020204000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030202
+02020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202030000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00040202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000402020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000602020202020202020202020204000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000003020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020202020200000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020202020202020202020202020202020e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0202020202020202020202020202020202020202020202020202020202020206000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000
+00000000060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203000000000000000000000000
+00000000000000000000000000000000000000000000000502020202020202020202020202020202020202020203000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+0202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020203
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020206000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000003020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202060000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202
+02020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e03020202020202020202020202020202020202020202020202020202
+02020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020400000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000040202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000
+00000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202
+02020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000003020202020202020202020202020202020203000000000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020205000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202
+02020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202
+02020202020202020202020500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202020202020202020202
+02020202030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202060000000000000000000000000000000000
+00000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000502030000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202
+02020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1102020202020202020202020202020202
+02020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202
+02020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202
+02020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020500000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000003020203000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202
+02020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e12020202020202020202020202
+02020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202
+02020202020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000050400000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020300000000000000000000
+00000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202
+02020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000006020202020305000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202020202020202020202
+02020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d020202020202020202
+02020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000402060000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020206000000000000
+00000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020500000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202
+02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e110202020202
+02020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000004020203
+05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+03020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000040202020202
+02020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000020600000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202040000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202
+02020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202030e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202
+02020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000
+04020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000006020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202
+03000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000003
+02020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202030000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020204000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202
+02020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000
+00000000030202020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000004020202020202020202020202020202020202020202020202020202030500000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202
+02020202060000000000000000000000000000000000000000000000000000000000000000000000000602020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000
+00000006020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000402020202050000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020600
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e1102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000402020202020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000
+00000000000000000202020202020202060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000004020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000
+00000000000000050202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000000006020202020204
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202
+02020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302020202
+02020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+00000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202120e0e0e0e0e0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206050000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000602020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000
+00000000000000000000000502020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000004020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050602020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020206000000000000000000000000000000000000000000000000
+00000000000000000000000003020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000000000030202
+02020202030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006020202020202020202
+02020202020202020204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050302
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000000006040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000050302020202020202020202020202020202020202020202020202020202020202020202020305000000000000000000000000000000000000
+00000000000000000000000000000004020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000006020202020202020202020202020202020202020202020202020202020202020202020304000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004030202020202
+02020202020202020202020202020206000000000000000000000000000000000000000000000000000000000000000000000000060202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000000000
+00000000000000000000000000000000040202020202020202020202020202020202020604050000000000000000000000000000000000000000000000000000
+05020202020202020202040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020202020202
+02020202020202020202020202020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+04020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000040206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202100e0e0e0e
+0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020304000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020306050000000000000000000000
+00000000000000000000000000000000000000060202020202020202020202020204000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020305000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403020202
+02020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000000000302020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000000000502020202020202020202020202020202020202020203060400000000000000000000000000000000000000
+00000000040202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000000000000402020202
+02020202020202020202020202020202020202020600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000506020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+00000000000000000000000000000402020305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020206050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060405000000
+00000000000000000000000000000000000000000000000202020202020202020202020202020304000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020605
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060202
+02020202020202020202020202020202020202020202030000000000000000000000000000000000000000000000000000000000000000000000000502020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202060000000000000000000000
+00000000000000000000000000000000000000000000000000030202020202020202020202020202020202020202020202020304050000000000000000000000
+00000000000000000302020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000000000000050302
+02020202020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000004020202020400000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000006020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020203060500000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000503020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030605000000000000000000000000000000000000000000000402020202020202020202020202020202020304000000000000000000000000000000000000
+00000000000000000000000000000000000000000000050302020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202060500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050603
+02020202020202020202020202020202020202020202020202020203030604040505000000000000000000000000000000000000000000000000000000000004
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020300000000000000
+00000000000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202060405000000
+00000000000000000000000502020202020202020202020202020203050000000000000000000000000000000000000000000000000000000000000000000005
+06020202020202020202020202020202020202020202020202020202020202020405000000000000000000000000000000000000000000000000000000000000
+00000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000050202020202030500000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f02020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000040302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020206040500000000000000000000000000000000000003020202020202020202020202020202020202020204050000000000000000000000
+00000000000000000000000000000000000000000000000005030202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506
+03020202020202020202020202020202020202020202020202020202020202020202020202020202030306040405050000000000000000000000000000000000
+00000003020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000
+00000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020202020202020202020202020202
+02030604000000000000000000000006020202020202020202020202020202020203040500000000000000000000000000000000000000000000000000000000
+00050602020202020202020202020202020202020202020202020202020202020202020202020604000000000000000000000000000000000000000000000000
+00000000000000000406020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000502020202020202060500000000000000000000000000000000000000000000000000000000
+00000000000000000005060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d02020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020306040000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000506020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202030605000000000000000000000000000005020202020202020202020202020202020202020202020203040500000000
+00000000000000000000000000000000000000000000000000000403020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504
+06020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020306040405050000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020203040500000000000005020202020202020202020202020202020202020202030405000000000000000000000000000000000000000000
+00000506030202020202020202020202020202020202020202020202020202020202020202020202020202020206040000000000000000000000000000000000
+00000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202030400000000000000000000000000000000000000000000
+00000000000000000000050403020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202110e0e0e0e0e0e0e0e0e0e0e0e0e0e10020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202030405000000000000000000000000000000000000
+00000000000000000000000000000000000004060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020206040500000000000000000000060202020202020202020202020202020202020202020202020202
+03040500000000000000000000000000000000000000000000000004060202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020206040500000000000000000000000000000000000000000000000000000000000000000000000504
+06030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030306040405050000040202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020604050000060202020202020202020202020202020202020202020202020306040500000000000000000000000000
+00000504060202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030604050000000000000000
+00000000000000000504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020604000000000000000000000000000000
+00000000000000000000000504030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405050000000000000000
+00000000000000000000000000000000000504060302020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202030605000000000000050202020202020202020202020202020202020202020202
+02020202020202020306040500000000000000000000000000000504040302020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020304040500000000000000000000000000000000000000000000000005050406
+03020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020203060202020202020202020202020202020202020202020202020202020202020203030306040404
+04030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020303
+03060404040406030303020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020203060405000000000000
+00000000000000000000050406030202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e0e0e0f020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030306
+04040405050505050505050505050404040603020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020206040500000602020202020202020202020202020202020202
+02020202020202020202020202020202020203030306040404060303030202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020203030404040405050505050505040404040603030202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+03030303030303030303030302020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020f0e0e0e0e0e0e0e0e11020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030602020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202030d0e0e0e0e0f10020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000
+00000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020500000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020205000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+05000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020808020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202090c0a0b0b0b0b0b0b0a0c09020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c070202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202050000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0a0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b090202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0702020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000000000000000000000000
+00000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000
+00000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000
+00000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c02020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000
+00000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+00000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020203000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030000000000000000000000000000000000000000000000000000000000000000000005020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020300000000000000000000000000000000000000000000000000000000000000000000050202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b02020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020203000000000000000000000000000000000000000000000000000000000000000000000502020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+08020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202060000000000000000000000000000000000000000000000000000000000000000000005020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b080202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020400000000000000000000000000000000000000000000000000000000000000000000050202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0802020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020204000000000000000000000000000000000000000000000000000000000000000000000502
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b08020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202040000000000000000000000000000000000000000000000000000000000000000
+00000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020500000000000000000000000000000000000000000000000000000000
+00000000000005020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020205000000000000000000000000000000000000000000000000
+00000000000000000000050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202000000000000000000000000000000000000000000
+00000000000000000000000000000502020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090b0b0b0b0b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202030000000000000000000000000000000000
+00000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020b0b0b
+0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020600000000000000000000000000
+00000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020204000000000000000000
+00000000000000000000000000000000000000000000000000000402020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202050000000000
+00000000000000000000000000000000000000000000000000000000000004020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a02020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020000
+00000000000000000000000000000000000000000000000000000000000000000000040202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020000000000000000000000000000000000000000000000000000000000000000000000000302020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202030405000000000000000000000000000000000000000000000000000000000000000003020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020203060405000000000000000000000000000000000000000000000000000000030202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+0202020202020202020202020202020202020202020202020202020202070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020306040500000000000000000000000000000000000000000000000202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0c020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020304050000000000000000000000000000000000000002020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a08020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202030604000000000000000000000000000000020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202070c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0c02
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203060405000000000000000000050202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202090a0b0b0b0b0b0b0b0b0b0c
+09020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206040500000000
+00050202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020708080808
+08070202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02030405000402020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
+020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202040000002701ffff030000000000}}}}}}{\insrsid2387180 
+\par }}\dpx5832\dpy720\dpxsize3456\dpysize955\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}}{\insrsid2387180 
+\par }}{\footerf \pard\plain \s33\qj \li0\ri0\sa120\widctlpar\brdrt\brdrs\brdrw15\brsp120 \tqc\tx4950\tqc\tx9000\tqc\tx9090\tqr\tx10490\aspalpha\aspnum\faauto\adjustright\rin0\lin0\rtlgutter\itap0 
+\scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid2387180 \'a9 Copyright Symbian Ltd. }{\field{\*\fldinst {\insrsid2387180  DATE \\@ "yyyy" }}{\fldrslt {\lang1024\langfe1024\noproof\insrsid14837579 2004}}}{\insrsid2387180 
+. This document may not be reproduced in any form, in whole or in part, by any means whatsoever, without the written permission of the copyright holder. 
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \s32\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par }\pard\plain \s27\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \b\f1\fs32\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\fs24\insrsid9137866 
+\par 
+\par }{\insrsid9137866 {\*\bkmkstart DocTitle}<Unit/Component/Component Integration Name> Test Specification{\*\bkmkend DocTitle}
+\par }\pard\plain \s19\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i0\fs28\insrsid9137866 
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt
+\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Security Classification:\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 {\*\bkmkstart SecurityClass}<Security Classification>{\*\bkmkend SecurityClass}\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl 
+\clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Document Reference:\cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 {\*\bkmkstart DocRef}<SXX.XXXnnn.nnn>{\*\bkmkend DocRef}\cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow1\irowband1
+\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl
+\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\insrsid9137866 \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\fs28\insrsid9137866 \trowd \irow2\irowband2
+\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl
+\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Status:\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 {\*\bkmkstart Status}<Draft>{\*\bkmkend Status}\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow3\irowband3\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl 
+\clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Version:\cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 {\*\bkmkstart Version}<X.X>{\*\bkmkend Version}\cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\fs28\insrsid9137866 \trowd \irow4\irowband4
+\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl
+\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Last Revised Date:\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Day> <Month> <Year> \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\b\fs28\insrsid9137866 \trowd \irow5\irowband5\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil 
+\cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow6\irowband6
+\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl
+\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Team/Department :\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Team/Department>\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\b\fs28\insrsid9137866 \trowd \irow7\irowband7\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil 
+\cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Author(s):\cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Name>\cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow8\irowband8
+\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl
+\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Owner(s):\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Name>\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\b\fs28\insrsid9137866 \trowd \irow9\irowband9\lastrow \ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl 
+\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth6120\clshdrawnil \cellx8910\row }\pard\plain 
+\s19\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i0\fs28\insrsid9137866 
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl 
+\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1980\clshdrawnil \cellx4770\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl 
+\clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1710\clshdrawnil \cellx6480\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2610\clshdrawnil \cellx9090\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i\fs28\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb
+\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1980\clshdrawnil \cellx4770\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1710\clshdrawnil \cellx6480\clvertalt\clbrdrt
+\brdrs\brdrw15 \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2610\clshdrawnil \cellx9090\row }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Approver(s):\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Names>\cell }\pard\plain \s31\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Distribution:\cell }\pard\plain \s32\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Names>\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\b\i\fs28\insrsid9137866 \trowd \irow1\irowband1\lastrow \ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl 
+\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1980\clshdrawnil \cellx4770\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl 
+\clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth1710\clshdrawnil \cellx6480\clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth3\clwWidth2610\clshdrawnil \cellx9090\row }\pard\plain 
+\s19\ql \li0\ri0\sa120\widctlpar\tx4820\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\i0\fs28\insrsid9137866 
+\par }\pard \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 {\insrsid9137866 Instructions and advice for using this template (such as this paragraph) must be deleted from your document before distribution. 
+
+\par The essential parts
+ of the document information in the table above are automatically repeated on additional pages by enclosing them in Microsoft Word bookmarks. Bookmarks appear as square brackets around the bookmarked text when the option to view bookmarks is switched on. 
+
+\par Bookmarks can be made visible by selecting Tools | Options on your menu bar and then clicking on Bookmarks in the View tab. 
+\par Take care to insert your replacement text between the bookmark brackets, and to avoid accidentally deleting them.
+\par To avoid deleting bookmarks, type within the <> and only delete the < and > afterwards.
+\par The information typed into the table bookmarks above is repeated in various places but mainly the header and footers of the document. To ensure your bookmarks update in all places corre
+ctly, please use Ctrl A, F9 to select and update document information, in Normal View. Do this once each time you update the table above.
+\par The following notes explain some of the entries on the front page:
+\par }{\b\insrsid9137866 Security Classification}{\insrsid9137866  \endash  the Classification set out in the Security Classification Standard;
+\par }{\b\insrsid9137866 Document Reference}{\insrsid9137866  \endash 
+ the number derived from the Project / Activity number assigned in the Object Numbering Tool.  For further details see the Object Referencing Standard, in particular section 4 that sets out the standard file\_naming convention;
+\par }{\b\insrsid9137866 Status}{\insrsid9137866  \endash  DRAFT (under construction), FOR REVIEW (ready for the review team) or ISSUED (reviewed and approved by the approver(s));
+\par }{\b\insrsid9137866 Owner}{\insrsid9137866 (s) \endash  the person(s) responsible for the maintenance of the document;
+\par }{\b\insrsid9137866 Approver}{\insrsid9137866 (s) \endash  the person(s) or body responsible for the approval of the document.
+\par For standard paragraph text, the \lquote Normal\rquote  style should be used rather than \lquote Default Paragraph Font\rquote . For all formatting, you should use Word styles \endash  these can be chosen for example, by using the style drop\_
+down list at the left\_hand side of the toolbar or the menu option Format | Style.
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par }\pard\plain \s34\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \page Contents
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tx400\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\field\fldedit{\*\fldinst {
+\b0\fs24\insrsid9137866  TOC \\o "1-3" }}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 1\tab Introduction\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093269 \\h }{
+\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200360039000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 4}}}{
+\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 1.1\tab Purpose and Scope\tab }
+{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093270 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370030000000}}}{\fldrslt {\insrsid9137866 4}}}{\insrsid9137866 
+
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tx400\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 
+2\tab Test Environment\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093271 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370031000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 4}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 2.1\tab Overview\tab }
+{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093272 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370032000000}}}{\fldrslt {\insrsid9137866 4}}}{\insrsid9137866 
+
+\par 2.2\tab Hardware\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093273 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370033000000}}}{\fldrslt {
+\insrsid9137866 4}}}{\insrsid9137866 
+\par 2.3\tab Software\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093274 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370034000000}}}{\fldrslt {
+\insrsid9137866 5}}}{\insrsid9137866 
+\par 2.4\tab Network\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093275 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370035000000}}}{\fldrslt {\insrsid9137866 
+5}}}{\insrsid9137866 
+\par 2.5\tab Test Data\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093276 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370036000000}}}{\fldrslt {
+\insrsid9137866 5}}}{\insrsid9137866 
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tx400\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 
+3\tab Test Running\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093277 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370037000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 5}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 3.1\tab Test Run Organisation
+\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093278 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370038000000}}}{\fldrslt {\insrsid9137866 5}}}{
+\insrsid9137866 
+\par 3.2\tab Test Documentation\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093279 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200370039000000}}}{\fldrslt {
+\insrsid9137866 5}}}{\insrsid9137866 
+\par 3.3\tab Test Set\_up Instructions\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093280 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380030000000}}
+}{\fldrslt {\insrsid9137866 6}}}{\insrsid9137866 
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tx400\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 
+4\tab Test Cases\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093281 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380031000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 6}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par 5\tab Further Information\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093282 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380032000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 7}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 5.1\tab People\tab }
+{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093283 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380033000000}}}{\fldrslt {\insrsid9137866 7}}}{\insrsid9137866 
+
+\par 5.2\tab References\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093284 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380034000000}}}{\fldrslt {
+\insrsid9137866 7}}}{\insrsid9137866 
+\par 5.3\tab Open Issues\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093285 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380035000000}}}{\fldrslt {
+\insrsid9137866 7}}}{\insrsid9137866 
+\par 5.4\tab Glossary\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093286 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380036000000}}}{\fldrslt {
+\insrsid9137866 7}}}{\insrsid9137866 
+\par 5.5\tab Document History\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093287 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380037000000}}}{\fldrslt {
+\insrsid9137866 7}}}{\insrsid9137866 
+\par 5.6\tab Document Review Date\tab }{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093288 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380038000000}}}{\fldrslt {
+\insrsid9137866 7}}}{\insrsid9137866 
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 
+Appendix A - <Appendix Title>\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093289 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200380039000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 8}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 A.1\tab Appendix Heading 1\tab 
+}{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093290 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200390030000000}}}{\fldrslt {\insrsid9137866 8}}}{
+\insrsid9137866 
+\par }\pard\plain \s29\ql \li400\ri0\widctlpar\tx1200\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin400\itap0\pararsid9137866 \i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 A.1.1\tab 
+Appendix Heading 2\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093291 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200390031000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 8}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s26\ql \li0\ri43\sb120\sa120\widctlpar\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0\pararsid9137866 \b\caps\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 
+Appendix B - <Appendix Title>\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093292 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200390032000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 8}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s28\ql \li200\ri0\widctlpar\tx800\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin200\itap0\pararsid9137866 \scaps\f1\fs20\lang1024\langfe1024\cgrid\noproof\langnp2057\langfenp2052 {\insrsid9137866 B.1\tab Appendix Heading 1\tab 
+}{\field{\*\fldinst {\insrsid9137866  PAGEREF _Toc45093293 \\h }{\insrsid9137866 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200390033000000}}}{\fldrslt {\insrsid9137866 8}}}{
+\insrsid9137866 
+\par }\pard\plain \s29\ql \li400\ri0\widctlpar\tx1200\tqr\tldot\tx9448\aspalpha\aspnum\faauto\adjustright\rin0\lin400\itap0\pararsid9137866 \i\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\lang1024\langfe1024\noproof\insrsid9137866 B.1.1\tab 
+Appendix Heading 2\tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\insrsid9137866  PAGEREF _Toc45093294 \\h }{\lang1024\langfe1024\noproof\insrsid9137866 {\*\datafield 
+08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d0000005f0054006f006300340035003000390033003200390034000000}}}{\fldrslt {\lang1024\langfe1024\noproof\insrsid9137866 8}}}{\lang1024\langfe1024\noproof\insrsid9137866 
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 }}\pard\plain 
+\s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\fs24\insrsid9137866 
+\par }\pard\plain \s30\ql \li1000\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin1000\itap0\pararsid9137866 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par {\*\bkmkstart _Toc420414641}{\*\bkmkstart _Toc531073751}{\*\bkmkstart _Toc531074046}{\listtext\pard\plain\s1 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 1\tab}}\pard\plain \s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \page {\*\bkmkstart _Toc45093269}Introduction{\*\bkmkend _Toc420414641}
+{\*\bkmkend _Toc531073751}{\*\bkmkend _Toc531074046}{\*\bkmkend _Toc45093269}
+\par {\*\bkmkstart _Toc420154979}{\*\bkmkstart _Toc420156457}{\*\bkmkstart _Toc420414642}{\*\bkmkstart _Toc531073752}{\*\bkmkstart _Toc531074047}{\*\bkmkstart _Toc45093270}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 
+\hich\af1\dbch\af0\loch\f1 1.1\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Purpose and Scope{\*\bkmkend _Toc420154979}{\*\bkmkend _Toc420156457}{\*\bkmkend _Toc420414642}{\*\bkmkend _Toc531073752}{\*\bkmkend _Toc531074047}{\*\bkmkend _Toc45093270}
+
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 {\*\bkmkstart _Toc419889484}{\*\bkmkstart _Toc420414643}
+Identify the Test Specification\rquote s purpose and its scope in terms of:
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Project it relates to;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Test Phases it applies to;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Identify what\rquote s under test;
+\par {\*\bkmkstart _Toc45093271}{\listtext\pard\plain\s1 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2\tab}}\pard\plain \s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Environment{\*\bkmkend _Toc45093271}
+\par {\*\bkmkstart _Toc45093272}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.1\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Overview{\*\bkmkend _Toc45093272}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Provide a brief summary of the environment(s) to be used for each Test Phase. Diagrams may all that it is needed or references to documents where the entire environment is defined. The following subsections can then be far less detailed in content.
+\par The purpose of this section is not to enable a tester to set up for individual tests. Rather it is to:
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls5\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Allow the Developer or Test Engineer to plan to assemble and build the required environment prior to testing;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls5\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Provide an introduction to the test environment to be used for individual tests.
+\par }\pard \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 {\insrsid9137866 Individual Test Scripts should be used to describe in detail how to set up individual tests, that is, the Test Steps.
+\par {\*\bkmkstart _Toc45093273}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.2\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Hardware{\*\bkmkend _Toc45093273}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+List and describe the hardware to be employed for each Test Phase.
+\par Examples include specification of: 
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Mobile phones (GSM, GPRS);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 CF cards;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 CF to PC-card adapters;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 RS-232 to PC-card adapters;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 IR to RS-232 Pods;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Boards (ASSABET, LUBBOCK etc);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 WAP Push Server;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Bluetooth (Headsets, Pods);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Dongles;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Web server;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 E-mail server;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Symbian devices (LINDA etc);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 PCs (Portables, Desktops);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Modems;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls6\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Programming PCs (as in test hardware ROM downloading/debugging [on-target]).
+\par {\*\bkmkstart _Toc45093274}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.3\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Software{\*\bkmkend _Toc45093274}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 List and describe the suppor
+ting software and tools to be used for each Test Phase, including version numbers. Examples include specification of:
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls7\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Operating Systems (Windows\~NT4, Windows\~95, Windows\~98, Windows\~ME, Windows\~2000, Windows\~XP);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls7\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Development Software (Microsoft Visual Studio C++, Wins Emulator, Hyper Terminal, Code Warrior);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls7\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Test Software: (TechView, STAT).
+\par {\*\bkmkstart _Toc45093275}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.4\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Network{\*\bkmkend _Toc45093275}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Describe network set\_up, for example, in terms of:
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls8\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Internet Service Provider (ISP);
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls8\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 GSM Network Operator;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls8\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 GPRS Network Operator.
+\par {\*\bkmkstart _Toc45093276}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.5\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Data{\*\bkmkend _Toc45093276}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 List standard data files (e.g. \lquote config db\rquote 
+) to be used including version numbers. 
+\par {\*\bkmkstart _Toc45093277}{\listtext\pard\plain\s1 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 3\tab}}\pard\plain \s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Running{\*\bkmkend _Toc45093277}
+\par {\*\bkmkstart _Toc45093278}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 3.1\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Run Organisation{\*\bkmkend _Toc45093278} 
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+It is common to run tests in batches of related or dependent tests. The Test Specification should explain the organisation of these. Sometimes a batch of tests
+ will differ only in the environments that they are run, i.e. the Test Scripts remain the same. So the Test Specification should also explain how each batch is initiated and which environment is to be used.
+\par This information may be suitably presented in a table similar to:
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trhdr\trbrdrt\brdrs\brdrw15\brdrcf15 \trbrdrl\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\pard\plain 
+\s17\ql \li0\ri0\sa120\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\cf0\insrsid9137866 Batch #\cell Batch Description\cell Test Environment\cell 
+Test Scripts\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trhdr\trbrdrt
+\brdrs\brdrw15\brdrcf15 \trbrdrl\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\row }\trowd \irow1\irowband1\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf15 \trbrdrl
+\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 1\cell Send and receive SMS \cell Component Test 1 (LUBBOCK)\cell 
+Internet Set-up 1,
+\par Contacts 56, 
+\par SMS 7, 
+\par SMS 8\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow1\irowband1\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf15 
+\trbrdrl\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\row }\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 2\cell Send and receive SMS \cell Component Test 2 (ASSABET)\cell 
+Internet Set-up 1,
+\par Contacts 56, 
+\par SMS 7, 
+\par SMS 8\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow2\irowband2\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf15 
+\trbrdrl\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\row }\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 3\cell Send and receive e-mail (POP3)\cell Component Test 1 (LUBBOCK)\cell 
+Internet Set-up 1,
+\par Contacts 56,
+\par EMAIL POP 1\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow3\irowband3\lastrow \ts11\trgaph108\trleft-108\trbrdrt
+\brdrs\brdrw15\brdrcf15 \trbrdrl\brdrs\brdrw15\brdrcf15 \trbrdrb\brdrs\brdrw15\brdrcf15 \trbrdrr\brdrs\brdrw15\brdrcf15 \trbrdrh\brdrs\brdrw15\brdrcf15 \trbrdrv\brdrs\brdrw15\brdrcf15 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 
+\cltxlrtb\clftsWidth3\clwWidth967\clshdrawnil \cellx859\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2951\clshdrawnil \cellx3810
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2871\clshdrawnil \cellx6681\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf15 \clbrdrl
+\brdrs\brdrw15\brdrcf15 \clbrdrb\brdrs\brdrw15\brdrcf15 \clbrdrr\brdrs\brdrw15\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1747\clshdrawnil \cellx8428\row }\pard \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 {
+\insrsid9137866 
+\par {\*\bkmkstart _Toc45093279}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 3.2\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Documentation{\*\bkmkend _Toc45093279}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Standard test documentation consists of the Test Strategy, Test Plans, Test Specifications, Test Cases, Test Scripts, Test Harnesses, Test Data and Test Logs (including results), Test Report. If any of these are excluded, this should be stated here.
+
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 If any non\_
+standard documentation is to be produced and version controlled, they should be listed here.
+\par {\*\bkmkstart _Toc45093280}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 3.3\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Set\_up Instructions{\*\bkmkend _Toc45093280}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Where testing is automated, it is inappropriate to add detailed instructions to setting up tests in test harness code. Therefore, this section should be used to detail how tests should be prepared for and how individual test harnesses should be run.
+
+\par {\*\bkmkstart _Toc45093281}{\listtext\pard\plain\s1 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 4\tab}}\pard\plain \s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Test Cases{\*\bkmkend _Toc45093281}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 All Test Cases should be identified and defined at a high\_
+level in a table similar to the one below. Note that this is a HIGH\_LEVEL definition. Individual test steps and individual expected (and actual) results should be described in separate Test Script documents. 
+\par Whilst its content is mandatory, the table format below is only a recommendation. Other formats, such as spreadsheets or database tables, that are separate to the Test Specification are also acceptable. Where another file is used, a
+ reference must be provided.
+\par The following recommendations are also made:
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 One Test Case per table;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 Have a different heading for each Test Case, e.g. 4.1 {\*\bkmkstart _Toc11467091}{\*\bkmkstart _Toc30581334}UAProf{\*\bkmkend _Toc11467091}
+{\*\bkmkend _Toc30581334} Basic Check;
+\par {\pntext\pard\plain\s19 \fs20\cf6\loch\af3\hich\af3\dbch\af0\insrsid9137866 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang 
+{\pntxtb \'b7}}\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 If the name of the Test Specification doesn\rquote t make this clear, the Test Phase(s) th
+at the Test Case will be run under should be recorded, e.g. with separate headings, for example, 4.1.1 UAProf Basic Check Unit Test, 4.1.2 UAProf Basic Check Component Integration Testing.
+\par }\pard \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 {\insrsid9137866 The headings can also be further broken down into any subject material that is relevant to an individual project.
+\par Each Test Case must be mapped to either:
+\par {\pntext\pard\plain\s19 \i\fs20\cf6\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 (a)\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0
+\pnlcltr\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb (}{\pntxta )}}\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 
+at least one requirement statement in the Requirements Specification (System Testing and Acceptance Testing); or
+\par {\pntext\pard\plain\s19 \i\fs20\cf6\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 (b)\tab}}\pard \s19\ql \fi-360\li360\ri0\sa120\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0
+\pnlcltr\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb (}{\pntxta )}}\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin360\itap0\pararsid9137866 {\insrsid9137866 at least one design statement in the appropriate Functi
+onal Specification (Unit Testing, Component Testing and Component Integration Testing).
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trhdr\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
+\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb
+\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth3162\clcbpatraw8\clshdngraw1250 \cellx4296\clvertalc\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw5 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth2238\clcbpatraw8\clshdngraw1250 \cellx6534\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1530\clcbpatraw8\clshdngraw1250 \cellx8064\pard\plain \ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\b\insrsid9137866 Test No.:\cell Test Name:\cell Requirements Or Functional Spec Statements Tested:\cell Priority:\cell }\pard 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft-108\trhdr\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
+\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth3162\clcbpatraw8\clshdngraw1250 \cellx4296\clvertalc\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw5 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth2238\clcbpatraw8\clshdngraw1250 \cellx6534\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1530\clcbpatraw8\clshdngraw1250 \cellx8064\row }\trowd \irow1\irowband1\ts11\trgaph108\trrh1502\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 
+\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth3162\clcbpatraw8\clshdngraw1250 \cellx4296\clvertalc\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw5 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth2238\clcbpatraw8\clshdngraw1250 \cellx6534\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1530\clcbpatraw8\clshdngraw1250 \cellx8064\pard\plain \s35\ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b\f1\insrsid9137866 HTTP-I-2000\cell }\pard\plain \ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\cf1\cgrid0\insrsid9137866 A simple connect request}{\insrsid9137866 \cell }\pard \ql \li0\ri0\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 {
+\dbch\af11\insrsid9137866 \hich\af1\dbch\af11\loch\f1 367
+\par \hich\af1\dbch\af11\loch\f1 367.2
+\par \hich\af1\dbch\af11\loch\f1 367.2.1
+\par \hich\af1\dbch\af11\loch\f1 367.2.2.1
+\par }\pard \ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 {\dbch\af11\insrsid9137866 \hich\af1\dbch\af11\loch\f1 367.2.4}{\insrsid9137866 \cell 1\cell }\pard 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\insrsid9137866 \trowd \irow1\irowband1\ts11\trgaph108\trrh1502\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
+\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth3162\clcbpatraw8\clshdngraw1250 \cellx4296\clvertalc\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw5 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth2238\clcbpatraw8\clshdngraw1250 \cellx6534\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1530\clcbpatraw8\clshdngraw1250 \cellx8064\row }\trowd \irow2\irowband2\ts11\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
+\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
+\clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth6930\clshdrawnil \cellx8064
+\pard\plain \s35\ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b\f1\insrsid9137866 Actions:\cell }\pard\plain 
+\ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\cf1\cgrid0\insrsid9137866 A content request is made, to a UAProf compliant server.
+\par Basic Profile and Profile-Diff files are in existence, they are added to the correct request header.}{\insrsid9137866 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\insrsid9137866 \trowd \irow2\irowband2
+\ts11\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt
+\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb
+\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth6930\clshdrawnil \cellx8064\row }\pard \ql \li0\ri0\sa120\keepn\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 {\b\insrsid9137866 Expected Result:\cell }{
+\cf1\cgrid0\insrsid9137866 Connection is established }{\insrsid9137866 Profile and Profile-Diff headers together with the corresponding CPI data is sent to the WAP GW}{\cf1\cgrid0\insrsid9137866 
+ and returns a profile-warning header with a status code of value 100(\'93Ok\'94).}{\insrsid9137866 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\insrsid9137866 \trowd \irow3\irowband3\lastrow 
+\ts11\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt
+\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1250\cltxlrtb\clftsWidth3\clwWidth1242\clcbpatraw8\clshdngraw1250 \cellx1134\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb
+\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth6930\clshdrawnil \cellx8064\row }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 
+\i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par \page The following section, essentially information about the document rather than its contents, should be put in as the last section of the document
+\par {\*\bkmkstart _Toc45093282}{\listtext\pard\plain\s1 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5\tab}}\pard\plain \s1\ql \li0\ri43\sb120\sa120\keepn\widctlpar
+\jclisttab\tx432\aspalpha\aspnum\faauto\ls2\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Further Information{\*\bkmkend _Toc45093282}
+\par {\*\bkmkstart _Toc45093283}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5.1\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 People{\*\bkmkend _Toc45093283}
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1620\clcbpatraw8\clshdngraw2500 \cellx1620\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth7470\clcbpatraw8\clshdngraw2500 \cellx9090\pard\plain \s17\ql \li0\ri0\sa120\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Role\cell Person / People\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 
+\trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1620\clcbpatraw8\clshdngraw2500 \cellx1620\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 
+\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth7470\clcbpatraw8\clshdngraw2500 \cellx9090\row }\trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl
+\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1620\clshdrawnil \cellx1620\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth7470\clshdrawnil \cellx9090\pard\plain \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Contributor(s)\cell \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt
+\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1620\clshdrawnil \cellx1620\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth7470\clshdrawnil \cellx9090\row }\pard\plain \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Reviewer(s)\cell \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow2\irowband2\lastrow \ts11\trgaph108\trleft0\trbrdrt
+\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1620\clshdrawnil \cellx1620\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth7470\clshdrawnil \cellx9090\row {\*\bkmkstart _Toc45093284}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5.2\tab}}\pard\plain 
+\s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 References
+{\*\bkmkend _Toc45093284}
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth709\clcbpatraw8\clshdngraw2500 \cellx709\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth2410\clcbpatraw8\clshdngraw2500 \cellx3119\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1021\clcbpatraw8\clshdngraw2500 \cellx4140\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth4950\clcbpatraw8\clshdngraw2500 \cellx9090\pard\plain \s17\ql \li0\ri0\sa120\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 No.\cell Document Reference\cell Version\cell Description\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 
+\trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth709\clcbpatraw8\clshdngraw2500 \cellx709\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 
+\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth2410\clcbpatraw8\clshdngraw2500 \cellx3119\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb
+\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1021\clcbpatraw8\clshdngraw2500 \cellx4140\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 
+\clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth4950\clcbpatraw8\clshdngraw2500 \cellx9090\row }\trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb
+\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt
+\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth709\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 
+\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2410\clshdrawnil \cellx3119\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth1021\clshdrawnil \cellx4140\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4950\clshdrawnil \cellx9090
+\pard\plain \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 [1]\cell \cell \cell \cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl
+\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth709\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth2410\clshdrawnil \cellx3119\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1021\clshdrawnil \cellx4140
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4950\clshdrawnil \cellx9090\row }\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 [2]\cell \cell \cell \cell }\pard\plain 
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow2\irowband2\lastrow \ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl
+\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth709\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth2410\clshdrawnil \cellx3119\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1021\clshdrawnil \cellx4140
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4950\clshdrawnil \cellx9090\row }\pard\plain 
+\s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par If you select the document description, then Ctrl+k you can input the URL or file location of the reference document, thus making it easier for the reader to locate the document.
+\par {\*\bkmkstart _Toc45093285}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5.3\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Open Issues{\*\bkmkend _Toc45093285}
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+The following issues need to be resolved before this document is completed;
+\par {\pntext\pard\plain\fs20\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard \ql \fi-360\li420\ri0\sa120\widctlpar\jclisttab\tx420{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang {\pntxta .}}
+\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin420\itap0\pararsid9137866 {\insrsid9137866  
+\par {\pntext\pard\plain\fs20\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \ql \fi-360\li420\ri0\sa120\widctlpar\jclisttab\tx420{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang {\pntxta .}}
+\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin420\itap0\pararsid9137866 {\insrsid9137866  
+\par {\pntext\pard\plain\fs20\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \ql \fi-360\li420\ri0\sa120\widctlpar\jclisttab\tx420{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang {\pntxta .}}
+\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin420\itap0\pararsid9137866 {\insrsid9137866 
+\par {\*\bkmkstart _Toc45093286}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5.4\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Glossary{\*\bkmkend _Toc45093286} 
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 The following technical terms and abbreviations are used within this
+ document.
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth2430\clcbpatraw8\clshdngraw2500 \cellx2430\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth6660\clcbpatraw8\clshdngraw2500 \cellx9090\pard\plain \s17\ql \li0\ri0\sa120\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Term\cell Definition \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 
+{\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth2430\clcbpatraw8\clshdngraw2500 \cellx2430\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth6660\clcbpatraw8\clshdngraw2500 \cellx9090\row }\trowd \irow1\irowband1\lastrow \ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr
+\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 
+\clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2430\clshdrawnil \cellx2430\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 
+\clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth6660\clshdrawnil \cellx9090\pard\plain \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 
+\f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \cell \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\trowd \irow1\irowband1\lastrow \ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2430\clshdrawnil \cellx2430\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth6660\clshdrawnil \cellx9090\row {\*\bkmkstart _Toc45093287}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 5.5\tab}}\pard\plain 
+\s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Document History{\*\bkmkend _Toc45093287}
+\par }\trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1340\clcbpatraw8\clshdngraw2500 \cellx1340\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth927\clcbpatraw8\clshdngraw2500 \cellx2267\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth890\clcbpatraw8\clshdngraw2500 \cellx3157\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1190\clcbpatraw8\clshdngraw2500 \cellx4347\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth4725\clcbpatraw8\clshdngraw2500 \cellx9072\pard\plain \s17\ql \li0\ri0\sa120\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2387180 
+\b\f1\fs18\cf1\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Date\cell Version\cell Status\cell Author\cell Description\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 
+\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow0\irowband0\ts11\trgaph108\trleft0\trhdr\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 
+\trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1340\clcbpatraw8\clshdngraw2500 \cellx1340\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 
+\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth927\clcbpatraw8\clshdngraw2500 \cellx2267\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb
+\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth890\clcbpatraw8\clshdngraw2500 \cellx3157\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 
+\clbrdrr\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth1190\clcbpatraw8\clshdngraw2500 \cellx4347\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \clcbpat8\clshdng2500\cltxlrtb\clftsWidth3\clwWidth4725\clcbpatraw8\clshdngraw2500 \cellx9072\row }\trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb
+\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt
+\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1340\clshdrawnil \cellx1340\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 
+\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth927\clshdrawnil \cellx2267\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth890\clshdrawnil \cellx3157\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1190\clshdrawnil \cellx4347
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4725\clshdrawnil \cellx9072\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 dd-mm-yyyy\cell }\pard 
+\s20\qc \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 {\insrsid9137866 1.0\cell Issued\cell }\pard \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 {
+\insrsid9137866 <Name>\cell \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 \trowd \irow1\irowband1\ts11\trgaph108\trleft0\trbrdrt
+\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 
+\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1340\clshdrawnil \cellx1340\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth927\clshdrawnil \cellx2267\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth890\clshdrawnil \cellx3157
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1190\clshdrawnil \cellx4347\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4725\clshdrawnil \cellx9072\row }\pard\plain 
+\s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 \f1\fs18\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 dd-mm-yyyy\cell }\pard 
+\s20\qc \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 {\insrsid9137866 0.1\cell Draft\cell }\pard \s20\ql \li0\ri43\sb40\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin43\lin0\pararsid2387180 {
+\insrsid9137866 <Name>\cell First draft based upon SGL.PR0073.035 Test Specification Template Rev1.1.\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {
+\insrsid9137866 \trowd \irow2\irowband2\lastrow \ts11\trgaph108\trleft0\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv
+\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tbllkborder\tbllkshading\tbllkfont\tbllkbestfit\tbllkhdrrows\tbllkhdrcols \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 
+\clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1340\clshdrawnil \cellx1340\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 
+\cltxlrtb\clftsWidth3\clwWidth927\clshdrawnil \cellx2267\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth890\clshdrawnil \cellx3157
+\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1190\clshdrawnil \cellx4347\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4725\clshdrawnil \cellx9072\row {\*\bkmkstart _Toc45093288}{\listtext\pard\plain\s2 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 
+\hich\af1\dbch\af0\loch\f1 5.6\tab}}\pard\plain \s2\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar\jclisttab\tx576\aspalpha\aspnum\faauto\ls2\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 
+\b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Document Review Date{\*\bkmkend _Toc45093288}
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 This section
+ should contain the date after which the document should either be reviewed or is out-of-date.
+\par }\pard\plain \s15\ql \li0\ri0\widctlpar\tx0\tqc\tx4680\tqr\tx9450\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \scaps\f1\fs16\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par \page 
+\par }\pard\plain \s19\ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \i\f1\fs20\cf6\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+If appendices are to be used they should be preceded with a hard page break ( Ctrl+Enter) and the style \lquote Appendix Title\rquote  should be used for the Title and \lquote Appendix Heading 1, 2 & 3\rquote 
+ styles for the headings within the Appendix (examples are overleaf \endash  if no appendices are to be used, please delete the next page)
+\par 
+\par {\*\bkmkstart _Toc531073762}{\*\bkmkstart _Toc531074057}{\*\bkmkstart _Toc45093289}{\*\bkmkend _Toc419889484}{\*\bkmkend _Toc420414643}{\listtext\pard\plain\s22 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 Appendix A -\tab}
+}\pard\plain \s22\ql \li0\ri43\sb120\sa120\keepn\widctlpar\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Appendix Title
+{\*\bkmkend _Toc531073762}{\*\bkmkend _Toc531074057}>{\*\bkmkend _Toc45093289}
+\par {\*\bkmkstart _Toc531073763}{\*\bkmkstart _Toc531074058}{\*\bkmkstart _Toc45093290}{\listtext\pard\plain\s23 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 A.1\tab}}\pard\plain \s23\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Appendix Heading 1{\*\bkmkend _Toc531073763}
+{\*\bkmkend _Toc531074058}{\*\bkmkend _Toc45093290}
+\par {\*\bkmkstart _Toc531073764}{\*\bkmkstart _Toc531074059}{\*\bkmkstart _Toc45093291}{\listtext\pard\plain\s24 \b\fs22\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 A.1.1\tab}}\pard\plain 
+\s24\ql \fi-720\li720\ri43\sb120\sa120\keepn\widctlpar\jclisttab\tx720\aspalpha\aspnum\faauto\ls1\ilvl2\outlinelevel2\adjustright\rin43\lin720\itap0\pararsid9137866 \b\f1\fs22\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Appendix Heading 2{\*\bkmkend _Toc531073764}{\*\bkmkend _Toc531074059}{\*\bkmkend _Toc45093291}
+\par {\listtext\pard\plain\s25 \b\fs20\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 A.1.1.1\tab}}\pard\plain \s25\ql \fi-864\li864\ri0\sb120\sa120\keepn\widctlpar
+\jclisttab\tx864\aspalpha\aspnum\faauto\ls1\ilvl3\outlinelevel3\adjustright\rin0\lin864\itap0\pararsid9137866 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Appendix Heading 3
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par {\*\bkmkstart _Toc531073765}{\*\bkmkstart _Toc531074060}{\*\bkmkstart _Toc45093292}{\listtext\pard\plain\s22 \b\fs28\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 Appendix B -\tab}}\pard\plain 
+\s22\ql \li0\ri43\sb120\sa120\keepn\widctlpar\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin43\lin0\itap0\pararsid9137866 \b\f1\fs28\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 <Appendix Title{\*\bkmkend _Toc531073765}
+{\*\bkmkend _Toc531074060}>{\*\bkmkend _Toc45093292}
+\par {\*\bkmkstart _Toc531073766}{\*\bkmkstart _Toc531074061}{\*\bkmkstart _Toc45093293}{\listtext\pard\plain\s23 \b\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 B.1\tab}}\pard\plain \s23\ql \fi-576\li576\ri0\sb240\sa120\keepn\widctlpar
+\jclisttab\tx576\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0\pararsid9137866 \b\f1\fs24\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Appendix Heading 1{\*\bkmkend _Toc531073766}
+{\*\bkmkend _Toc531074061}{\*\bkmkend _Toc45093293}
+\par {\*\bkmkstart _Toc531073767}{\*\bkmkstart _Toc531074062}{\*\bkmkstart _Toc45093294}{\listtext\pard\plain\s24 \b\fs22\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 B.1.1\tab}}\pard\plain 
+\s24\ql \fi-720\li720\ri43\sb120\sa120\keepn\widctlpar\jclisttab\tx720\aspalpha\aspnum\faauto\ls1\ilvl2\outlinelevel2\adjustright\rin43\lin720\itap0\pararsid9137866 \b\f1\fs22\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+Appendix Heading 2{\*\bkmkend _Toc531073767}{\*\bkmkend _Toc531074062}{\*\bkmkend _Toc45093294}
+\par {\listtext\pard\plain\s25 \b\fs20\loch\af1\hich\af1\dbch\af0\insrsid9137866 \hich\af1\dbch\af0\loch\f1 B.1.1.1\tab}}\pard\plain \s25\ql \fi-864\li864\ri0\sb120\sa120\keepn\widctlpar
+\jclisttab\tx864\aspalpha\aspnum\faauto\ls1\ilvl3\outlinelevel3\adjustright\rin0\lin864\itap0\pararsid9137866 \b\f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 Appendix Heading 3
+\par }\pard\plain \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9137866 \f1\fs20\lang2057\langfe2052\cgrid\langnp2057\langfenp2052 {\insrsid9137866 
+\par }\pard \ql \li0\ri0\sa120\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\insrsid16201558 
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/group/bld.inf	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,54 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_EXPORTS
+
+PRJ_TESTEXPORTS
+./te_integration_stltsysuite.iby   				    /epoc32/rom/include/te_integration_stltsysuite.iby
+
+../scripts/te_integration_stltsysuite.script			/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsysuite.script
+../scripts/te_integration_stltsysuite.script			/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsysuite.script
+
+../testdata/te_integration_stltsysuite.ini				/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsysuite.ini	
+../testdata/te_integration_stltsysuite.ini				/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsysuite.ini	
+
+../scripts/te_integration_stllsycallcontrol.script	    /epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stllsycallcontrol.script
+../scripts/te_integration_stllsycallcontrol.script		/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stllsycallcontrol.script
+
+../testdata/te_integration_stllsycallcontrol.ini		/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stllsycallcontrol.ini	
+../testdata/te_integration_stllsycallcontrol.ini		/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stllsycallcontrol.ini	
+
+../scripts/te_integration_stltsyphonecontrol.script			/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsyphonecontrol.script
+../scripts/te_integration_stltsyphonecontrol.script			/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsyphonecontrol.script
+
+../testdata/te_integration_stltsyphonecontrol.ini				/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsyphonecontrol.ini	
+../testdata/te_integration_stltsyphonecontrol.ini				/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsyphonecontrol.ini	
+
+../scripts/te_integration_stltsypktcontrol.script			/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsypktcontrol.script
+../scripts/te_integration_stltsypktcontrol.script			/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsypktcontrol.script
+
+../testdata/te_integration_stltsypktcontrol.ini				/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stltsypktcontrol.ini	
+../testdata/te_integration_stltsypktcontrol.ini				/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stltsypktcontrol.ini
+
+../scripts/te_integration_stllsysmscontrol.script			/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stllsysmscontrol.script
+../scripts/te_integration_stllsysmscontrol.script			/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stllsysmscontrol.script
+
+../testdata/te_integration_stllsysmscontrol.ini				/epoc32/release/winscw/udeb/z/systemtest/stltsy/te_integration_stllsysmscontrol.ini	
+../testdata/te_integration_stllsysmscontrol.ini				/epoc32/release/winscw/urel/z/systemtest/stltsy/te_integration_stllsysmscontrol.ini	
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+te_integration_stltsySuite.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/group/te_integration_stltsysuite.iby	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,18 @@
+#ifndef __TE_INTEGRATION_STLTSY_SUITE_IBY__
+#define __TE_INTEGRATION_STLTSY_SUITE_IBY__
+
+#include <testexecute.iby>
+
+file=ABI_DIR\BUILD_DIR\te_integration_stltsySuite.exe		sys\bin\te_integration_stltsySuite.exe
+data=EPOCROOT##Epoc32\winscw\c\TestData\configs\te_integration_stllsycallcontrol.ini TestData\configs\te_integration_stllsycallcontrol.ini
+data=EPOCROOT##Epoc32\winscw\c\TestData\scripts\te_integration_stllsycallcontrol.script TestData\Scripts\te_integration_stllsycallcontrol.script
+
+data=EPOCROOT##Epoc32\winscw\c\TestData\configs\te_integration_stllsysmscontrol.ini TestData\configs\te_integration_stllsysmscontrol.ini
+data=EPOCROOT##Epoc32\winscw\c\TestData\scripts\te_integration_stllsysmscontrol.script TestData\Scripts\te_integration_stllsysmscontrol.script
+
+data=EPOCROOT##Epoc32\winscw\c\TestData\configs\te_integration_stltsyphonecontrol.ini TestData\configs\te_integration_stltsyphonecontrol.ini
+data=EPOCROOT##Epoc32\winscw\c\TestData\scripts\te_integration_stltsyphonecontrol.script TestData\Scripts\te_integration_stltsyphonecontrol.script
+
+data=EPOCROOT##Epoc32\winscw\c\TestData\configs\te_integration_stltsypktcontrol.ini TestData\configs\te_integration_stltsypktcontrol.ini
+data=EPOCROOT##Epoc32\winscw\c\TestData\scripts\te_integration_stltsypktcontrol.script TestData\Scripts\te_integration_stltsypktcontrol.script
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/group/te_integration_stltsysuite.mmp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,155 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+TARGET      Te_integration_stltsySuite.exe
+TARGETTYPE  exe
+UID         0x1000007A 0x10287282
+CAPABILITY ALL -TCB
+//Please add any change under here
+USERINCLUDE   ../inc
+USERINCLUDE   ../../atcommand/sms/inc
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_ESTLIB_SYSTEMINCLUDE SYSTEMINCLUDE
+
+
+SOURCEPATH  ../src
+
+SOURCE	            te_integration_stltsysuiteserver.cpp
+SOURCE	            te_integration_stltsysuitestepbase.cpp
+SOURCE              testltsysmscontrolreceivesmscase1step.cpp
+SOURCE              testltsysmscontrolsendsmscase1step.cpp
+SOURCE              testltsymodel.cpp
+SOURCE              testltsyasyncoperation.cpp
+
+//Test phone
+SOURCE              testltsyshareddata.cpp
+SOURCE              testltsyphonestepbase.cpp
+SOURCE              testltsyclosephone.cpp
+SOURCE              testltsyopenphone.cpp
+SOURCE              testltsygetphonebatteryinfo.cpp
+SOURCE              testltsygetphonesignalstrength.cpp
+SOURCE              testltsygetphonebatterycap.cpp
+SOURCE              testltsygetphonesignalcap.cpp
+SOURCE              testltsyphonegetfdnstatus.cpp
+SOURCE              testltsyphonegetnetworkregistrationstatus.cpp
+SOURCE              testltsyphonegetphoneid.cpp
+SOURCE              testltsyphonedetectednetworks.cpp
+SOURCE              testltsyphonedetectednetworkscancel.cpp
+SOURCE              testltsyphonesetnetworkselectionsetting.cpp
+SOURCE              testltsyphoneselectnetwork.cpp
+SOURCE              testltsyphonegethomenetwork.cpp
+SOURCE              testltsyphonegetcurrentnetworkinfo.cpp
+SOURCE              testltsyphonegetcellinfo.cpp
+SOURCE              testltsyphoneregistercellinfochangenotification.cpp
+//Test call 
+SOURCE              testltsycallshareddata.cpp
+SOURCE				testltsycallcontrolbase.cpp
+SOURCE              testltsycallcontroldialhangupcase.cpp
+SOURCE              testltsycallcontrolnotifyincomingcallcase1.cpp
+SOURCE              testltsycallcontrolnotifyincomingcallcase2.cpp
+SOURCE              testltsycallcontrolnotifyincomingcallcase3.cpp
+SOURCE              testltsycallcontrolcustomapiterminateallcalls.cpp
+SOURCE              testltsycallcontrolswapcalls.cpp
+SOURCE              testltsycallcontrolphoneterminateallcalls.cpp
+SOURCE              testltsycallcontroldialemergencycall.cpp
+SOURCE              testltsycallcontroldialbadcall.cpp
+SOURCE              testltsycallcontroldialselfcall.cpp 
+SOURCE              testltsycallcontroldialemergencycallstopallcalls.cpp 
+//Test phone store 
+SOURCE              testltsyphonestoreshareddata.cpp
+//Test packet
+SOURCE              testltsypktshareddata.cpp
+SOURCE              testltsypktteststepbase.cpp
+SOURCE              testltsypktopenpacket.cpp
+SOURCE              testltsypktclosepacket.cpp
+SOURCE              testltsypktopencontext.cpp
+SOURCE              testltsypktinitialsecontext.cpp
+SOURCE              testltsypktclosecontext.cpp
+SOURCE              testltsypktattachnetwork.cpp
+SOURCE              testltsypktdetachnetwork.cpp
+SOURCE              testltsypktactivatecontext.cpp
+SOURCE              testltsypktdeactivatecontext.cpp
+SOURCE              testltsypktdeletecontext.cpp
+SOURCE              testltsypktgetservicestatus.cpp
+SOURCE              testltsypktgetnwkregistrationstatus.cpp
+SOURCE              testltsypktgetcontextconfig.cpp
+SOURCE              testltsypktgetdefaultparams.cpp
+SOURCE              testltsypktsetdefaultparams.cpp
+SOURCE              testltsypktgetcontextinfo.cpp
+SOURCE              testltsypktsetcontextconfig.cpp
+SOURCE              testltsypktopencontextqos.cpp
+SOURCE              testltsypktclosecontextqos.cpp
+SOURCE              testltsypktgetcontextqosprofile.cpp
+SOURCE              testltsypktsetcontextqosprofile.cpp
+SOURCE              testltsypktgetstaticcapabilities.cpp
+SOURCE              testltsypktgetdynamiccapabilities.cpp
+//Test sms 
+SOURCE              testltsysmsatutil.cpp
+SOURCE              testltsysmsshareddata.cpp
+SOURCE              testltsysmsbase.cpp 
+SOURCE              testltsyopensms.cpp
+SOURCE              testltsyopensmsstore.cpp
+SOURCE              testltsyclosesms.cpp
+SOURCE              testltsyclosesmsstore.cpp
+SOURCE              testltsygetmessagestoreinfo.cpp
+SOURCE              testltsysmsstoregetinfo.cpp
+SOURCE              testltsysmssend.cpp
+SOURCE              testltsysmsreceive.cpp
+SOURCE              testltsysmsack.cpp
+SOURCE              testltsysmsnack.cpp 
+SOURCE              testltsysmsdelete.cpp
+SOURCE              testltsysmsdeleteinvalidindex.cpp
+SOURCE              testltsysmsdeleteall.cpp
+SOURCE              testltsysmsread.cpp
+SOURCE              testltsysmsreadinvalidindex.cpp
+SOURCE              testltsysmswrite.cpp
+SOURCE              testltsysmswriteinvalidparam.cpp
+SOURCE              testltsysmsstore.cpp
+SOURCE              testltsysmssendinvalidparam.cpp
+//Test PhoneBook
+SOURCE              testltsyphonestorebase.cpp       
+SOURCE              testltsyphbkopen.cpp
+SOURCE              testltsyphbkclose.cpp
+SOURCE              testltsyphbkgetstoreinfo.cpp
+SOURCE              testltsyphbkdelete.cpp
+SOURCE              testltsyphbkdeleteinvalidindex.cpp
+SOURCE              testltsyphbkwrite.cpp
+SOURCE              testltsyphbkwriteinvalidindex.cpp
+SOURCE              testltsyphbkread.cpp
+SOURCE              testltsyphbkreadinvalidindex.cpp
+
+//Please add your system include under here. 
+//Please add your libraries under here. For example:
+LIBRARY        euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			cntmodel.lib
+LIBRARY			esock.lib
+LIBRARY			etel.lib
+LIBRARY			etelmm.lib
+LIBRARY			etelpckt.lib 
+LIBRARY			commdb.lib
+LIBRARY			commsdat.lib
+LIBRARY			systemtest_commdbutil.lib 
+LIBRARY			testexecuteutils.lib 
+LIBRARY			testexecutelogclient.lib 
+LIBRARY			systemtest_utils.lib 
+LIBRARY			etel3rdparty.lib
+LIBRARY         estor.lib 
+LIBRARY         libc.lib 
+LIBRARY         bafl.lib
+LIBRARY         customapi.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuitedefs.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+/**
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This file define all the common values thoughout your test project
+* 
+*
+*/
+
+
+
+/**
+ @file Te_integration_stltsySuiteDefs.h
+ @internalTechnology
+*/
+#if (!defined __TE_INTEGRATION_STLTSY_SUITEDEFS_H__)
+#define __TE_INTEGRATION_STLTSY_SUITEDEFS_H__
+
+// Please modify below value with your project and must match with your configuration ini file which is required to be modified as well
+_LIT(KTe_integration_stltsySuiteString,"TheString");
+_LIT(KTe_integration_stltsySuiteInt,"TheInt");
+_LIT(KTe_integration_stltsySuiteBool,"TheBool");
+
+// For test step panics
+_LIT(KTe_integration_stltsySuitePanic,"Te_integration_stltsySuite");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuiteserver.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+/**
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+/**
+ @file Te_integration_stltsySuiteServer.h
+ @internalTechnology
+*/
+
+#if (!defined __TE_INTEGRATION_STLTSY_SERVER_H__)
+#define __TE_INTEGRATION_STLTSY_SERVER_H__
+
+#include <TestExecuteServerBase.h>
+
+// For shared data
+#include "TestLtsySharedData.h"
+
+#include "TestLtsyModel.h"
+
+class CTe_integration_stltsySuite : public CTestServer
+	{
+public:
+	static CTe_integration_stltsySuite* NewL();
+	// Base class pure virtual override
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	~CTe_integration_stltsySuite();
+
+// Please Add/modify your class members
+private:
+	CTe_integration_stltsySuite();
+	void ConstructL(const TDesC& aName);
+public:
+	CTestLtsySharedData* iSharedData;
+	CTestLtsyModel* iTestModel;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/te_integration_stltsysuitestepbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,51 @@
+/**
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+/**
+ @file Te_integration_stltsySuiteStepBase.h
+ @internalTechnology
+*/
+
+#if (!defined __TE_INTEGRATION_STLTSY_STEP_BASE__)
+#define __TE_INTEGRATION_STLTSY_STEP_BASE__
+#include <TestExecuteStepBase.h>
+// Please add your include here if you have 
+
+/****************************************************************************
+* The reason to have a new step base is that it is very much possible
+* that the all individual test steps have project related common variables 
+* and members 
+* and this is the place to define these common variable and members.
+* 
+****************************************************************************/
+class CTe_integration_stltsySuiteStepBase : public CTestStep
+	{
+public:
+	virtual ~CTe_integration_stltsySuiteStepBase();
+	CTe_integration_stltsySuiteStepBase();
+	virtual TVerdict doTestStepPreambleL(); 
+	virtual TVerdict doTestStepPostambleL();
+
+//Please add your class members which will be common to all individual test steps:
+protected:
+	HBufC8*		iReadData;
+	HBufC8*		iWriteData;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyasyncoperation.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,46 @@
+// TestTelephonyAsyncOperation.h
+//
+// Copyright (c) 2004-2008 Symbian Software Ltd.  All rights reserved.
+//
+// Active object derived class for asynchronous operation
+//
+
+
+#if (!defined __TEST_TELEPHONY_ASYNC_OPERATION_H__)
+#define  __TEST_TELEPHONY_ASYNC_OPERATION_H__
+
+// EPOC include
+#include <e32base.h>
+#include <etel3rdparty.h>
+
+/*@{*/
+///constants
+enum TTestAsyncOperation
+	{
+	KNotifyLineStatusChange,
+	};
+/*@}*/
+
+class CTelephonyAsyncOperation : public CActive
+/**
+@internalAll
+@test
+@class CTelephonyAsyncOperation
+
+Active object for executing the asynchronous requests. 
+*/
+	{
+public:
+	CTelephonyAsyncOperation(CTestStep& aTestStep);
+	~CTelephonyAsyncOperation();
+
+	virtual void	DoCancel();
+	virtual void	RunL();
+
+	TInt	SetOperation();
+	
+private:
+	CTestStep&	iTestStep;
+	};
+
+#endif /* __TEST_TELEPHONY_ASYNC_OPERATION_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,113 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolbase.h
+//  
+
+#ifndef TESTLTSYCALLCONTROLBASE_H_
+#define TESTLTSYCALLCONTROLBASE_H_
+
+//System include
+#include "te_integration_stltsysuitestepbase.h"
+#include "testltsycallshareddata.h"
+#include "testltsymodel.h"
+
+
+/**
+ * This is the test step base class of Call Control test 
+ * category which provides methods
+ */
+
+class CTestLtsyCallControlBase : public CTe_integration_stltsySuiteStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	virtual ~CTestLtsyCallControlBase();
+	
+	CTestLtsyCallControlBase(CTestLtsyModel& aModel);
+	
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	
+	virtual TVerdict doTestStepPostambleL();
+	
+	virtual TVerdict doTestStepL();
+	
+	void OpenPhoneL();
+	
+	void OpenLineL();
+	
+	void CloseLine();
+	
+	void OpenCustomAPIL();
+	
+	void CloseCustomAPI();
+	
+	void CustomAPITerminateAllCallsL();
+	
+	void PhoneTerminateAllCallsL();
+	
+	void CreateThirtyPartyTelephonyL();
+
+	void OpenCallOneL();
+	
+	void OpenCallTwoL();
+	
+	void CloseCallOne();
+	
+	void CloseCallTwo();	
+	
+	void DialCallOne();
+	
+	void CallOneDialBadNumberL();
+	
+	void CallOneDialSelfNumberL();
+	
+	void DialCallTwo();
+	
+	void HangupCallOneL();
+	
+	void HangupCallTwoL();
+	
+	void HoldCallOne();
+	
+	void HoldCallTwo();
+	
+	void ResumeCallOne();
+	
+	void ResumeCallTwo();
+	
+	void SwapCallOne();
+	void NotifyCallOne();
+
+	void SwapCallTwo();
+	void NotifyCallTwo();
+	
+	void NotifyIncomingCallOneL();
+	
+	void NotifyIncomingCallTwoL();
+	
+	void AnswerIncomingCallOneL();
+	
+	void AnswerIncomingCallTwoL();
+	
+protected:
+	
+	CTestLtsyModel& iLtsyModel;
+	};
+
+_LIT(KTestLtsyCallControlBase,   "CTestLtsyCallControlBase");
+#endif /*TESTLTSYCALLCONTROLBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolcustomapiterminateallcalls.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolcustomapiterminateallcalls.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLCUSTOMAPITERMINATEALLCALLS_H_
+#define TESTLTSYCALLCONTROLCUSTOMAPITERMINATEALLCALLS_H_
+
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlCustomAPITerminateAllCalls : public CTestLtsyCallControlBase
+	{
+	
+public:
+	virtual ~CTestLtsyCallControlCustomAPITerminateAllCalls();
+	
+	CTestLtsyCallControlCustomAPITerminateAllCalls(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyCallControlCustomAPITerminateAllCalls,   "CTestLtsyCallControlCustomAPITerminateAllCalls");
+#endif /*TESTLTSYCALLCONTROLCUSTOMAPITERMINATEALLCALLS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialbadcall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,36 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolbase.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLDIALBADCALL_H_
+#define TESTLTSYCALLCONTROLDIALBADCALL_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlDialBadCall : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlDialBadCall();
+	
+	CTestLtsyCallControlDialBadCall(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();	
+	};
+
+_LIT(KTestLtsyCallControlDialBadCall,   "CTestLtsyCallControlDialBadCall");
+
+#endif /*TESTLTSYCALLCONTROLDIALBADCALL_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialemergencycall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontroldialemergencycall.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLDIALEMERGENCYCALL_H_
+#define TESTLTSYCALLCONTROLDIALEMERGENCYCALL_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlDialEmergencyCall : public CTestLtsyCallControlBase
+	{
+	
+public:
+	virtual ~CTestLtsyCallControlDialEmergencyCall();
+	
+	CTestLtsyCallControlDialEmergencyCall(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyCallControlDialEmergencyCall,   "CTestLtsyCallControlDialEmergencyCall");
+
+#endif /*TESTLTSYCALLCONTROLDIALEMERGENCYCALL_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialemergencycallstopallcalls.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontroldialemergencycallstopallcalls.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLDIALEMERGENCYCALLSTOPALLCALLS_H_
+#define TESTLTSYCALLCONTROLDIALEMERGENCYCALLSTOPALLCALLS_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlDialEmergencyCallStopAllCall : public CTestLtsyCallControlBase
+	{
+	
+public:
+	virtual ~CTestLtsyCallControlDialEmergencyCallStopAllCall();
+	
+	CTestLtsyCallControlDialEmergencyCallStopAllCall(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyCallControlDialEmergencyCallStopAllCall,   "CTestLtsyCallControlDialEmergencyCallStopAllCall");
+
+#endif /*TESTLTSYCALLCONTROLDIALEMERGENCYCALLSTOPALLCALLS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialhangupcase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,36 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontroldialhangupcase.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLDIALHANGUPCASE_H_
+#define TESTLTSYCALLCONTROLDIALHANGUPCASE_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlDialHangupCase : public CTestLtsyCallControlBase
+	{
+	
+public:
+	virtual ~CTestLtsyCallControlDialHangupCase();
+	
+	CTestLtsyCallControlDialHangupCase(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyCallControlDialHangupCase,   "CTestLtsyCallControlDialHangupCase");
+#endif /*TESTLTSYCALLCONTROLDIALHANGUPCASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontroldialselfcall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontroldialselfcall.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLDIALSELFCALL_H_
+#define TESTLTSYCALLCONTROLDIALSELFCALL_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlDialSelfCall : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlDialSelfCall();
+	
+	CTestLtsyCallControlDialSelfCall(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();	
+	};
+
+_LIT(KTestLtsyCallControlDialSelfCall,   "CTestLtsyCallControlDialSelfCall");
+
+
+#endif /*TESTLTSYCALLCONTROLDIALSELFCALL_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase1.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,35 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolnotifyincomingcallcase1.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE1_H_
+#define TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE1_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlNotifyIncomingCallCase1 : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlNotifyIncomingCallCase1();
+	
+	CTestLtsyCallControlNotifyIncomingCallCase1(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();	
+	};
+
+_LIT(KTestLtsyCallControlNotifyIncomingCallCase1,   "CTestLtsyCallControlNotifyIncomingCallCase1");
+#endif /*TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE1_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase2.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,36 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolnotifyincomingcallcase2.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE2_H_
+#define TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE2_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlNotifyIncomingCallCase2 : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlNotifyIncomingCallCase2();
+	
+	CTestLtsyCallControlNotifyIncomingCallCase2(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();	
+	};
+
+_LIT(KTestLtsyCallControlNotifyIncomingCallCase2,   "CTestLtsyCallControlNotifyIncomingCallCase2");
+
+#endif /*TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE2_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolnotifyincomingcallcase3.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,36 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolnotifyincomingcallcase3.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE3_H_
+#define TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE3_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlNotifyIncomingCallCase3 : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlNotifyIncomingCallCase3();
+	
+	CTestLtsyCallControlNotifyIncomingCallCase3(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();	
+	};
+
+_LIT(KTestLtsyCallControlNotifyIncomingCallCase3,   "CTestLtsyCallControlNotifyIncomingCallCase3");
+
+#endif /*TESTLTSYCALLCONTROLNOTIFYINCOMINGCALLCASE3_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolphoneterminateallcalls.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolphoneterminateallcalls.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLPHONETERMINATEALLCALLS_H_
+#define TESTLTSYCALLCONTROLPHONETERMINATEALLCALLS_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlPhoneTerminateAllCalls : public CTestLtsyCallControlBase
+	{
+	
+public:
+	virtual ~CTestLtsyCallControlPhoneTerminateAllCalls();
+	
+	CTestLtsyCallControlPhoneTerminateAllCalls(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyCallControlPhoneTerminateAllCalls,   "CTestLtsyCallControlPhoneTerminateAllCalls");
+
+#endif /*TESTLTSYCALLCONTROLPHONETERMINATEALLCALLS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallcontrolswapcalls.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,35 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallcontrolswapcalls.h
+// 
+
+#ifndef TESTLTSYCALLCONTROLSWAPCALLS_H_
+#define TESTLTSYCALLCONTROLSWAPCALLS_H_
+
+//user include
+#include "testltsycallcontrolbase.h"
+
+class CTestLtsyCallControlSwapCalls : public CTestLtsyCallControlBase
+	{
+public:
+	virtual ~CTestLtsyCallControlSwapCalls();
+	
+	CTestLtsyCallControlSwapCalls(CTestLtsyModel& aModel);
+	
+protected:
+	virtual TVerdict doTestStepL();		
+	};
+
+_LIT(KTestLtsyCallControlSwapCalls,   "CTestLtsyCallControlSwapCalls");
+#endif /*TESTLTSYCALLCONTROLSWAPCALLS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsycallshareddata.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,62 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsycallshareddata.h
+// 
+
+#ifndef TESTTELEPHONYCALLSHAREDDATA_H
+#define TESTTELEPHONYCALLSHAREDDATA_H
+
+// system include
+#include <e32cmn.h>
+#include <e32base.h>
+#include <etelmm.h>
+#include <etel3rdparty.h>
+#include <RMmCustomAPI.h>
+
+/**
+ * This class defines the shared data related to phone call among test steps.
+ * 
+ */
+
+class CTestLtsyCallSharedData : public CBase
+	{
+/**
+ * @internalAll
+ * @test
+ */	
+	
+public:
+	static CTestLtsyCallSharedData* NewL();
+	virtual ~CTestLtsyCallSharedData();
+	RLine& VoiceLine();
+	RMobileCall& VoiceCallOne();
+	RMobileCall& VoiceCallTwo();
+	RMobileCall& EmergencyCall();
+	RMmCustomAPI& MmCustomAPI();
+	CTelephony*& ThirdPartyTelephony();
+	
+protected:
+	CTestLtsyCallSharedData();
+	void ConstructL();
+	
+private:
+	RLine iVoiceLine;
+	RMobileCall iVoiceCallOne;
+	RMobileCall iVoiceCallTwo;
+	RMobileCall iEmergencyCall;
+	RMmCustomAPI iMmCustomAPI;
+	CTelephony* iThirdPartyTel;
+	};
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosephone.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,46 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyclosephone.h
+// 
+
+#ifndef TESTTELEPHONYCLOSEPHONE_H_
+#define TESTTELEPHONYCLOSEPHONE_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the step to close the shared phone.
+ * 
+ */
+class CTestLtsyClosePhone : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyClosePhone();
+	CTestLtsyClosePhone(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyClosePhone,   "TestLtsyClosePhone");
+
+#endif /*TESTTELEPHONYCLOSEPHONE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosesms.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyclosesms.h
+// 
+
+#ifndef TESTLTSYCLOSESMS_H
+#define TESTLTSYCLOSESMS_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyCloseSms
+ *
+ */
+class CTestLtsyCloseSms : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsyCloseSms();
+	static CTestLtsyCloseSms* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyCloseSms* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyCloseSms(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+private:
+
+	}; // class CTestLtsyCloseSms
+_LIT(KCTestLtsyCloseSms,"CTestLtsyCloseSms");
+
+#endif // TESTLTSYCLOSESMS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyclosesmsstore.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyclosesmsstore.h
+// 
+
+#ifndef TESTLTSYCLOSESMSSTORE_H
+#define TESTLTSYCLOSESMSSTORE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyCloseSmsStore
+ *
+ */
+class CTestLtsyCloseSmsStore : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsyCloseSmsStore();
+	static CTestLtsyCloseSmsStore* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyCloseSmsStore* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyCloseSmsStore(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+private:
+
+	}; // class CTestLtsyCloseSmsStore
+_LIT(KCTestLtsyCloseSmsStore,"CTestLtsyCloseSmsStore");
+
+#endif // TESTLTSYCLOSESMSSTORE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetmessagestoreinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,54 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsygetmessagestoreinfo.h
+// 
+
+#ifndef TESTLTSYGETMESSAGESTOREINFO_H
+#define TESTLTSYGETMESSAGESTOREINFO_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyGetMessageStoreInfo
+ *
+ */
+class CTestLtsyGetMessageStoreInfo : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsyGetMessageStoreInfo();
+	static CTestLtsyGetMessageStoreInfo* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyGetMessageStoreInfo* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyGetMessageStoreInfo(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void GetMessageStoreInfoL();
+	void CheckMessageStoreInfoL();
+private:
+   	RMobilePhoneStore::TMobilePhoneStoreInfoV1       iInfo;	
+
+	}; // class CTestLtsyGetMessageStoreInfo
+_LIT(KCTestLtsyGetMessageStoreInfo,"CTestLtsyGetMessageStoreInfo");
+
+#endif // TESTLTSYGETMESSAGESTOREINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonebatterycap.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,32 @@
+// TestTelephonyGetPhoneBatteryInfo.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyGetPhoneBatteryCap
+
+
+#ifndef TESTTELEPHONYGETPHONEBATTERYCAP_H_
+#define TESTTELEPHONYGETPHONEBATTERYCAP_H_
+
+//user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the function to get battery info
+ * 
+ */
+class CTestLtsyGetPhoneBatteryCap : public CTestLtsyPhoneStepBase  
+/**
+@internalAll
+@test
+*/
+{
+public:
+	CTestLtsyGetPhoneBatteryCap(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyGetPhoneBatteryCap();
+	virtual TVerdict doTestStepL();
+
+};
+
+_LIT(KTestLtsyGetPhoneBatteryCap,           "TestLtsyGetPhoneBatteryCap");
+
+#endif /*TESTTELEPHONYGETPHONEBATTERYCAP_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonebatteryinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,37 @@
+// TestTelephonyGetPhoneBatteryInfo.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyGetPhoneBatteryInfo
+
+
+#ifndef TESTTELEPHONYGETPHONEBATTERYINFO_H_
+#define TESTTELEPHONYGETPHONEBATTERYINFO_H_
+
+//user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the function to get battery info
+ * 
+ */
+class CTestLtsyGetPhoneBatteryInfo : public CTestLtsyPhoneStepBase  
+/**
+@internalAll
+@test
+*/
+{
+public:
+	CTestLtsyGetPhoneBatteryInfo(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyGetPhoneBatteryInfo();
+	virtual TVerdict doTestStepL();
+private:
+	void GetBatteryCaps();
+	void NotifyBatteryInfoChangeL();
+
+private:
+	RMobilePhone::TMobilePhoneBatteryInfoV1      iBatteryInfo;
+};
+
+_LIT(KTestLtsyGetPhoneBatteryInfo,           "TestLtsyGetPhoneBatteryInfo");
+
+#endif /*TESTTELEPHONYGETPHONEBATTERYINFOSTEP_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonesignalcap.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,32 @@
+// TestLtsyGetPhoneSignalCap.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyGetPhoneSignalCap
+
+#ifndef TESTTELEPHONYGETPHONESIGNALCAP_H_
+#define TESTTELEPHONYGETPHONESIGNALCAP_H_
+
+//user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the function to get signal strength
+ * 
+ */
+class CTestLtsyGetPhoneSignalCap : public CTestLtsyPhoneStepBase  
+/**
+@internalAll
+@test
+*/
+{
+public:
+	CTestLtsyGetPhoneSignalCap(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyGetPhoneSignalCap();	
+	virtual TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyGetPhoneSingalCap,          "TestLtsyGetPhoneSingalCap");
+
+#endif /*TESTTELEPHONYGETPHONESIGNALCAP_H_*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsygetphonesignalstrength.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,39 @@
+// TestTelephonyGetPhoneSingalStrength.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyGetPhoneSingalStrength
+
+#ifndef TESTTELEPHONYGETPHONESIGNALSTRENGTH_H_
+#define TESTTELEPHONYGETPHONESIGNALSTRENGTH_H_
+
+//user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the function to get signal strength
+ * 
+ */
+class CTestLtsyGetPhoneSignalStrength : public CTestLtsyPhoneStepBase  
+/**
+@internalAll
+@test
+*/
+{
+public:
+	CTestLtsyGetPhoneSignalStrength(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyGetPhoneSignalStrength();	
+	virtual TVerdict doTestStepL();
+private:
+	void   GetSignalCaps();
+	void   NotifySignalStrengthChangeL();
+
+private:
+	TInt32                                       iSignalStrength;
+	TInt8                                        iBar;
+};
+
+_LIT(KTestLtsyGetPhoneSingalStrength,          "TestLtsyGetPhoneSingalStrength");
+
+#endif /*TESTTELEPHONYGETPHONESIGNALSTRENGTH_H_*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsymodel.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,100 @@
+//  TestTelephonyModel.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyModel
+//
+#ifndef TESTTELEPHONYMODEL_H_
+#define TESTTELEPHONYMODEL_H_
+
+// system include
+#include <e32cmn.h>
+#include <e32des8.h>
+#include <etelmm.h>
+#include <etel.h>
+#include <etel3rdparty.h> 
+
+// forward class
+class CTestLtsySharedEnv;
+class CTestLtsyCallSharedData;
+class CTestLtsyPktSharedData;
+class CTestLtsySmsSharedData;
+class CTestLtsyPhoneStoreSharedData;
+
+// define the module name length
+const TUint8 KModuleNameLen = 200;
+
+
+/**
+ * This class acts as a proxy to provide the functions to return the shared data
+ * accross the steps.
+ * 
+ */
+class CTestLtsyModel : public CBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	static CTestLtsyModel* NewL();
+	~CTestLtsyModel();
+	inline CTestLtsySharedEnv& SharedEnv();
+	inline CTestLtsyCallSharedData& CallSharedData();
+	inline CTestLtsyPktSharedData&  PktSharedData();
+	inline CTestLtsySmsSharedData&  SmsSharedData();
+	inline CTestLtsyPhoneStoreSharedData& PhoneStoreSharedData();
+private:
+	void ConstructL();
+private:
+	CTestLtsySharedEnv* iSharedPhoneEnv;
+	CTestLtsyCallSharedData* iCallSharedData;
+	CTestLtsyPktSharedData*  iPktSharedData;
+	CTestLtsySmsSharedData* iSmsSharedData;
+	CTestLtsyPhoneStoreSharedData* iPhoneStoreSharedData;
+	};
+/**
+ * This calss define a shared phone environment
+ * 
+ */
+class CTestLtsySharedEnv : public CBase
+/**
+ * @internalAll
+ * @test
+ */
+    { 
+public:
+    ~CTestLtsySharedEnv();
+	static CTestLtsySharedEnv* NewL();
+    inline RMobilePhone& Phone();
+    inline RTelServer& ETelServer();
+    inline TBool PhoneOpened();
+    inline void IncreasePhoneReference();
+    inline void DecreasePhoneReference();
+    inline TInt PhoneRefCount();
+	void LoadModuleL(const TDesC& aModuleName);
+	void OpenPhoneL(const TDesC& aModuleName);
+	// must be called by client thread if it call OpenPhoneL()
+	void ClosePhone();
+	void CreateTelephonyL();
+	void DestroyTelephony();
+	CTelephony* Telephony();
+private:
+    CTestLtsySharedEnv();
+    void ConstructL();	
+    TBool FindPhoneIndex();
+private:
+	TBuf<KModuleNameLen> iModuleName;
+	RMobilePhone* iSharedPhone;
+	TBool iPhoneInitialized;
+	RTelServer iSharedTelServer;
+	TInt iPhoneRef;
+	TInt iPhoneIndex;
+	CTelephony *iTelephony;
+//	RMmCustomAPI     *iRmmCustomAPI;
+	CActiveScheduler*  iActiveSchaduler;
+//    TBuf<KCommsDbSvrMaxFieldLength> iTsyNameFromCommdb;
+	};	
+
+#include "TestLtsyModel.inl"
+
+#endif /*TESTTELEPHONYMODEL_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsymodel.inl	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,124 @@
+//  TestTelephonyModel.inl
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  The inline function implementation of CTestTelephonyModel
+
+#ifndef TESTTELEPHONYMODEL_INL_
+#define TESTTELEPHONYMODEL_INL_
+
+// user include
+#include "TestLtsyModel.h"
+
+/**
+ * Get the shared phone environment
+ * 
+ */
+CTestLtsySharedEnv& CTestLtsyModel::SharedEnv()
+	{
+	return *iSharedPhoneEnv;
+	}
+
+/**
+ * Get the packet shared data
+ *
+ */
+CTestLtsyPktSharedData& CTestLtsyModel::PktSharedData()
+	{
+	return *iPktSharedData;
+	}
+
+/**
+ * Get the call shared data
+ * 
+ */
+CTestLtsyCallSharedData& CTestLtsyModel::CallSharedData()
+	{
+	return *iCallSharedData;
+	}	
+
+/**
+ * Get the sms shared data
+ * 
+ */
+CTestLtsySmsSharedData& CTestLtsyModel::SmsSharedData()
+	{
+	return *iSmsSharedData;
+	}
+	
+/**
+ * Get the phone store shared data
+ * 
+ */
+
+
+CTestLtsyPhoneStoreSharedData& CTestLtsyModel::PhoneStoreSharedData()
+	{
+	return *iPhoneStoreSharedData; 
+	}
+
+///**
+// * Get the Tsy Adaptor
+// * 
+// */
+//CTestTelephonyTsyAdaptor& CTestLtsySharedEnv::TsyAdaptor()
+//	{
+//	return *iTsyAdaptor;
+//	}
+
+/**
+ * Get the shared phone
+ * 
+ */
+RMobilePhone& CTestLtsySharedEnv::Phone() 
+	{
+	return *iSharedPhone;
+	}
+
+/**
+ * Get the shared ETel server
+ * 
+ */
+RTelServer& CTestLtsySharedEnv::ETelServer() 
+	{
+	return iSharedTelServer;
+	}
+
+/**
+ * Check if the shared phone has arleady been opened before
+ * 
+ */
+TBool CTestLtsySharedEnv::PhoneOpened()
+	{
+	return iPhoneInitialized;
+	}
+
+/**
+ * Increase the shared phone reference number when a client used the shared phone
+ * 
+ */
+void CTestLtsySharedEnv::IncreasePhoneReference()
+	{
+	iPhoneRef++;
+	}
+
+/**
+ * Decrease the shared phone reference number
+ * 
+ */
+void CTestLtsySharedEnv::DecreasePhoneReference()
+	{
+	iPhoneRef--;
+	}
+
+/**
+ * Get the phone reference count
+ * 
+ */
+TInt CTestLtsySharedEnv::PhoneRefCount()
+	{
+	return iPhoneRef;
+	}
+
+#endif /*TESTTELEPHONYMODEL_INL_*/
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopenphone.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestTelephonyOpenPhone.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyOpenPhone
+//
+#ifndef TESTTELEPHONYOPENPHONE_H_
+#define TESTTELEPHONYOPENPHONE_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyOpenPhone : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyOpenPhone();
+	CTestLtsyOpenPhone(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyOpenPhone,   "TestLtsyOpenPhone");
+#endif /*TESTTELEPHONYOPENPHONE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopensms.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyopensmsstore.h
+// 
+
+#ifndef TESTLTSYOPENSMS_H
+#define TESTLTSYOPENSMS_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyOpenSms
+ *
+ */
+class CTestLtsyOpenSms : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsyOpenSms();
+	static CTestLtsyOpenSms* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyOpenSms* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyOpenSms(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+private:
+	
+	}; // class CTestLtsyOpenSms
+_LIT(KCTestLtsyOpenSms,"CTestLtsyOpenSms");
+
+#endif // TESTLTSYOPENSMS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyopensmsstore.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyopensmsstore.h
+// 
+
+#ifndef TESTLTSYOPENSMSSTORE_H
+#define TESTLTSYOPENSMSSTORE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyOpenSmsStore
+ *
+ */
+class CTestLtsyOpenSmsStore : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsyOpenSmsStore();
+	static CTestLtsyOpenSmsStore* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyOpenSmsStore* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyOpenSmsStore(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+private:
+	
+	}; // class CTestLtsyOpenSmsStore
+_LIT(KCTestLtsyOpenSmsStore,"CTestLtsyOpenSmsStore");
+
+#endif // TESTLTSYOPENSMSSTORE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkclose.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkclose.h
+// 
+
+#ifndef TESTLTSYPHBKCLOSE_H
+#define TESTLTSYPHBKCLOSE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkClose
+ *
+ */
+class CTestLtsyPhbkClose : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkClose();
+	static CTestLtsyPhbkClose* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkClose* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkClose(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ClosePhonebookL();
+private:
+	
+	}; // class CTestLtsyPhbkClose
+_LIT(KCTestLtsyPhbkClose,"CTestLtsyPhbkClose");
+
+#endif // TESTLTSYPHBKCLOSE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkdelete.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkdelete.h
+// 
+
+#ifndef TESTLTSYPHBKDELETE_H
+#define TESTLTSYPHBKDELETE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkDelete
+ *
+ */
+class CTestLtsyPhbkDelete : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkDelete();
+	static CTestLtsyPhbkDelete* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkDelete* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkDelete(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void DeletePhonebookL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkDelete
+_LIT(KCTestLtsyPhbkDelete,"CTestLtsyPhbkDelete");
+
+#endif // TESTLTSYPHBKDELETE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkdeleteinvalidindex.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkdeleteinvalidindex.h
+// 
+
+#ifndef TESTLTSYPHBKDELETEINVALIDINDEX_H
+#define TESTLTSYPHBKDELETEINVALIDINDEX_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkDeleteInvalidIndex
+ *
+ */
+class CTestLtsyPhbkDeleteInvalidIndex : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkDeleteInvalidIndex();
+	static CTestLtsyPhbkDeleteInvalidIndex* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkDeleteInvalidIndex* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkDeleteInvalidIndex(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void DeletePhonebookL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkDeleteInvalidIndex
+_LIT(KCTestLtsyPhbkDeleteInvalidIndex,"CTestLtsyPhbkDeleteInvalidIndex");
+
+#endif // TESTLTSYPHBKDELETEINVALIDINDEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkgetstoreinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkgetstoreinfo.h
+// 
+
+#ifndef TESTLTSYPHBKGETSTOREINFO_H
+#define TESTLTSYPHBKGETSTOREINFO_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkGetStoreInfo
+ *
+ */
+class CTestLtsyPhbkGetStoreInfo : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkGetStoreInfo();
+	static CTestLtsyPhbkGetStoreInfo* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkGetStoreInfo* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkGetStoreInfo(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void GetStoreInfoL();
+private:
+	
+	}; // class CTestLtsyPhbkGetStoreInfo
+_LIT(KCTestLtsyPhbkGetStoreInfo,"CTestLtsyPhbkGetStoreInfo");
+
+#endif // TESTLTSYPHBKGETSTOREINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkopen.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkopen.h
+// 
+
+#ifndef TESTLTSYPHBKOPEN_H
+#define TESTLTSYPHBKOPEN_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkOpen
+ *
+ */
+class CTestLtsyPhbkOpen : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkOpen();
+	static CTestLtsyPhbkOpen* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkOpen* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkOpen(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void OpenPhonebookL();
+private:
+	
+	}; // class CTestLtsyPhbkOpen
+_LIT(KCTestLtsyPhbkOpen,"CTestLtsyPhbkOpen");
+
+#endif // TESTLTSYPHBKOPEN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkread.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkread.h
+// 
+
+#ifndef TESTLTSYPHBKREAD_H
+#define TESTLTSYPHBKREAD_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkRead
+ *
+ */
+class CTestLtsyPhbkRead : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkRead();
+	static CTestLtsyPhbkRead* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkRead* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkRead(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ReadEntryL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkRead
+_LIT(KCTestLtsyPhbkRead,"CTestLtsyPhbkRead");
+
+#endif // TESTLTSYPHBKREAD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkreadinvalidindex.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkreadinvalidindex.h
+// 
+
+#ifndef TESTLTSYPHBKREADINVALIDINDEX_H
+#define TESTLTSYPHBKREADINVALIDINDEX_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkReadInvalidIndex
+ *
+ */
+class CTestLtsyPhbkReadInvalidIndex : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkReadInvalidIndex();
+	static CTestLtsyPhbkReadInvalidIndex* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkReadInvalidIndex* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkReadInvalidIndex(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ReadEntryL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkReadInvalidIndex
+_LIT(KCTestLtsyPhbkReadInvalidIndex,"CTestLtsyPhbkReadInvalidIndex");
+
+#endif // TESTLTSYPHBKREADINVALIDINDEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkwrite.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkwrite.h
+// 
+
+#ifndef TESTLTSYPHBKWRITE_H
+#define TESTLTSYPHBKWRITE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkWrite
+ *
+ */
+class CTestLtsyPhbkWrite : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkWrite();
+	static CTestLtsyPhbkWrite* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkWrite* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkWrite(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void WriteEntryL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkWrite
+_LIT(KCTestLtsyPhbkWrite,"CTestLtsyPhbkWrite");
+
+#endif // TESTLTSYPHBKWRITE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphbkwriteinvalidindex.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphbkwriteinvalidindex.h
+// 
+
+#ifndef TESTLTSYPHBKWRITEINVALIDINDEX_H
+#define TESTLTSYPHBKWRITEINVALIDINDEX_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsyphonestorebase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsyPhbkWriteInvalidIndex
+ *
+ */
+class CTestLtsyPhbkWriteInvalidIndex : public CTestLtsyPhoneStoreBase
+	{
+public:
+
+	~CTestLtsyPhbkWriteInvalidIndex();
+	static CTestLtsyPhbkWriteInvalidIndex* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsyPhbkWriteInvalidIndex* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsyPhbkWriteInvalidIndex(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void WriteEntryL(TInt aIndex);
+private:
+	
+	}; // class CTestLtsyPhbkWriteInvalidIndex
+_LIT(KCTestLtsyPhbkWriteInvalidIndex,"CTestLtsyPhbkWriteInvalidIndex");
+
+#endif // TESTLTSYPHBKWRITEINVALIDINDEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetcellinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyGetCellInfo.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetCellInfo
+//
+#ifndef TESTLTSYPHONEGETCELLINFO_H_
+#define TESTLTSYPHONEGETCELLINFO_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetCellInfo : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetCellInfo();
+	CTestLtsyPhoneGetCellInfo(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetCellInfo,   "TestLtsyPhoneGetCellInfo");
+#endif /*TESTLTSYPHONEGETCELLINFO_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetcurrentnetworkinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyGetCurrentNetworkInfo.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetCurrentNetworkInfo
+//
+#ifndef TESTLTSYPHONEGETCURRENTNWKINFO_H_
+#define TESTLTSYPHONEGETCURRENTNWKINFO_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetCurrentNetworkInfo : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetCurrentNetworkInfo();
+	CTestLtsyPhoneGetCurrentNetworkInfo(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetCurrentNetworkInfo,   "TestLtsyPhoneGetCurrentNetworkInfo");
+#endif /*TESTLTSYPHONEGETCURRENTNWKINFO_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetdetectednetworks.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyGetDetectedNetworks.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetDetectedNetworks
+//
+#ifndef TESTLTSYPHONEGETDETTECTEDNWKS_H_
+#define TESTLTSYPHONEGETDETTECTEDNWKS_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetDetectedNetworks : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetDetectedNetworks();
+	CTestLtsyPhoneGetDetectedNetworks(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetDetectedNetworks,   "TestLtsyPhoneGetDetectedNetworks");
+#endif /*TESTLTSYPHONEGETDETTECTEDNWKS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetdetectednetworkscancel.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyGetDetectedNetworksCancel.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetDetectedNetworksCancel
+//
+#ifndef TESTLTSYPHONEGETDETTECTEDNWKSCANCEL_H_
+#define TESTLTSYPHONEGETDETTECTEDNWKSCANCEL_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetDetectedNetworksCancelCancel : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetDetectedNetworksCancelCancel();
+	CTestLtsyPhoneGetDetectedNetworksCancelCancel(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetDetectedNetworksCancelCancel,   "TestLtsyPhoneGetDetectedNetworksCancel");
+#endif /*TESTLTSYPHONEGETDETTECTEDNWKSCANCEL_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetfdnstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestTelephonyOpenPhone.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetFdnStatus
+//
+#ifndef TESTLTSYPHONEGETFDNSTATUS_H_
+#define TESTLTSYPHONEGETFDNSTATUS_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetFdnStatus : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetFdnStatus();
+	CTestLtsyPhoneGetFdnStatus(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetFdnStatus,   "TestLtsyPhoneGetFdnStatus");
+#endif /*TESTLTSYPHONEGETFDNSTATUS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegethomenetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyGetHomeNetwork.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetHomeNetwork
+//
+#ifndef TESTLTSYPHONEGETHOMENWK_H_
+#define TESTLTSYPHONEGETHOMENWK_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetHomeNetwork : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetHomeNetwork();
+	CTestLtsyPhoneGetHomeNetwork(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetHomeNetwork,   "TestLtsyPhoneGetHomeNetwork");
+#endif /*TESTLTSYPHONEGETHOMENWK_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetnetworkregistrationstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyPhoneGetNetworkRegistrationStatus.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetNetworkRegistrationStatus
+//
+#ifndef TESTLTSYPHONEGETNWKREGISTSTATUS_H_
+#define TESTLTSYPHONEGETNWKREGISTSTATUS_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetNetworkRegistrationStatus : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetNetworkRegistrationStatus();
+	CTestLtsyPhoneGetNetworkRegistrationStatus(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetNetworkRegistrationStatus,   "TestLtsyPhoneGetNetworkRegistrationStatus");
+#endif /*TESTLTSYPHONEGETNWKREGISTSTATUS_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonegetphoneid.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyPhoneGetPhoneID.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetPhoneID
+//
+#ifndef TESTLTSYPHONEGETPHONEID_H_
+#define TESTLTSYPHONEGETPHONEID_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneGetPhoneID : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneGetPhoneID();
+	CTestLtsyPhoneGetPhoneID(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneGetPhoneID,   "TestLtsyPhoneGetPhoneID");
+#endif /*TESTLTSYPHONEGETPHONEID_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphoneregistercellinfochangenotification.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsyRegisterCellInfoChangeNotification.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneRegisterCellInfoChangeNotification
+//
+#ifndef TESTLTSYPHONEREGCELLINFOCHANGENOTIFICTION_H_
+#define TESTLTSYPHONEREGCELLINFOCHANGENOTIFICTION_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneRegisterCellInfoChangeNotification : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneRegisterCellInfoChangeNotification();
+	CTestLtsyPhoneRegisterCellInfoChangeNotification(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneRegisterCellInfoChangeNotification,   "TestLtsyPhoneRegisterCellInfoChangeNotification");
+#endif /*TESTLTSYPHONEREGCELLINFOCHANGENOTIFICTION_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphoneselectnetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsySelectNetwork.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneSelectNetwork
+//
+#ifndef TESTLTSYPHONESELECTNETWORK_H_
+#define TESTLTSYPHONESELECTNETWORK_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneSelectNetwork : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneSelectNetwork();
+	CTestLtsyPhoneSelectNetwork(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneSelectNetwork,   "TestLtsyPhoneSelectNetwork");
+#endif /*TESTLTSYPHONESELECTNETWORK_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonesetnetworkselectionsetting.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,30 @@
+//  TestLtsySetNetworkSelectionSetting.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneSetNetworkSelectionSetting
+//
+#ifndef TESTLTSYPHONESETNWKSETTING_H_
+#define TESTLTSYPHONESETNWKSETTING_H_
+
+// user include
+#include "TestLtsyPhoneStepBase.h"
+
+/**
+ * This class provide the funcition to open a shared phone.
+ * 
+ */
+class CTestLtsyPhoneSetNetworkSelectionSetting : public CTestLtsyPhoneStepBase
+/**
+ * @internalAll
+ * @test
+ */
+{
+public:
+	virtual ~CTestLtsyPhoneSetNetworkSelectionSetting();
+	CTestLtsyPhoneSetNetworkSelectionSetting(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepL();
+};
+
+_LIT(KTestLtsyPhoneSetNetworkSelectionSetting,   "TestLtsyPhoneSetNetworkSelectionSetting");
+#endif /*TESTLTSYPHONESETNWKSETTING_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestepbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,85 @@
+//  TestTelephonyPktTestStepBase.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyPktTestStepBase
+
+#ifndef TESTLTSYPHONESTEPBASE_H_
+#define TESTLTSYPHONESTEPBASE_H_
+
+
+#include <e32base.h>
+#include <es_sock.h>
+#include <es_enum.h>
+
+// user include
+#include "te_integration_stltsysuitestepbase.h"
+#include "TestLtsyModel.h"
+
+const TInt	KOneSecond = 1000000;
+
+/**
+ * This is the test step base class of phone test 
+ * category which provides methods
+ */
+class CTestLtsyPhoneStepBase : public CTe_integration_stltsySuiteStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	
+protected:
+	CTestLtsyPhoneStepBase(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPhoneStepBase();
+	
+	RMobilePhone& SharedPhone();
+	
+	void TestOpenPhoneL();
+	void TestClosePhone();
+	void GetFdnStatus();
+	void GetNetworkRegistrationStatus();
+	void GetPhoneId();
+	void GetDetectedNetworksL();
+	void GetDetectedNetworksCancelL(); //NO
+	void SetNetworkSelectionSetting();
+	void SelectNetwork();
+	void SetAndSelectNetwork(); //NO
+	
+	void GetBatteryInfo();
+	void GetBatteryCaps();
+	void NotifyBatteryInfoChange();
+	void GetBatteryStrengthCancel();
+	
+	void GetSignalStrength();
+	void GetSignalCaps();
+	void NotifySignalStrengthChange();
+	void GetSignalStrengthCancel();
+	
+	void GetHomeNetwork();
+	void GetServiceProviderName();//NO
+
+	
+	void GetCurrentNetworkInfo();
+//	void GetNetworkMode();
+	void GetNitzInfo();//no
+	
+//	void GetCurrentSystemNetworkModes();  //RMmCustomAPI
+//	void GetNetworkProviderName(); //RMmCustomAPI
+//	void GetOperatorName();  //RMmCustomAPI
+	void RegisterCellInfoChangeNotification();
+	void GetCellInfo();
+//	void GetPhoneCellInfo(); //RMmCustomAPI
+	
+	
+protected:
+	CTestLtsyModel& iModel;
+	RMobilePhone& iSharedPhone;
+	
+private:
+
+	};
+
+#endif // TESTLTSYPHONESTEPBASE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestorebase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsyphonestorebase.h
+// 
+
+#ifndef TESTLTSYPHONESTOREBASE_H_
+#define TESTLTSYPHONESTOREBASE_H_
+
+class CTestLtsyModel;
+// user include
+#include "te_integration_stltsysuitestepbase.h"
+#include "testltsymodel.h"
+
+
+// class declaration
+/**
+ * This class provide the common functionalities related to the PhoneStore
+ * 
+ */
+class CTestLtsyPhoneStoreBase : public CTe_integration_stltsySuiteStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	virtual ~CTestLtsyPhoneStoreBase();
+	         CTestLtsyPhoneStoreBase(CTestLtsyModel& aTestModel);
+protected:
+	TVerdict doTestStepPreambleL();
+	TVerdict doTestStepPostambleL();
+	RMobileONStore& PhoneONStore();
+	RMobileENStore& PhoneENStore();	
+	RMobilePhoneBookStore& PhoneBookStore();
+	void OpenPhoneL();
+
+protected:
+	CTestLtsyModel& iModel;
+	};
+
+#endif /*TESTLTSYPHONESTOREBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyphonestoreshareddata.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,38 @@
+// TestTelephonyPhoneStoreSharedData.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPhoneStoreSharedData
+
+#ifndef TESTTELEPHONYPHONESTORESHAREDDATA_H_
+#define TESTTELEPHONYPHONESTORESHAREDDATA_H_
+// system include
+#include <e32cmn.h>
+#include <e32base.h>
+#include <etelmm.h>
+
+/**
+ * This class defines the shared data of phone store test category between 
+ * different test steps.
+ */
+class CTestLtsyPhoneStoreSharedData : public CBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPhoneStoreSharedData();
+	virtual ~CTestLtsyPhoneStoreSharedData();
+	static CTestLtsyPhoneStoreSharedData* NewL();	
+	RMobileENStore& PhoneENStore();	
+	RMobileONStore& PhoneONStore();	
+	RMobilePhoneBookStore& PhoneBookStore();
+	void   Reset();	
+private:
+	void ConstructL();
+private:
+	RMobileONStore iONStore;
+	RMobileENStore iENStore;
+	RMobilePhoneBookStore iPhBkStore;
+	};
+#endif /*TESTTELEPHONYPHONESTORESHAREDDATA_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktactivatecontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktActivateContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktActivateContext
+
+
+#ifndef TESTLTSYPKTACTIVATECONTEXT_H_
+#define TESTLTSYPKTACTIVATECONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktActivateContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktActivateContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktActivateContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktActivateContext, "TestLtsyPktActivateContext");
+
+#endif // TESTLTSYPKTACTIVATECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktattachnetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,35 @@
+//  TestLtsyPktAttachNetwork.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktAttachNetwork
+
+#ifndef TESTLTSYPKTATTACHNETWORK_H_
+#define TESTLTSYPKTATTACHNETWORK_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+// const define
+const TInt KMaxAllowedContextNum = 11;
+
+/**
+ * This is the test step class which calls methods of base class
+ * to attach packet service to network
+ */
+class CTestLtsyPktAttachNetwork : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktAttachNetwork(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktAttachNetwork();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktAttachNetwork, "TestLtsyPktAttachNetwork");
+
+#endif // TESTLTSYPKTATTACHNETWORK_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosecontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktCloseContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktCloseContext
+
+
+#ifndef TESTLTSYPKTCLOSECONTEXT_H_
+#define TESTLTSYPKTCLOSECONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to close packet context
+ */
+class CTestLtsyPktCloseContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktCloseContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktCloseContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktCloseContext, "TestLtsyPktCloseContext");
+
+#endif // TESTLTSYPKTCLOSECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosecontextqos.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktCloseContextQos.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktCloseContextQos
+
+
+#ifndef TESTLTSYPKTCLOSECONTEXTQOS_H_
+#define TESTLTSYPKTCLOSECONTEXTQOS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktCloseContextQos : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktCloseContextQos(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktCloseContextQos();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktCloseContextQos, "TestLtsyPktCloseContextQos");
+
+#endif // TESTLTSYPKTCLOSECONTEXTQOS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktclosepacket.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktClosePacket.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktClosePacket
+
+
+#ifndef TESTLTSYPKTCLOSEPACKET_H_
+#define TESTLTSYPKTCLOSEPACKET_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet service
+ */
+class CTestLtsyPktClosePacket : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktClosePacket(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktClosePacket();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktClosePacket, "TestLtsyPktClosePacket");
+
+#endif // TESTLTSYPKTCLOSEPACKET_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdeactivatecontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktDeactivateContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktDeactivateContext
+
+
+#ifndef TESTLTSYPKTDEACTIVATECONTEXT_H_
+#define TESTLTSYPKTDEACTIVATECONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to deactivate a packet context
+ */
+class CTestLtsyPktDeactivateContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktDeactivateContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktDeactivateContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktDeactivateContext, "TestLtsyPktDeactivateContext");
+
+#endif // TESTLTSYPKTDEACTIVATECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdeletecontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktDeleteContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktDeleteContext
+
+
+#ifndef TESTLTSYPKTDELETECONTEXT_H_
+#define TESTLTSYPKTDELETECONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktDeleteContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktDeleteContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktDeleteContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktDeleteContext, "TestLtsyPktDeleteContext");
+
+#endif // TESTLTSYPKTDELETECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktdetachnetwork.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktDetachNetwork.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktDetachNetwork
+
+
+#ifndef TESTLTSYPKTDETACHNETWORK_H_
+#define TESTLTSYPKTDETACHNETWORK_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to detach packet service from network
+ */
+class CTestLtsyPktDetachNetwork : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktDetachNetwork(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktDetachNetwork();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktDetachNetwork, "TestLtsyPktDetachNetwork");
+
+#endif // TESTLTSYPKTDETACHNETWORK_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextconfig.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetContextConfig.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetContextConfig
+
+
+#ifndef TESTLTSYPKTGETCONTEXTCONFIG_H_
+#define TESTLTSYPKTGETCONTEXTCONFIG_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktGetContextConfig : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetContextConfig(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetContextConfig();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetContextConfig, "TestLtsyPktGetContextConfig");
+
+#endif // TESTLTSYPKTGETCONTEXTCONFIG_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetContextInfo.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetContextInfo
+
+
+#ifndef TESTLTSYPKTGETCONTEXTINFO_H_
+#define TESTLTSYPKTGETCONTEXTINFO_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktGetContextInfo : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetContextInfo(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetContextInfo();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetContextInfo, "TestLtsyPktGetContextInfo");
+
+#endif // TESTLTSYPKTGETCONTEXTINFO_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetcontextqosprofile.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetContextQoSProfile.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetContextQoSProfile
+
+
+#ifndef TESTLTSYPKTGETCONTEXTQOSPROFILE_H_
+#define TESTLTSYPKTGETCONTEXTQOSPROFILE_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktGetContextQoSProfile : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetContextQoSProfile(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetContextQoSProfile();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetContextQoSProfile, "TestLtsyPktGetContextQoSProfile");
+
+#endif // TESTLTSYPKTGETCONTEXTQOSPROFILE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetdefaultparams.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetDefaultParams.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetDefaultParams
+
+
+#ifndef TESTLTSYPKTGETDEFAULTPARAMS_H_
+#define TESTLTSYPKTGETDEFAULTPARAMS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktGetDefaultParams : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetDefaultParams(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetDefaultParams();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetDefaultParams, "TestLtsyPktGetDefaultParams");
+
+#endif // TESTLTSYPKTGETDEFAULTPARAMS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetdynamiccapabilities.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetDynamicCapabilities.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetDynamicCapabilities
+
+
+#ifndef TESTLTSYPKTGETDYNAICCAP_H_
+#define TESTLTSYPKTGETDYNAICCAP_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktGetDynamicCapabilities : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetDynamicCapabilities(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetDynamicCapabilities();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetDynamicCapabilities, "TestLtsyPktGetDynamicCapabilities");
+
+#endif // TESTLTSYPKTGETDYNAICCAP_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetnwkregistrationstatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktNetworkRegistrationStatus.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktNetworkRegistrationStatus
+
+
+#ifndef TESTLTSYPKTNWKREGSTATUS_H_
+#define TESTLTSYPKTNWKREGSTATUS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktNetworkRegistrationStatus : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktNetworkRegistrationStatus(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktNetworkRegistrationStatus();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktNetworkRegistrationStatus, "TestLtsyPktNetworkRegistrationStatus");
+
+#endif // TESTLTSYPKTNWKREGSTATUS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetservicestatus.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetServiceStatus.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetServiceStatus
+
+
+#ifndef TESTLTSYPKTGETSERVICESTATUS_H_
+#define TESTLTSYPKTGETSERVICESTATUS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktGetServiceStatus : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetServiceStatus(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetServiceStatus();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetServiceStatust, "TestLtsyPktGetServiceStatust");
+
+#endif // TESTLTSYPKTGETSERVICESTATUS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktgetstaticcapabilities.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktGetStaticCapabilities.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktGetStaticCapabilities
+
+
+#ifndef TESTLTSYPKTGETSTATICCAP_H_
+#define TESTLTSYPKTGETSTATICCAP_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktGetStaticCapabilities : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktGetStaticCapabilities(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktGetStaticCapabilities();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktGetStaticCapabilities, "TestLtsyPktGetStaticCapabilities");
+
+#endif // TESTLTSYPKTGETSTATICCAP_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktinitialisecontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktInitialiseContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktInitialiseContext
+
+
+#ifndef TESTLTSYPKTINITIALISECONTEXT_H_
+#define TESTLTSYPKTINITIALISECONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktInitialiseContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktInitialiseContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktInitialiseContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktInitialiseContext, "TestLtsyPktInitialiseContext");
+
+#endif // TESTLTSYPKTINITIALISECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopencontext.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktOpenContext.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktOpenContext
+
+
+#ifndef TESTLTSYPKTOPENCONTEXT_H_
+#define TESTLTSYPKTOPENCONTEXT_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktOpenContext : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktOpenContext(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktOpenContext();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktOpenContext, "TestLtsyPktOpenContext");
+
+#endif // TESTLTSYPKTOPENCONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopencontextqos.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktOpenContextQos.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktOpenContextQos
+
+
+#ifndef TESTLTSYPKTOPENCONTEXTQOS_H_
+#define TESTLTSYPKTOPENCONTEXTQOS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet context
+ */
+class CTestLtsyPktOpenContextQos : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktOpenContextQos(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktOpenContextQos();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktOpenContextQos, "TestLtsyPktOpenContextQos");
+
+#endif // TESTLTSYPKTOPENCONTEXTQOS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktopenpacket.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktOpenPacket.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktOpenPacket
+
+
+#ifndef TESTLTSYPKTOPENPACKET_H_
+#define TESTLTSYPKTOPENPACKET_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to open packet service
+ */
+class CTestLtsyPktOpenPacket : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktOpenPacket(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktOpenPacket();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktOpenPacket, "TestLtsyPktOpenPacket");
+
+#endif // TESTTELEPHONYPKTACTIVATECONTEXT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetcontextconfig.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktSetContextConfig.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktSetContextConfig
+
+
+#ifndef TESTLTSYPKTSETCONTEXTCONFIG_H_
+#define TESTLTSYPKTSETCONTEXTCONFIG_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktSetContextConfig : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktSetContextConfig(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktSetContextConfig();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktSetContextConfig, "TestLtsyPktSetContextConfig");
+
+#endif // TESTLTSYPKTSETCONTEXTCONFIG_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetcontextqosprofile.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktSetContextQoSProfile.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktSetContextQoSProfile
+
+
+#ifndef TESTLTSYPKTSETCONTEXTQOSPROFILE_H_
+#define TESTLTSYPKTSETCONTEXTQOSPROFILE_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktSetContextQoSProfile : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktSetContextQoSProfile(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktSetContextQoSProfile();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktSetContextQoSProfile, "TestLtsyPktSetContextQoSProfile");
+
+#endif // TESTLTSYPKTSETCONTEXTQOSPROFILE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktsetdefaultparams.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//  TestLtsyPktSetDefaultParams.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktSetDefaultParams
+
+
+#ifndef TESTLTSYPKTSETDEFAULTPARAMS_H_
+#define TESTLTSYPKTSETDEFAULTPARAMS_H_
+
+// user include
+#include "TestLtsyPktTestStepBase.h"
+
+/**
+ * This is the test step class which calls methods of base class
+ * to activate a primary packet context
+ */
+class CTestLtsyPktSetDefaultParams : public CTestLtsyPktTestStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsyPktSetDefaultParams(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktSetDefaultParams();
+	
+protected:
+	TVerdict doTestStepL();
+	};
+
+_LIT(KTestLtsyPktSetDefaultParams, "TestLtsyPktSetDefaultParams");
+
+#endif // TESTLTSYPKTSETDEFAULTPARAMS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktshareddata.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,61 @@
+// CTestTelephonyPktSharedData.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPktSharedData
+
+#ifndef TESTTELEPHONYPKTSHAREDDATA_H_
+#define TESTTELEPHONYPKTSHAREDDATA_H_
+
+// system include
+#include <etelqos.h>
+#include <pcktcs.h>
+
+// const define
+const TInt KTFTFiltersGranularity 	= 1;
+const TInt KMaxServiceNum 			= 1;
+const TInt KMaxContextNum 			= 11;
+
+/**
+ * This class defines the shared data of PACKET test category between 
+ * different test steps.
+ */
+class CTestLtsyPktSharedData : public CBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public: 
+	virtual ~CTestLtsyPktSharedData();
+	static CTestLtsyPktSharedData* NewL();	
+private:
+	CTestLtsyPktSharedData();
+	void ConstructL();
+
+public:
+	RPacketService                      iPacket;
+	RPacketService::TStatus             iPacketStatus;
+	RPacketService::TRegistrationStatus iRegistrationStatus;
+	RPacketService::TMSClass            iCurrentMobileStationClass;
+	RPacketService::TMSClass            iMaxMobileStationClass;
+	TUint                               iStaticCaps;
+	RPacketService::TDynamicCapsFlags   iDynamicCaps;
+	RPacketService::TAttachMode         iCurrentAttachMode;
+	TInt                                iNumContexts;
+	TInt                                iMaxContextsAllowed;
+	RPacketContext                      iContext1;
+	RPacketContext                      iContext2;
+	RPacketContext                      iContext3;
+	RPacketService::TContextInfo        iContextInfo;
+	RPacketService::TContextInfo        iContextInfo2;
+	TName                               iContextName;
+	TName                               iContextName1;
+	RPacketContext::TContextStatus      iContextStatus;
+	RPacketQoS                          iQoS;
+	TName                               iQoSName;
+	RPacketQoS::TQoSCapsGPRS        iQoSCapabilities;
+	RPacketQoS::TQoSGPRSRequested   iQoSRequested;
+	RPacketQoS::TQoSGPRSNegotiated  iQoSNegotiated;
+	};
+
+#endif // TESTTELEPHONYPKTSHAREDDATA_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktshareddata.inl	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,57 @@
+//  TestTelephonyPktSharedData.inl
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  The inline function implementation of CTestTelephonyPktSharedData
+
+#ifndef TESTTELEPHONYPKTSHAREDDATA_INL_
+#define TESTTELEPHONYPKTSHAREDDATA_INL_
+
+// user include
+#include "TestLtsyPktSharedData.h"
+
+/**
+ * Get the reference of specified packet context
+ * aServiceIndex - the index in the packet service array
+ * aContextIndex - the index in the packet context array
+ * @return - the reference of the RPacketContext object
+ */
+RPacketContext& CTestLtsyPktSharedData::PacketContext(TInt aServiceIndex, TInt aContextIndex)
+	{
+	return iServices[aServiceIndex].iContexts[aContextIndex].iPktContext;
+	}
+
+/**
+ * Get the reference of specified packet QoS profile
+ * aServiceIndex - the index in the packet service array
+ * aContextIndex - the index in the packet context array
+ * @return - the reference of the QoS profile object
+ */
+RPacketQoS& CTestLtsyPktSharedData::PacketQos(TInt aServiceIndex, TInt aContextIndex)
+	{
+	return iServices[aServiceIndex].iContexts[aContextIndex].iPktQos;
+	}
+
+/**
+ * Get the reference of specified packet service
+ * aServiceIndex - the index in the packet service array
+ * @return - the reference of the RPacketService object
+ */
+RPacketService& CTestLtsyPktSharedData::PacketService(TInt aServiceIndex)
+	{
+	return iServices[aServiceIndex].iPktService;
+	}
+
+/**
+ * Get the reference of specified context data
+ * aServiceIndex - the index in the packet service array
+ * aContextIndex - the index in the packet context array
+ * @return - the reference of the TContextData object
+ */
+CTestLtsyPktSharedData::TContextData& CTestLtsyPktSharedData::ContextData(TInt aServiceIndex, TInt aContextIndex)
+	{
+	return iServices[aServiceIndex].iContexts[aContextIndex];
+	}
+
+#endif /*TESTTELEPHONYPKTSHAREDDATA_INL_*/
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsypktteststepbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,116 @@
+//  TestTelephonyPktTestStepBase.h
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyPktTestStepBase
+
+#ifndef TESTTELEPHONYPKTTESTSTEPBASE_H_
+#define TESTTELEPHONYPKTTESTSTEPBASE_H_
+
+// user include
+#include "te_integration_stltsysuitestepbase.h"
+#include "TestLtsyPktSharedData.h"
+#include "TestLtsyModel.h"
+
+/**
+ * This is the test step base class of PACKET test 
+ * category which provides methods
+ */
+class CTestLtsyPktTestStepBase : public CTe_integration_stltsySuiteStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+protected:
+
+	CTestLtsyPktTestStepBase(CTestLtsyModel& aModel);
+	virtual ~CTestLtsyPktTestStepBase();
+	
+	RMobilePhone& SharedPhone();
+	TBool IsOpenedPktService();
+	
+	void OpenPacketobject();
+	void ClosePacketobject();
+	
+	
+	void DisplayPacketServiceStatus();
+	void DisplayNetworkRegistrationStatus();
+	void DisplayContextInfo();
+	void DisplayContextStatus(RPacketContext::TContextStatus aContextStatus);
+	void DisplayContextStatus(RPacketContext& aContext, RPacketContext::TContextStatus& aContextStatus);
+	
+	void GprsContextAttachTest();
+	void GprsContextDetachTest();
+	
+	void GprsNetWorkTest();
+	
+	void GprsContextSetConfigTest();
+	void GprsContextGetConfigTest();
+	
+	void GprsGetDefaultContextParamsTest();
+	void GprsSetDefaultContextParamsTest();
+	
+	void DisplayStaticCapabilities();
+	void DisplayDynamicCapabilities();
+	
+	void GprsContextActivateTest();
+	void GprsContextDeactivateTest();
+	
+	void GprsSetQoSProfileTest();
+	void GprsGetQoSProfileTest();
+	
+	void NotificationContextAdded();
+	void NotificationContextAddedCancel();
+	
+	void OpenNewContext();
+	void CloseExistContext();
+	
+	void OpenExistingContext();
+	void OpenContextUsingUnknownName();
+	
+	void GprsContextDeleteTest();
+	
+	void GprsInitialiseContext();
+	
+	void NotificationContextStatusChange();
+	void NotificationContextStatusChangeCancel();
+	
+	void OpenNewContextQos();
+	void CloseExistContextQos();
+	
+
+	void GprsContextSetConfigTest1();
+	void GprsContextSetConfigTest2();
+	void GprsContextSetConfigTest3();
+	void GprsContextSetConfigTest4();
+
+	void GprsSetQoSProfileTest1();
+	void GprsSetQoSProfileTest2();
+	void GprsSetQoSProfileTest3();
+	void GprsSetQoSProfileTest4();
+	void GprsSetQoSProfileTest5();
+	void GprsSetQoSProfileTest6();
+	void GprsSetQoSProfileTest7();
+	void GprsSetQoSProfileTest8();
+	void GprsSetQoSProfileTest9();
+	void GprsSetQoSProfileTest10();
+	void GprsSetQoSProfileTest11();
+	void GprsSetQoSProfileTest12();
+	void GprsSetQoSProfileTest13();
+	void GprsSetQoSProfileTest14();
+	void GprsSetQoSProfileTest15();
+	void GprsSetQoSProfileTest16();
+	void GprsSetQoSProfileTest17();
+	void GprsSetQoSProfileTest18();
+	void GprsSetQoSProfileTest19();
+	void GprsSetQoSProfileTest20();
+
+protected:
+	CTestLtsyModel& iModel;
+	RMobilePhone& iSharedPhone;
+	};
+
+#endif // TESTTELEPHONYPKTTESTSTEPBASE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsyshareddata.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,79 @@
+// TestTelephonySharedData.h
+//
+// Copyright (c) 2003-2008 Symbian Software Ltd.  All rights reserved.
+//
+// This contains TestTelephonySharedData
+#if (!defined __TEST_TELEPHONY_SHARED_DATA_H__)
+#define __TEST_TELEPHONY_SHARED_DATA_H__
+
+// CDMA specific Conditional compilation
+//#include "../../group/configuration.cfg"
+
+// EPOC include
+#include <etelmm.h>
+#include <etel.h>
+#if (defined CDMA_API_ENABLED)
+#include <etelcdma.h>
+#endif
+#include <testexecutestepbase.h>
+
+#include "TestLtsyAsyncOperation.h"
+
+class CTestLtsySharedData : public CBase
+/**
+@internalAll
+@test
+@class CTestLtsySharedData
+
+For creating the shared data object and to access the object across
+the test steps.. 
+*/
+	{
+public:
+	static CTestLtsySharedData*	NewL();
+
+	~CTestLtsySharedData();
+	TInt		OpenPhone(const TName& aTsyName, CTestStep& aTestStep);
+	void		ClosePhone();
+	TInt		ReopenPhone();
+	TBool		PhoneOpened() const { return iPhoneOpened; }
+	CTelephony&	Telephony() const { return *iTelephony; }
+
+protected:
+	CTestLtsySharedData();
+	virtual void	ConstructL();
+
+public:
+	/** Holding Calld Id of line1 */
+	CTelephony::TCallId			iCallId;
+	/** Holding Calld Id of line2 */
+	CTelephony::TCallId			iCallId1;
+	/** Pointer to the RMobileCall object */
+	RMobileCall					iMobileCall;
+	/** Pointer to the RMobileLine object */
+	RMobileLine					iMobileLine;
+	/** Holds the TST name to be loaded */
+	TName						iTSYName;
+	/** For RTelServer connection */
+	TBool						iTelServerConnected;
+	/** For Phone module loading */
+	TBool						iPhoneModuleLoaded;
+	/** For RMobilePhone connection */
+	TBool						iPhoneOpened;
+	/** For RMobilePhone initialization */
+	TBool						iPhoneInitialised;
+	/** For RMobileLine connection */
+	TBool						iLineOpened;
+	/** For RMobileCall connection */
+	TBool						iCallOpened;
+	/** Holds RTelServer */
+	RTelServer					iServer;
+	RMobilePhone				iMobilePhone;
+private:
+	/** Pointer shared CTelephony object */
+	CTelephony*					iTelephony;
+	/** Holds pointer to the ActiveScheduler */
+	CActiveScheduler*			iActiveScheduler;
+};
+
+#endif //__TEST_TELEPHONY_SHARED_DATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsack.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsatutil.h
+// 
+
+#ifndef TESTLTSYSMSACK_H
+#define TESTLTSYSMSACK_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsAck
+ *
+ */
+class CTestLtsySmsAck : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsAck();
+	static CTestLtsySmsAck* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsAck* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsAck(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void AckSmsStoredL();
+private:
+
+	}; // class CTestLtsySmsAck
+_LIT(KCTestLtsySmsAck,"CTestLtsySmsAck");
+
+#endif // TESTLTSYSMSACK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsatutil.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,104 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsatutil.h
+// This contains SmsAtUtil which is util for Sms At command
+// 
+
+#ifndef TESTLTSYSMSATUTIL_H
+#define TESTLTSYSMSATUTIL_H
+// system include
+#include <e32std.h>
+#include <e32base.h>
+#include <etelmm.h>
+
+
+/**
+*  SmsAtUtil
+* 
+*/
+class SmsAtUtil : public CBase
+	{
+public:
+	
+	 /**
+	 * Converts aAscii ASCII chars to Semi Octets in aData.
+	 * One ASCII char (8bits in aAscii) is translated to one Semi-Octet (4bits in aData).
+	 * 
+	 * @param aAscii input ascii string
+	 * @param aData  output binary data 
+	 * @return Standard KErr... values 
+	 */	
+	static TInt ConvertAsciiToBinary(const TDesC8& aAscii,TDes8& aData);
+	
+	
+	 /**
+	 * Appends the binary data (aData) onto the end of an ASCII string (aAscii) in ASCII format.
+	 * 
+	 * @param aAscii  an ascii string 
+	 * @param aData   a  binary string 
+	 */
+	static void AppendDataToAscii(TDes8& aAscii,const TDesC8& aData);
+	
+	 /**
+	 * Reads an address from the front of the ASCII string (aAscii) and fills up Address structure (aAddress).
+	 * The address read from the ASCII string is removed from the ASCII string.
+	 * 
+	 * @param aAscii an ascii string 
+	 * @param aAddress  a SCA address
+	 * @return Standard KErr... values
+	 */
+	static TBool IsAddressChar(TChar aChar);
+
+private:
+	
+	 /**
+	 * @param aValue should be an ETSI Numbering-Plan-Identification field
+	 * @return The equivalent RMobilePhone::TMobileNPI value for aValue
+	 */
+	static RMobilePhone::TMobileNPI ConvertNumberingPlan(TInt aValue);
+	
+	 /**
+	 * @param aValue should be an ETSI Type-Of-Number field
+	 * @return The equivalent RMobilePhone::TMobileTON value for aValue
+	 */
+	static RMobilePhone::TMobileTON ConvertTypeOfNumber(TInt aValue); 
+	
+	 /**
+	 * Converts a TInt octet value into ASCII representation and then appends that
+	 * ASCII representation to the end of the given ASCII string.
+	 *
+	 * @param aOctet the octet value to append
+	 * @param aAscii the ASCII string to which aOctet value should be appended
+	 */	
+	static void AppendOctet(TInt aOctet,TDes8& aAscii);
+	
+	 /**
+	 * Returns the equivalent numeric value for a given ASCII address character.
+	 *
+	 * @param aChar the address character to be converted
+	 * @return The numeric value equivalent of the given address character.
+	 */
+	static TInt ConvertAddressChar(TChar aChar);
+	
+	 /**
+	 * Returns the equivalent ASCII address character for a given address value.
+	 *
+	 * @param aBinary the numerix value of the address character to be returned
+	 * @return The ASCII charcater which represents the given address numeric value.
+	 */
+	static TChar ConvertAddressChar(TInt aBinary);
+	
+	};
+
+#endif // TESTLTSYSMSATUTIL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsbase.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,60 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Implementation of the Class CTestLtsySmsBase
+// 
+//
+
+#ifndef TESTLTSYSMSBASE_H_
+#define TESTLTSYSMSBASE_H_
+
+// user include
+class CTestLtsyModel;
+#include "te_integration_stltsysuitestepbase.h"
+#include "testltsymodel.h"
+
+//constant defination
+const TInt16 KMessageLen(165);
+
+// class declaration
+/**
+ * This class provide the common functionalities related to the sms.
+ * 
+ */
+class CTestLtsySmsBase : public CTe_integration_stltsySuiteStepBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	virtual ~CTestLtsySmsBase();
+	CTestLtsySmsBase(CTestLtsyModel& aTestModel);
+protected:
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	RMobileSmsMessaging& Sms();
+	RMobileSmsStore& SmsStore();
+	void OpenPhoneL();
+	void OpenSmsL();
+	void OpenSmsStoreL();
+	void CloseSmsL();
+	void CloseSmsStoreL();
+	void GetIndex();
+protected:
+	CTestLtsyModel& iModel;
+	TInt iIndexNum;
+	TInt iStoreIndex;
+	};
+
+#endif /*TESTLTSYSMSBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmscontrolreceivesmscase1step.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+/**
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+/**
+ @file CTestLtsySmsControlReceiveSmsCase1Step.h
+ @internalTechnology
+*/
+#if (!defined __CTESTLTSYSMSCONTROLRECEIVESMSCASE1_STEP_H__)
+#define __CTESTLTSYSMSCONTROLRECEIVESMSCASE1_STEP_H__
+#include <TestExecuteStepBase.h>
+#include "te_integration_stltsysuitestepbase.h"
+
+class CCTestLtsySmsControlReceiveSmsCase1Step : public CTe_integration_stltsySuiteStepBase
+	{
+public:
+	CCTestLtsySmsControlReceiveSmsCase1Step();
+	~CCTestLtsySmsControlReceiveSmsCase1Step();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+
+// Please add/modify your class members here:
+private:
+	};
+
+_LIT(KCTestLtsySmsControlReceiveSmsCase1Step,"CTestLtsySmsControlReceiveSmsCase1Step");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmscontrolsendsmscase1step.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+/**
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+/**
+ @file CTestLtsySmsControlSendSmsCase1Step.h
+ @internalTechnology
+*/
+#if (!defined __CTESTLTSYSMSCONTROLSENDSMSCASE1_STEP_H__)
+#define __CTESTLTSYSMSCONTROLSENDSMSCASE1_STEP_H__
+#include <TestExecuteStepBase.h>
+#include "te_integration_stltsysuitestepbase.h"
+
+class CCTestLtsySmsControlSendSmsCase1Step : public CTe_integration_stltsySuiteStepBase
+	{
+public:
+	CCTestLtsySmsControlSendSmsCase1Step();
+	~CCTestLtsySmsControlSendSmsCase1Step();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+
+// Please add/modify your class members here:
+private:
+	};
+
+_LIT(KCTestLtsySmsControlSendSmsCase1Step,"CTestLtsySmsControlSendSmsCase1Step");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdelete.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsdeleteall.h
+// 
+
+#ifndef TESTLTSYSMSDELETE_H
+#define TESTLTSYSMSDELETE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsDelete
+ *
+ */
+class CTestLtsySmsDelete : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsDelete();
+	static CTestLtsySmsDelete* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsDelete* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsDelete(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void DeleteSmsL(TInt aIndex);
+private:
+
+	}; // class CTestLtsySmsDelete
+_LIT(KCTestLtsySmsDelete,"CTestLtsySmsDelete");
+
+#endif // TESTLTSYSMSDELETE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdeleteall.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsdeleteall.h
+// 
+
+#ifndef TESTLTSYSMSDELETEALL_H
+#define TESTLTSYSMSDELETEALL_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsDeleteAll
+ *
+ */
+class CTestLtsySmsDeleteAll : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsDeleteAll();
+	static CTestLtsySmsDeleteAll* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsDeleteAll* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsDeleteAll(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void DeleteAllSmsL();
+private:
+
+	}; // class CTestLtsySmsDeleteAll
+_LIT(KCTestLtsySmsDeleteAll,"CTestLtsySmsDeleteAll");
+
+#endif // TESTLTSYSMSDELETEALL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsdeleteinvalidindex.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsdeleteinvalidindex.h
+// 
+
+#ifndef TESTLTSYSMSDELETEINVALIDINDEX_H
+#define TESTLTSYSMSDELETEINVALIDINDEX_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsDeleteInvalidIndex
+ *
+ */
+class CTestLtsySmsDeleteInvalidIndex : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsDeleteInvalidIndex();
+	static CTestLtsySmsDeleteInvalidIndex* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsDeleteInvalidIndex* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsDeleteInvalidIndex(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void DeleteSmsL(TInt aIndex);
+private:
+
+	}; // class CTestLtsySmsDeleteInvalidIndex
+_LIT(KCTestLtsySmsDeleteInvalidIndex,"CTestLtsySmsDeleteInvalidIndex");
+
+#endif // TESTLTSYSMSDELETEINVALIDINDEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsnack.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,52 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsnack.h
+// 
+
+#ifndef TESTLTSYSMSNACK_H
+#define TESTLTSYSMSNACK_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsNack
+ *
+ */
+class CTestLtsySmsNack : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsNack();
+	static CTestLtsySmsNack* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsNack* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsNack(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void NackSmsStoredL();
+private:
+
+	}; // class CTestLtsySmsNack
+_LIT(KCTestLtsySmsNack,"CTestLtsySmsNack");
+
+#endif // TESTLTSYSMSNACK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsread.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsread.h
+// 
+
+#ifndef TESTLTSYSMSREAD_H
+#define TESTLTSYSMSREAD_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsRead
+ *
+ */
+class CTestLtsySmsRead : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsRead();
+	static CTestLtsySmsRead* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsRead* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsRead(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ReadSmsL(TInt aIndex);
+private:
+
+	RMobileSmsStore::TMobileGsmSmsEntryV1 iEntryV1;
+	}; // class CTestLtsySmsRead
+_LIT(KCTestLtsySmsRead,"CTestLtsySmsRead");
+
+#endif // TESTLTSYSMSREAD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsreadinvalidindex.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsreadinvalidindex.h
+// 
+
+#ifndef TESTLTSYSMSREADINVALIDINDEX_H
+#define TESTLTSYSMSREADINVALIDINDEX_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsReadInvalidIndex
+ *
+ */
+class CTestLtsySmsReadInvalidIndex : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsReadInvalidIndex();
+	static CTestLtsySmsReadInvalidIndex* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsReadInvalidIndex* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsReadInvalidIndex(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ReadSmsL(TInt aIndex);
+private:
+
+	RMobileSmsStore::TMobileGsmSmsEntryV1 iEntryV1;
+	}; // class CTestLtsySmsReadInvalidIndex
+_LIT(KCTestLtsySmsReadInvalidIndex,"CTestLtsySmsReadInvalidIndex");
+
+#endif // TESTLTSYSMSREADINVALIDINDEX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsreceive.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,47 @@
+//
+// testltsysmsreceive.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSRECEIVE_H
+#define TESTLTSYSMSRECEIVE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+
+/**
+ * CTestLtsySmsReceive
+ *
+ */
+class CTestLtsySmsReceive : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsReceive();
+	static CTestLtsySmsReceive* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsReceive* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsReceive(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void ReceiveSmsL();
+private:
+
+	/**
+	*  Receiving message's TPDU
+	*/
+	TBuf8<KMessageLen> iRecvMsg;
+	}; // class CTestLtsySmsReceive
+_LIT(KCTestLtsySmsReceive,"CTestLtsySmsReceive");
+
+#endif // TESTLTSYSMSRECEIVE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmssend.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+//
+// testltsysmssend.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSSEND_H
+#define TESTLTSYSMSSEND_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsSend
+ *
+ */
+class CTestLtsySmsSend : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsSend();
+	static CTestLtsySmsSend* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsSend* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsSend(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void SendSmsL();
+	void FillSmsAttibutes(const TDesC& aTelNumber);
+private:
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1 iSmsAttr;
+
+	}; // class CTestLtsySmsSend
+_LIT(KCTestLtsySmsSend,"CTestLtsySmsSend");
+
+#endif // TESTLTSYSMSSEND_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmssendinvalidparam.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,47 @@
+//
+// testltsysmssendinvalidparam.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSSENDINVALIDPARAM_H
+#define TESTLTSYSMSSENDINVALIDPARAM_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsSendInvalidParam
+ *
+ */
+class CTestLtsySmsSendInvalidParam : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsSendInvalidParam();
+	static CTestLtsySmsSendInvalidParam* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsSendInvalidParam* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsSendInvalidParam(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void SendSmsL();
+	void FillSmsAttibutes(const TDesC& aTelNumber);
+	void SendSms1L();
+	void FillSmsAttibutes1(const TDesC& aTelNumber);
+	void SendSms2L();
+	void FillSmsAttibutes2(const TDesC& aTelNumber);
+private:
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1 iSmsAttr;
+	}; // class CTestLtsySmsSendInvalidParam
+_LIT(KCTestLtsySmsSendInvalidParam,"CTestLtsySmsSendInvalidParam");
+
+#endif // TESTLTSYSMSSENDINVALIDPARAM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsshareddata.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,39 @@
+// TestTelephonySmsSharedData.h
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonySmsSharedData
+
+#ifndef TESTTELEPHONYSMSSHAREDDATA_H
+#define TESTTELEPHONYSMSSHAREDDATA_H
+
+// system include
+#include <e32cmn.h>
+#include <e32base.h>
+#include <etelmm.h>
+
+/**
+ * This class defines the shared data of sms test category between 
+ * different test steps.
+ */
+class CTestLtsySmsSharedData : public CBase
+/**
+ * @internalAll
+ * @test
+ */
+	{
+public:
+	CTestLtsySmsSharedData();
+	virtual ~CTestLtsySmsSharedData();
+	static CTestLtsySmsSharedData* NewL();
+	RArray<RMobileSmsMessaging>& SmsMessagingArray();
+	RArray<RMobileSmsStore>& SmsStoreArray();
+	void Reset();
+	void InitializeL();
+private:
+	void ConstructL();
+private:
+	RArray<RMobileSmsMessaging> iMessaging;
+	RArray<RMobileSmsStore> iSmsStore;
+	};
+
+#endif // TESTTELEPHONYSMSSHAREDDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsstore.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,65 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsstore.h
+// 
+
+#ifndef TESTLTSYSMSSTORE_H
+#define TESTLTSYSMSSTORE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsStore
+ *
+ */
+class CTestLtsySmsStore : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsStore();
+	static CTestLtsySmsStore* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsStore* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsStore(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void StoreSmsL();
+	void ReceiveSmsL();
+	void WriteSmsL();
+	void AckSmsStoredL();
+	void NackSmsStoredL();
+private:
+	void FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca);
+	/**
+	*  Receiving message's attributs
+	*/ 
+	RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 iReceiveAttr;
+	/**
+	*  Receiving message's TPDU
+	*/
+	TBuf8<KMessageLen> iRecvMsg;
+	
+	}; // class CTestLtsySmsStore
+_LIT(KCTestLtsySmsStore,"CTestLtsySmsStore");
+
+#endif // TESTLTSYSMSSTORE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmsstoregetinfo.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+//
+// testltsygetmessagestoreinfo.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSSTOREGETINFO_H
+#define TESTLTSYSMSSTOREGETINFO_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsStoreGetInfo
+ *
+ */
+class CTestLtsySmsStoreGetInfo : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsStoreGetInfo();
+	static CTestLtsySmsStoreGetInfo* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsStoreGetInfo* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsStoreGetInfo(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void GetSmsStoreInfoL();
+	void CheckSmsStoreInfoL();
+private:
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1   iInfo;	
+	}; // class CTestLtsySmsStoreGetInfo
+_LIT(KCTestLtsySmsStoreGetInfo,"CTestLtsySmsStoreGetInfo");
+
+#endif // TESTLTSYSMSSTOREGETINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmswrite.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+//
+// testltsysmswrite.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSWRITE_H
+#define TESTLTSYSMSWRITE_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsWrite
+ *
+ */
+class CTestLtsySmsWrite : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsWrite();
+	static CTestLtsySmsWrite* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsWrite* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsWrite(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void WriteSmsL();
+private:
+
+	void FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca);
+	}; // class CTestLtsySmsWrite
+_LIT(KCTestLtsySmsWrite,"CTestLtsySmsWrite");
+
+#endif // TESTLTSYSMSWRITE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/inc/testltsysmswriteinvalidparam.h	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,46 @@
+//
+// testltsysmswriteinvalidparam.h
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#ifndef TESTLTSYSMSWRITEINVALIDPARAM_H
+#define TESTLTSYSMSWRITEINVALIDPARAM_H
+
+//system include 
+#include <e32std.h>
+#include <e32base.h>
+
+//user include
+#include "testltsysmsbase.h"
+#include "testltsymodel.h"
+// CLASS DECLARATION
+
+/**
+ * CTestLtsySmsWriteInvalidParam
+ *
+ */
+class CTestLtsySmsWriteInvalidParam : public CTestLtsySmsBase
+	{
+public:
+
+	~CTestLtsySmsWriteInvalidParam();
+	static CTestLtsySmsWriteInvalidParam* NewL(CTestLtsyModel& aTestModel);
+	static CTestLtsySmsWriteInvalidParam* NewLC(CTestLtsyModel& aTestModel);
+	CTestLtsySmsWriteInvalidParam(CTestLtsyModel& aTestModel);
+	void ConstructL();
+protected:	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPostambleL();
+	void WriteSmsL();
+	void WriteSms1L();
+	void WriteSms2L();
+	void WriteSms3L();
+	void WriteSms4L();
+private:
+	void FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca);
+	}; // class CTestLtsySmsWriteInvalidParam
+_LIT(KCTestLtsySmsWriteInvalidParam,"CTestLtsySmsWriteInvalidParam");
+
+#endif // TESTLTSYSMSWRITEINVALIDPARAM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stllsycallcontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,114 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+
+PRINT ************************
+PRINT Start case 1
+PRINT Dial->Hold->Resume->Hold->Resume->Hang up
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlBase
+
+PRINT ************************
+PRINT Start case 2
+PRINT Dial->Hang up->Close
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialHangupCase
+
+PRINT ************************
+PRINT Start case 3
+PRINT Notify incoming call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase1
+
+PRINT ************************
+PRINT Start case 4
+PRINT Dial emergency call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialEmergencyCall
+
+PRINT ************************
+PRINT Start case 5
+PRINT Notify incoming call->Answer->RCustomAPI close all
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlCustomAPITerminateAllCalls
+
+
+PRINT ************************
+PRINT Start case 6
+PRINT Dial one->Dial two->Phone close all
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlPhoneTerminateAllCalls
+
+PRINT ************************
+PRINT Start case 7
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Notify incoming call 2
+PRINT Answer call 2
+PRINT Hangup call 1->Hangup call 2
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase2
+
+PRINT ************************
+PRINT Start case 8
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Hold 1
+PRINT Resume 1
+PRINT Hang up 1
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase3
+
+PRINT ************************
+PRINT Start case 9
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Notify incoming call 2
+PRINT Answer call 2
+PRINT Swap call 1
+PRINT Swap call 2
+PRINT Hang up call 1
+PRINT Hang up call 2
+PRINT Close call 1
+PRINT Close call 2
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlSwapCalls
+
+PRINT ************************
+PRINT Start case 10
+PRINT Dial call number 11
+PRINT Close call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialBadCall
+
+PRINT ************************
+PRINT Start case 11
+PRINT Dial call self number 
+PRINT Close call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialSelfCall
+
+PRINT ************************
+PRINT Start case 12
+PRINT Dial normal call
+PRINT Dial emergency call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialEmergencyCallStopAllCall
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stllsysmscontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite  -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyOpenSms 
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyOpenSmsStore
+RUN_TEST_STEP 20 te_integration_stltsySuite CTestLtsySmsSend 
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyGetMessageStoreInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsStoreGetInfo
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsReceive
+delay 2000
+RUN_TEST_STEP 30 te_integration_stltsySuite CTestLtsySmsAck
+RUN_TEST_STEP 30 te_integration_stltsySuite CTestLtsySmsNack
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsySmsSendInvalidParam
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsRead
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsReadInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsDelete
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsDeleteInvalidIndex
+delay 5000
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsDeleteAll
+delay 5000
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsStore
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsWrite
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsWriteInvalidParam
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyCloseSms  
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyCloseSmsStore                             
+                             
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsySuite.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,12 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDiallCase1Step c:\testdata\configs\te_integration_stltsySuite.ini Section0
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsySmsControlReceiveSmsCase1Step c:\testdata\configs\te_integration_stltsySuite.ini Section1
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsySmsControlSendSmsCase1Step c:\testdata\configs\te_integration_stltsySuite.ini Section2
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsyphonebook.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,26 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite  -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+delay 5000
+RUN_TEST_STEP 120 te_integration_stltsySuite CTestLtsyPhbkGetStoreInfo
+delay 2000
+RUN_TEST_STEP 120 te_integration_stltsySuite CTestLtsyPhbkOpen 
+delay 10000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkDelete 
+delay 2000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkDeleteInvalidIndex
+delay 2000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkWrite      
+delay 1000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkWriteInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkRead    
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkReadInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkClose                       
+                           
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsyphonecontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,22 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetFdnStatus
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetNetworkRegistrationStatus
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneSingalCap
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneSingalStrength
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneBatteryCap
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneBatteryInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetCellInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetPhoneID
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneSetNetworkSelectionSetting
+RUN_TEST_STEP 30 te_integration_stltsySuite TestLtsyPhoneSelectNetwork
+//RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyClosePhone
+
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/scripts/te_integration_stltsypktcontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,41 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenPacket
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktAttachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktDetachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktAttachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetStaticCapabilities
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetDynamicCapabilities
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktInitialiseContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktSetContextConfig
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenContextQos
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktSetContextQoSProfile
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktActivateContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 150 te_integration_stltsySuite TestLtsyPktDeactivateContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktCloseContextQos
+RUN_TEST_STEP 100 te_integration_stltsySuite TestLtsyPktDeleteContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktCloseContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktClosePacket
+
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/te_integration_stltsysuiteserver.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,389 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Example file/test code to demonstrate how to develop a TestExecute Server
+// Developers should take this project as a template and substitute their own
+// for (WINS && !EKA2) versions will be xxxServer.Dll and require a thread to be started
+// in the process of the client. The client initialises the server by calling the
+// one and only ordinal.
+// 
+//
+
+/**
+ @file Te_integration_stltsySuiteServer.cpp
+ @internalTechnology
+*/
+
+#include "te_integration_stltsysuiteserver.h"
+#include "testltsysmscontrolreceivesmscase1step.h"
+#include "testltsysmscontrolsendsmscase1step.h"
+#include "testltsycallcontrolbase.h"
+#include "testltsycallcontroldialhangupcase.h"
+#include "testltsycallcontrolnotifyincomingcallcase1.h"
+#include "testltsycallcontrolnotifyincomingcallcase2.h"
+#include "testltsycallcontrolnotifyincomingcallcase3.h"
+#include "testltsycallcontrolswapcalls.h"
+#include "testltsycallcontrolcustomapiterminateallcalls.h"
+#include "testltsycallcontrolphoneterminateallcalls.h"
+#include "testltsycallcontroldialemergencycall.h"
+#include "testltsycallcontroldialbadcall.h"
+#include "testltsycallcontroldialselfcall.h"
+#include "testltsycallcontroldialemergencycallstopallcalls.h"
+
+#include "testltsyopenphone.h"
+#include "testltsyclosephone.h"
+#include "testltsyclosephone.h"
+#include "testltsyopenphone.h"
+#include "testltsygetphonebatteryinfo.h"
+#include "testltsygetphonesignalstrength.h"
+#include "testltsygetphonebatterycap.h"
+#include "testltsygetphonesignalcap.h"
+#include "testltsyphonegetfdnstatus.h"
+#include "testltsyphonegetnetworkregistrationstatus.h"
+#include "testltsyphonegetphoneid.h"
+#include "testltsyphonegetdetectednetworks.h"
+#include "testltsyphonegetdetectednetworkscancel.h"
+#include "testltsyphonesetnetworkselectionsetting.h"
+#include "testltsyphoneselectnetwork.h"
+#include "testltsyphonegethomenetwork.h"
+#include "testltsyphonegetcurrentnetworkinfo.h"
+#include "testltsyphonegetcellinfo.h"
+#include "testltsyphoneregistercellinfochangenotification.h"
+
+
+#include "testltsypktopenpacket.h"
+#include "testltsypktclosepacket.h"
+#include "testltsypktopencontext.h"
+#include "testltsypktinitialisecontext.h"
+#include "testltsypktclosecontext.h"
+#include "testltsypktattachnetwork.h"
+#include "testltsypktdetachnetwork.h"
+#include "testltsypktactivatecontext.h"
+#include "testltsypktdeactivatecontext.h"
+#include "testltsypktdeletecontext.h"
+#include "testltsypktgetservicestatus.h"
+#include "testltsypktgetnwkregistrationstatus.h"
+#include "testltsypktgetcontextconfig.h"
+#include "testltsypktgetdefaultparams.h"
+#include "testltsypktsetdefaultparams.h"
+#include "testltsypktgetcontextinfo.h"
+#include "testltsypktsetcontextconfig.h"
+#include "testltsypktopencontextqos.h"
+#include "testltsypktclosecontextqos.h"
+#include "testltsypktgetcontextqosprofile.h"
+#include "testltsypktsetcontextqosprofile.h"
+#include "testltsypktgetstaticcapabilities.h"
+#include "testltsypktgetdynamiccapabilities.h"
+
+#include "testltsyopensms.h"
+#include "testltsysmssend.h"
+#include "testltsyopensmsstore.h"
+#include "testltsyclosesms.h"
+#include "testltsyclosesmsstore.h"
+#include "testltsygetmessagestoreinfo.h"
+#include "testltsysmsstoregetinfo.h"
+#include "testltsysmsack.h"
+#include "testltsysmsnack.h"
+#include "testltsysmsreceive.h"
+#include "testltsysmssendinvalidparam.h"
+#include "testltsysmsread.h"
+#include "testltsysmsreadinvalidindex.h"
+#include "testltsysmsdelete.h"
+#include "testltsysmsdeleteinvalidindex.h"
+#include "testltsysmsdeleteall.h"
+#include "testltsysmsstore.h"
+#include "testltsysmswrite.h"
+#include "testltsysmswriteinvalidparam.h"
+
+#include "testltsyphbkopen.h"
+#include "testltsyphbkclose.h"
+#include "testltsyphbkgetstoreinfo.h"
+#include "testltsyphbkdelete.h"
+#include "testltsyphbkdeleteinvalidindex.h"
+#include "testltsyphbkwrite.h"
+#include "testltsyphbkwriteinvalidindex.h"
+#include "testltsyphbkread.h"
+#include "testltsyphbkreadinvalidindex.h"
+
+_LIT(KServerName,"Te_integration_stltsySuite");
+CTe_integration_stltsySuite* CTe_integration_stltsySuite::NewL()
+/**
+ * @return - Instance of the test server
+ * Same code for Secure and non-secure variants
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CTe_integration_stltsySuite * server = new (ELeave) CTe_integration_stltsySuite();
+	CleanupStack::PushL(server);
+
+	server->ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+CTe_integration_stltsySuite::CTe_integration_stltsySuite()
+:	CTestServer()
+,	iSharedData(NULL)
+/**
+Constructor
+*/
+	{
+	}
+
+void CTe_integration_stltsySuite::ConstructL(const TDesC& aName)
+/**
+  Constructs a CTestTelephonySharedData ojbect to 
+  hold the shared data (CTelephony object)
+*/
+	{
+	CTestServer::ConstructL(aName);
+	iSharedData = CTestLtsySharedData::NewL();
+	iTestModel = CTestLtsyModel::NewL();
+	}
+
+CTe_integration_stltsySuite::~CTe_integration_stltsySuite()
+/**
+  Destructor deleting the CTestTelephonySharedData ojbect. 
+*/
+	{
+	delete iSharedData;
+	delete iTestModel;
+	}
+
+// Secure variants much simpler
+// For EKA2, just an E32Main and a MainL()
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().DataCaging(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTe_integration_stltsySuite* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTe_integration_stltsySuite::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+	}
+
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Secure variant only
+ * Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+    }
+
+
+CTestStep* CTe_integration_stltsySuite::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+	
+	  if(aStepName == KCTestLtsySmsControlReceiveSmsCase1Step)
+	      testStep = new CCTestLtsySmsControlReceiveSmsCase1Step();
+	  else if(aStepName == KCTestLtsySmsControlSendSmsCase1Step)
+	      testStep = new CCTestLtsySmsControlSendSmsCase1Step();
+	  else if(aStepName==KTestLtsyOpenPhone)
+		  testStep = new CTestLtsyOpenPhone(*iTestModel);
+	  else if(aStepName==KTestLtsyClosePhone)
+	      testStep = new CTestLtsyClosePhone(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetFdnStatus)
+	      testStep = new CTestLtsyPhoneGetFdnStatus(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetNetworkRegistrationStatus)
+	      testStep = new CTestLtsyPhoneGetNetworkRegistrationStatus(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetPhoneID)
+	      testStep = new CTestLtsyPhoneGetPhoneID(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetDetectedNetworks)
+	      testStep = new CTestLtsyPhoneGetDetectedNetworks(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetDetectedNetworksCancelCancel)
+	      testStep = new CTestLtsyPhoneGetDetectedNetworksCancelCancel(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneSetNetworkSelectionSetting)
+	      testStep = new CTestLtsyPhoneSetNetworkSelectionSetting(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneSelectNetwork)
+	      testStep = new CTestLtsyPhoneSelectNetwork(*iTestModel);
+	  else if(aStepName==KTestLtsyGetPhoneBatteryInfo)
+	      testStep = new CTestLtsyGetPhoneBatteryInfo(*iTestModel);
+	  else if(aStepName==KTestLtsyGetPhoneSingalStrength)
+	      testStep = new CTestLtsyGetPhoneSignalStrength(*iTestModel);
+	  else if(aStepName==KTestLtsyGetPhoneBatteryCap)
+	      testStep = new CTestLtsyGetPhoneBatteryCap(*iTestModel);
+	  else if(aStepName==KTestLtsyGetPhoneSingalCap)
+	      testStep = new CTestLtsyGetPhoneSignalCap(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetHomeNetwork)
+	      testStep = new CTestLtsyPhoneGetHomeNetwork(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetCurrentNetworkInfo)
+	      testStep = new CTestLtsyPhoneGetCurrentNetworkInfo(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneRegisterCellInfoChangeNotification)
+	      testStep = new CTestLtsyPhoneRegisterCellInfoChangeNotification(*iTestModel);
+	  else if(aStepName==KTestLtsyPhoneGetCellInfo)
+	      testStep = new CTestLtsyPhoneGetCellInfo(*iTestModel);
+	  else if(aStepName==KTestLtsyPktActivateContext)
+	      testStep = new CTestLtsyPktActivateContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktAttachNetwork)
+	      testStep = new CTestLtsyPktAttachNetwork(*iTestModel);
+	  else if(aStepName==KTestLtsyPktCloseContext)
+	      testStep = new CTestLtsyPktCloseContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktCloseContextQos)
+	      testStep = new CTestLtsyPktCloseContextQos(*iTestModel);
+	  else if(aStepName==KTestLtsyPktClosePacket)
+	      testStep = new CTestLtsyPktClosePacket(*iTestModel);
+	  else if(aStepName==KTestLtsyPktDeactivateContext)
+	      testStep = new CTestLtsyPktDeactivateContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktDeleteContext)
+	      testStep = new CTestLtsyPktDeleteContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktDetachNetwork)
+	      testStep = new CTestLtsyPktDetachNetwork(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetContextConfig)
+	      testStep = new CTestLtsyPktGetContextConfig(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetContextInfo)
+	      testStep = new CTestLtsyPktGetContextInfo(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetContextQoSProfile)
+	      testStep = new CTestLtsyPktGetContextQoSProfile(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetDefaultParams)
+	      testStep = new CTestLtsyPktGetDefaultParams(*iTestModel);
+	  else if(aStepName==KTestLtsyPktNetworkRegistrationStatus)
+	      testStep = new CTestLtsyPktNetworkRegistrationStatus(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetServiceStatust)
+	      testStep = new CTestLtsyPktGetServiceStatus(*iTestModel);
+	  else if(aStepName==KTestLtsyPktInitialiseContext)
+	      testStep = new CTestLtsyPktInitialiseContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetStaticCapabilities)
+	      testStep = new CTestLtsyPktGetStaticCapabilities(*iTestModel);
+	  else if(aStepName==KTestLtsyPktGetDynamicCapabilities)
+	      testStep = new CTestLtsyPktGetDynamicCapabilities(*iTestModel);
+	  else if(aStepName==KTestLtsyPktOpenContext)
+	      testStep = new CTestLtsyPktOpenContext(*iTestModel);
+	  else if(aStepName==KTestLtsyPktOpenContextQos)
+	      testStep = new CTestLtsyPktOpenContextQos(*iTestModel);
+	  else if(aStepName==KTestLtsyPktOpenPacket)
+	      testStep = new CTestLtsyPktOpenPacket(*iTestModel);
+	  else if(aStepName==KTestLtsyPktSetContextConfig)
+	      testStep = new CTestLtsyPktSetContextConfig(*iTestModel);
+	  else if(aStepName==KTestLtsyPktSetContextQoSProfile)
+	      testStep = new CTestLtsyPktSetContextQoSProfile(*iTestModel);
+	  else if(aStepName==KTestLtsyPktSetDefaultParams)
+	      testStep = new CTestLtsyPktSetDefaultParams(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlNotifyIncomingCallCase1)
+    	 testStep = new CTestLtsyCallControlNotifyIncomingCallCase1(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlDialHangupCase)
+    	 testStep = new CTestLtsyCallControlDialHangupCase(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlNotifyIncomingCallCase2)
+    	 testStep = new CTestLtsyCallControlNotifyIncomingCallCase2(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlNotifyIncomingCallCase3)
+    	 testStep = new CTestLtsyCallControlNotifyIncomingCallCase3(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlSwapCalls)
+    	 testStep = new CTestLtsyCallControlSwapCalls(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlCustomAPITerminateAllCalls)
+    	 testStep = new CTestLtsyCallControlCustomAPITerminateAllCalls(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlPhoneTerminateAllCalls)
+    	 testStep = new CTestLtsyCallControlPhoneTerminateAllCalls(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlDialEmergencyCall)
+    	 testStep = new CTestLtsyCallControlDialEmergencyCall(*iTestModel);
+     else if (aStepName == KTestLtsyCallControlBase)
+    	 testStep = new CTestLtsyCallControlBase(*iTestModel);
+     else if(aStepName == KCTestLtsyOpenSms) 
+       	 testStep = new CTestLtsyOpenSms(*iTestModel);
+        else if(aStepName == KCTestLtsyOpenSmsStore) 
+       	 testStep = new CTestLtsyOpenSmsStore(*iTestModel);
+        else if(aStepName == KCTestLtsySmsSend)
+       	 testStep = new CTestLtsySmsSend(*iTestModel);	
+        else if(aStepName == KCTestLtsyCloseSms) 
+            testStep = new CTestLtsyCloseSms(*iTestModel);
+        else if(aStepName == KCTestLtsyCloseSmsStore) 
+       	 testStep = new CTestLtsyCloseSmsStore(*iTestModel);
+        else if(aStepName == KCTestLtsyGetMessageStoreInfo) 
+            testStep = new CTestLtsyGetMessageStoreInfo(*iTestModel);
+        else if(aStepName == KCTestLtsySmsStoreGetInfo) 
+       	 testStep = new CTestLtsySmsStoreGetInfo(*iTestModel); 
+        else if(aStepName == KCTestLtsySmsReceive) 
+            testStep = new CTestLtsySmsReceive(*iTestModel);
+        else if(aStepName == KCTestLtsySmsAck) 
+            testStep = new CTestLtsySmsAck(*iTestModel);
+        else if(aStepName == KCTestLtsySmsNack) 
+          	 testStep = new CTestLtsySmsNack(*iTestModel);  
+        else if(aStepName == KCTestLtsySmsSendInvalidParam) 
+            testStep = new CTestLtsySmsSendInvalidParam(*iTestModel);  
+        else if(aStepName == KCTestLtsySmsRead) 
+            testStep = new CTestLtsySmsRead(*iTestModel);
+        else if(aStepName == KCTestLtsySmsReadInvalidIndex) 
+         	 testStep = new CTestLtsySmsReadInvalidIndex(*iTestModel); 
+        else if(aStepName == KCTestLtsySmsDelete) 
+                testStep = new CTestLtsySmsDelete(*iTestModel);
+        else if(aStepName == KCTestLtsySmsDeleteInvalidIndex) 
+          	 testStep = new CTestLtsySmsDeleteInvalidIndex(*iTestModel);  
+        else if(aStepName == KCTestLtsySmsDeleteAll) 
+            testStep = new CTestLtsySmsDeleteAll(*iTestModel);  
+        else if(aStepName == KCTestLtsySmsStore) 
+            testStep = new CTestLtsySmsStore(*iTestModel);
+        else if(aStepName == KCTestLtsySmsWrite) 
+            testStep = new CTestLtsySmsWrite(*iTestModel);  
+        else if(aStepName == KCTestLtsySmsWriteInvalidParam) 
+            testStep = new CTestLtsySmsWriteInvalidParam(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkOpen) 
+            testStep = new CTestLtsyPhbkOpen(*iTestModel);
+        else if(aStepName == KCTestLtsyPhbkClose) 
+            testStep = new CTestLtsyPhbkClose(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkGetStoreInfo) 
+            testStep = new CTestLtsyPhbkGetStoreInfo(*iTestModel);  
+        else if(aStepName == KCTestLtsyPhbkDelete) 
+            testStep = new CTestLtsyPhbkDelete(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkDeleteInvalidIndex) 
+            testStep = new CTestLtsyPhbkDeleteInvalidIndex(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkWrite) 
+            testStep = new CTestLtsyPhbkWrite(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkWriteInvalidIndex) 
+            testStep = new CTestLtsyPhbkWriteInvalidIndex(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkRead) 
+            testStep = new CTestLtsyPhbkRead(*iTestModel); 
+        else if(aStepName == KCTestLtsyPhbkReadInvalidIndex) 
+            testStep = new CTestLtsyPhbkReadInvalidIndex(*iTestModel);   	 
+        else if (aStepName == KTestLtsyCallControlDialBadCall)
+    	   testStep = new CTestLtsyCallControlDialBadCall(*iTestModel);
+        else if (aStepName == KTestLtsyCallControlDialSelfCall)
+    	   testStep = new CTestLtsyCallControlDialSelfCall(*iTestModel);
+        else if (aStepName == KTestLtsyCallControlDialEmergencyCallStopAllCall)
+    	    testStep = new CTestLtsyCallControlDialEmergencyCallStopAllCall(*iTestModel);
+	  
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/te_integration_stltsysuitestepbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,65 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file Te_integration_stltsySuiteStepBase.cpp
+ @internalTechnology
+*/
+
+#include "te_integration_stltsysuitestepbase.h"
+#include "te_integration_stltsysuitedefs.h"
+
+// Device driver constants
+
+TVerdict CTe_integration_stltsySuiteStepBase::doTestStepPreambleL()
+/**
+ * @return - TVerdict
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all initialisation common to derived classes in here.
+ * Make it being able to leave if there are any errors here as there's no point in
+ * trying to run a test step if anything fails.
+ * The leave will be picked up by the framework.
+ */
+	{
+
+	// process some common pre setting to test steps then set SetTestStepResult to EFail or Epass.
+	INFO_PRINTF1(_L("Please delete this line or modify me!! I am in doTestStepPreambleL() of the class CTe_integration_stltsySuiteStepBase!"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTe_integration_stltsySuiteStepBase::doTestStepPostambleL()
+/**
+ * @return - TVerdict
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all after test treatment common to derived classes in here.
+ * Make it being able to leave
+ * The leave will be picked up by the framework.
+ */
+	{
+
+	// process some common post setting to test steps then set SetTestStepResult to EFail or Epass.
+	INFO_PRINTF1(_L("Please delete this line or modify me!! I am in doTestStepPostambleL() of the class CTe_integration_stltsySuiteStepBase!"));
+	//SetTestStepResult(EPass);  // or EFail
+	return TestStepResult();
+	}
+
+CTe_integration_stltsySuiteStepBase::~CTe_integration_stltsySuiteStepBase()
+	{
+	}
+
+CTe_integration_stltsySuiteStepBase::CTe_integration_stltsySuiteStepBase()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyasyncoperation.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,60 @@
+// TestTelephonyAsyncOperation.cpp
+//
+// Copyright (c) 2004-2007 Symbian Ltd.  All rights reserved.
+//
+// The active object derived class for asynchronous requests
+//
+
+// Epoc includes
+#include <testproperty.h>
+#include <e32property.h>
+#include <sacls.h>
+
+// User includes
+#include "TestLtsyAsyncOperation.h"
+
+CTelephonyAsyncOperation::CTelephonyAsyncOperation(CTestStep& aTestStep)
+/*
+Constructor
+
+Adds the active object to active scheduler.
+
+@param aInt Operation id
+*/
+:	CActive(EPriorityStandard)
+,	iTestStep(aTestStep)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CTelephonyAsyncOperation::~CTelephonyAsyncOperation()
+/*
+Destructor
+*/
+	{
+	}
+
+void CTelephonyAsyncOperation::DoCancel()
+/*
+For canceling the request
+*/
+	{
+	}
+
+void CTelephonyAsyncOperation::RunL()
+/*
+Stop the active scheduler
+*/
+	{
+	CActiveScheduler::Stop();
+	}
+
+TInt CTelephonyAsyncOperation::SetOperation()
+/*
+Set the active object request and start the active scheduler
+*/
+	{
+	SetActive();
+	CActiveScheduler::Start();
+	return iStatus.Int();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,868 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+#include "te_integration_stltsysuitestepbase.h"
+#include "te_integration_stltsysuitedefs.h"
+#include "testltsycallcontrolbase.h"
+
+//const define
+_LIT16(KPhoneTSY, "phonetsy");
+_LIT16(KLtsyTelNumOne, "58848158");
+_LIT16(KLtsyTelNumTwo, "58848157");
+_LIT16(KLtsyBadNumber, "11");
+_LIT16(KLtsySelfNumber, "15901279603");
+
+
+CTestLtsyCallControlBase::CTestLtsyCallControlBase(CTestLtsyModel& aModel) : iLtsyModel(aModel)
+	{
+	
+	}
+
+CTestLtsyCallControlBase::~CTestLtsyCallControlBase()
+	{
+	CloseLine();
+	
+	CloseCallOne();
+	
+	CloseCallTwo();	
+	}
+
+TVerdict CTestLtsyCallControlBase::doTestStepPreambleL()
+	{
+	
+	OpenPhoneL();
+	
+	OpenLineL();
+	
+	OpenCustomAPIL();
+	
+	return EPass;
+	}
+
+TVerdict CTestLtsyCallControlBase::doTestStepPostambleL()
+	{
+	
+	CloseLine();
+	
+	CloseCallOne();
+	
+	CloseCallTwo();
+	
+	CloseCustomAPI();
+	
+	return EPass;
+	}
+
+TVerdict CTestLtsyCallControlBase::doTestStepL()
+	{
+	//Open Call
+	OpenCallOneL();
+	
+	//Dial Call
+	DialCallOne();
+	
+	User::After(1000*1000);
+	
+	//Hold call
+	HoldCallOne();
+	
+	User::After(1000*1000);
+	
+	//Resume call
+	ResumeCallOne();
+	
+	User::After(1000*1000);
+	
+	//Hold call
+	HoldCallOne();
+	
+	User::After(1000*1000);
+	
+	//Resume call
+	ResumeCallOne();
+	
+	User::After(1000*1000);
+	
+	//Hang up call
+	HangupCallOneL();
+	
+	User::After(1000*1000);
+	
+	//Close call
+	CloseCallOne();
+	
+	return EPass;
+	}
+
+void CTestLtsyCallControlBase::OpenPhoneL()
+	{
+	INFO_PRINTF1(_L("starting opne phone"));
+	
+	if (!iLtsyModel.SharedEnv().PhoneOpened())
+		{
+		iLtsyModel.SharedEnv().OpenPhoneL(KPhoneTSY);
+		}
+	}
+
+void CTestLtsyCallControlBase::OpenLineL()
+	{
+	INFO_PRINTF1(_L("starting opne line"));	
+	
+	if (iLtsyModel.SharedEnv().PhoneOpened())
+		{
+		TInt numberLines = 0;
+		User::LeaveIfError(iLtsyModel.SharedEnv().Phone().EnumerateLines(numberLines));
+		RPhone::TLineInfo lineInfo;
+		TBool foundLine = EFalse;
+		for (TInt a = 0; a < numberLines; a++)
+			{
+			User::LeaveIfError(iLtsyModel.SharedEnv().Phone().GetLineInfo(a, lineInfo));
+			if (lineInfo.iLineCapsFlags & RLine::KCapsVoice)
+				{
+				foundLine = ETrue;
+				break;
+				}
+			}
+		if (!foundLine)
+			{
+			INFO_PRINTF1(_L("The phone has opened fail"));	
+			User::Leave(KErrNotFound);
+			}
+		
+		User::LeaveIfError(iLtsyModel.CallSharedData().VoiceLine().Open(iLtsyModel.SharedEnv().Phone(), lineInfo.iName));
+		INFO_PRINTF1(_L("The line open successful"));	
+		}
+	else
+		{
+		INFO_PRINTF1(_L("The phone has opened fail"));	
+		}
+	}
+
+void CTestLtsyCallControlBase::CloseLine()
+	{
+	iLtsyModel.CallSharedData().VoiceLine().Close();
+	}
+
+void CTestLtsyCallControlBase::OpenCustomAPIL()
+	{
+	INFO_PRINTF1(_L("starting opne custom API"));
+	
+	
+	if (iLtsyModel.SharedEnv().PhoneOpened())
+		{
+		User::LeaveIfError(iLtsyModel.CallSharedData().MmCustomAPI().Open(iLtsyModel.SharedEnv().Phone()));
+		INFO_PRINTF1(_L("The custom API open successfully"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("The phone has opened fail"));
+		}
+	}
+
+void CTestLtsyCallControlBase::CloseCustomAPI()
+	{
+	INFO_PRINTF1(_L("starting close custom API"));
+	iLtsyModel.CallSharedData().MmCustomAPI().Close();
+	}
+
+void CTestLtsyCallControlBase::CustomAPITerminateAllCallsL()
+	{
+	INFO_PRINTF1(_L("RCustomAPI start terminate all calls"));
+	
+	TBuf<128> allcall(_L("ALL_CALLS"));
+	TRequestStatus iStatus;
+	iLtsyModel.CallSharedData().MmCustomAPI().TerminateCall(iStatus, allcall);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("RCustomAPI terminate all calls result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() != KErrNone)
+		{
+		User::LeaveIfError(iStatus.Int());
+		}	
+	}
+
+void CTestLtsyCallControlBase::PhoneTerminateAllCallsL()
+	{
+	INFO_PRINTF1(_L("phone start terminate all calls"));
+	
+	TRequestStatus iStatus;
+	iLtsyModel.SharedEnv().Phone().TerminateAllCalls(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("phone terminate all calls result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() != KErrNone)
+		{
+		User::LeaveIfError(iStatus.Int());
+		}		
+	}
+
+//It must open RCustomAPI before create CTelephony
+void CTestLtsyCallControlBase::CreateThirtyPartyTelephonyL()
+	{
+	iLtsyModel.CallSharedData().ThirdPartyTelephony() = CTelephony::NewL();
+	}
+
+void CTestLtsyCallControlBase::DialCallOne()
+	{
+	INFO_PRINTF1(_L("starting dial call one"));
+	INFO_PRINTF2(_L("starting dial number %S..."), &KLtsyTelNumOne);
+	INFO_PRINTF1(_L("If ring please pick up your telephone "));
+	
+	TRequestStatus tDialStatus;
+	TRequestStatus tNotifyStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().Dial(tDialStatus, KLtsyTelNumOne);
+	User::WaitForRequest(tDialStatus);
+	
+	INFO_PRINTF3(_L("Dial number %S\t Result = %d"), &KLtsyTelNumOne, tDialStatus.Int());
+	
+	if (tDialStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number first call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number second call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number three call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}		
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		}
+	}
+
+void CTestLtsyCallControlBase::CallOneDialBadNumberL()
+	{
+	INFO_PRINTF1(_L("starting dial call one"));
+	INFO_PRINTF2(_L("starting dial bad number %S..."), &KLtsyBadNumber);
+	
+	TRequestStatus tDialStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().Dial(tDialStatus, KLtsyBadNumber);
+	User::WaitForRequest(tDialStatus);	
+	
+	User::LeaveIfError(tDialStatus.Int());
+	}
+
+void CTestLtsyCallControlBase::CallOneDialSelfNumberL()
+	{
+	INFO_PRINTF1(_L("starting dial call one"));
+	INFO_PRINTF2(_L("starting dial bad number %S..."), &KLtsySelfNumber);
+	
+	TRequestStatus tDialStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().Dial(tDialStatus, KLtsySelfNumber);
+	User::WaitForRequest(tDialStatus);	
+	
+	User::LeaveIfError(tDialStatus.Int());	
+	}
+
+void CTestLtsyCallControlBase::DialCallTwo()
+	{
+	INFO_PRINTF1(_L("starting dial call two"));
+	INFO_PRINTF2(_L("starting dial number %S..."), &KLtsyTelNumTwo);
+	
+	TRequestStatus tDialStatus;
+	TRequestStatus tNotifyStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().Dial(tDialStatus, KLtsyTelNumTwo);
+	User::WaitForRequest(tDialStatus);
+	
+	INFO_PRINTF3(_L("Dial number %S\t Result = %d"), &KLtsyTelNumTwo, tDialStatus.Int());
+	
+	if (tDialStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number first call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number second call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Dial number three call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Dial call notify call status fail"));
+			return;
+			}		
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		}
+	}
+
+void CTestLtsyCallControlBase::HangupCallOneL()
+	{
+	INFO_PRINTF1(_L("starting hang up call one"));
+	
+	TRequestStatus tHangupStatus;
+	TRequestStatus tNotifyStatus;	
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().HangUp(tHangupStatus);
+	User::WaitForRequest(tHangupStatus);
+	
+	INFO_PRINTF2(_L("Hang up call one result = %d"), tHangupStatus.Int());
+	
+	if (tHangupStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Hang up notify call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Hang up notify call status fail"));
+			User::LeaveIfError(tNotifyStatus.Int());
+			}
+		
+		RMobileCall::TMobileCallStatus tCallStatus;
+		iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Hang up notify call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Hang up notify call status fail"));
+			User::LeaveIfError(tNotifyStatus.Int());
+			}
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		User::LeaveIfError(tHangupStatus.Int());
+		}
+	}
+
+void CTestLtsyCallControlBase::HangupCallTwoL()
+	{
+	INFO_PRINTF1(_L("starting hang up call two"));
+	
+	TRequestStatus tHangupStatus;
+	TRequestStatus tNotifyStatus;	
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().HangUp(tHangupStatus);
+	User::WaitForRequest(tHangupStatus);
+	
+	INFO_PRINTF2(_L("Hang up call one result = %d"), tHangupStatus.Int());
+	
+	if (tHangupStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(tNotifyStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Hang up notify call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Hang up notify call status fail"));
+			User::LeaveIfError(tNotifyStatus.Int());
+			}
+		
+		RMobileCall::TMobileCallStatus tCallStatus;
+		iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(tNotifyStatus, tCallStatus);
+		if (tNotifyStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("Hang up notify call status = %d"), tCallStatus);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Hang up notify call status fail"));
+			User::LeaveIfError(tNotifyStatus.Int());
+			}
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		User::LeaveIfError(tHangupStatus.Int());
+		}	
+	}
+
+void CTestLtsyCallControlBase::CloseCallOne()
+	{
+	INFO_PRINTF1(_L("starting close call one"));
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().Close();
+	}
+
+void CTestLtsyCallControlBase::CloseCallTwo()
+	{
+	INFO_PRINTF1(_L("starting close call two"));
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().Close();	
+	}
+
+void CTestLtsyCallControlBase::OpenCallOneL()
+	{
+	INFO_PRINTF1(_L("starting open call one"));
+	
+	User::LeaveIfError(iLtsyModel.CallSharedData().VoiceCallOne().OpenNewCall(iLtsyModel.CallSharedData().VoiceLine()));
+	}
+
+void CTestLtsyCallControlBase::OpenCallTwoL()
+	{
+	INFO_PRINTF1(_L("starting open call two"));
+	
+	User::LeaveIfError(iLtsyModel.CallSharedData().VoiceCallTwo().OpenNewCall(iLtsyModel.CallSharedData().VoiceLine()));	
+	}
+
+void CTestLtsyCallControlBase::HoldCallOne()
+	{
+	INFO_PRINTF1(_L("starting hold call one"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	TRequestStatus iCallEvent;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	RMobileCall::TMobileCallEvent tCallEvent;
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);	
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyCallEvent(iCallEvent, tCallEvent);	
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().Hold(iStatus);
+	User::WaitForRequest(iStatus);
+	INFO_PRINTF2(_L("Hold call one result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("Hold call notify call status = %d"), tCallStatus);
+		
+		User::WaitForRequest(iCallEvent);
+		INFO_PRINTF2(_L("Hold call notify call Event = %d"), tCallEvent);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyCallEvent);
+		}
+	}
+
+void CTestLtsyCallControlBase::HoldCallTwo()
+	{
+	INFO_PRINTF1(_L("starting hold call two"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	TRequestStatus iCallEvent;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	RMobileCall::TMobileCallEvent tCallEvent;
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);	
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyCallEvent(iCallEvent, tCallEvent);	
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().Hold(iStatus);
+	User::WaitForRequest(iStatus);
+	INFO_PRINTF2(_L("Hold call two result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("Hold call notify call status = %d"), tCallStatus);
+		
+		User::WaitForRequest(iCallEvent);
+		INFO_PRINTF2(_L("Hold call notify call Event = %d"), tCallEvent);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyCallEvent);
+		}	
+	}
+	
+void CTestLtsyCallControlBase::ResumeCallOne()
+	{
+	INFO_PRINTF1(_L("starting resume call one"));
+	
+	TRequestStatus iStatus;
+	
+	TRequestStatus iCallChangeStatus;
+	RMobileCall::TMobileCallStatus tCallStatus;
+	
+	TRequestStatus iCallEvent;
+	RMobileCall::TMobileCallEvent tCallEvent;
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyCallEvent(iCallEvent, tCallEvent);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().Resume(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("Resume call one result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("Resume call one status = %d"), tCallStatus);
+		
+		User::WaitForRequest(iCallEvent);
+		INFO_PRINTF2(_L("Resume call one call event = %d"), tCallEvent);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyCallEvent);
+		}
+	}
+
+void CTestLtsyCallControlBase::ResumeCallTwo()
+	{
+	INFO_PRINTF1(_L("starting resume call two"));
+	
+	TRequestStatus iStatus;
+	
+	TRequestStatus iCallChangeStatus;
+	RMobileCall::TMobileCallStatus tCallStatus;
+	
+	TRequestStatus iCallEvent;
+	RMobileCall::TMobileCallEvent tCallEvent;
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyCallEvent(iCallEvent, tCallEvent);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().Resume(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("Resume call two result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("Resume call two status = %d"), tCallStatus);
+		
+		User::WaitForRequest(iCallEvent);
+		INFO_PRINTF2(_L("Resume call two call event = %d"), tCallEvent);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyCallEvent);
+		}	
+	}
+
+void CTestLtsyCallControlBase::SwapCallOne()
+	{
+	INFO_PRINTF1(_L("starting swap call one"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().Swap(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("call one swap result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("call one swap status = %d"), tCallStatus);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallOne().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		}
+	}
+	
+void CTestLtsyCallControlBase::NotifyCallOne()
+	{
+	INFO_PRINTF1(_L("starting notify call one"));
+	
+	TRequestStatus iCallChangeStatus;
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	User::WaitForRequest(iCallChangeStatus);
+	INFO_PRINTF3(_L("call one after swap result = %d\tstatus = %d"), iCallChangeStatus.Int(), tCallStatus);	
+	}
+
+void CTestLtsyCallControlBase::NotifyCallTwo()
+	{
+	INFO_PRINTF1(_L("starting notify call two"));
+	
+	TRequestStatus iCallChangeStatus;
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	User::WaitForRequest(iCallChangeStatus);
+	INFO_PRINTF3(_L("call two after swap result = %d\tstatus = %d"), iCallChangeStatus.Int(), tCallStatus);		
+	}
+
+void CTestLtsyCallControlBase::SwapCallTwo()
+	{
+	INFO_PRINTF1(_L("starting swap call two"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().Swap(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("call two swap result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		INFO_PRINTF2(_L("call two swap status = %d"), tCallStatus);
+		}
+	else
+		{
+		iLtsyModel.CallSharedData().VoiceCallTwo().CancelAsyncRequest(EMobileCallNotifyMobileCallStatusChange);
+		}	
+	}
+
+void CTestLtsyCallControlBase::NotifyIncomingCallOneL()
+	{
+	INFO_PRINTF1(_L("starting notify incoming call one"));
+	
+	TName name;
+	TRequestStatus iNotifyIncomingCallStatus;
+	iLtsyModel.CallSharedData().VoiceLine().NotifyIncomingCall(iNotifyIncomingCallStatus, name);
+	User::WaitForRequest(iNotifyIncomingCallStatus);
+	
+	INFO_PRINTF2(_L("Notify incoming call result = %d"), iNotifyIncomingCallStatus.Int());
+	
+	if (iNotifyIncomingCallStatus.Int() == KErrNone)
+		{
+		INFO_PRINTF3(_L("Notify incoming call %S Result = %d"), &name, iNotifyIncomingCallStatus.Int());
+		
+		INFO_PRINTF1(_L("Starting Open Call one for incoming call..."));
+		
+		TInt nRes = iLtsyModel.CallSharedData().VoiceCallOne().OpenExistingCall(iLtsyModel.CallSharedData().VoiceLine(), name);
+
+		//Get Call info
+		RMobileCall::TMobileCallInfoV1 tCallInfo;
+		RMobileCall::TMobileCallInfoV1Pckg tCallInfoPckg(tCallInfo);
+		iLtsyModel.CallSharedData().VoiceCallOne().GetMobileCallInfo(tCallInfoPckg);
+		
+		INFO_PRINTF2(_L("Remote call service(voice=1,data=3,fax=5) = %d"), tCallInfo.iService);
+
+		INFO_PRINTF2(_L("Remote call telnum = %S"), &(tCallInfo.iRemoteParty.iRemoteNumber.iTelNumber));
+		
+		}
+	else
+		{
+		User::LeaveIfError(iNotifyIncomingCallStatus.Int());
+		}
+	}
+
+void CTestLtsyCallControlBase::AnswerIncomingCallOneL()
+	{
+	INFO_PRINTF1(_L("starting answering incoming call one"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallOne().AnswerIncomingCall(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("answering call result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		if (iCallChangeStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("first answering call status = %d"), tCallStatus);
+			}
+		else
+			{
+			User::LeaveIfError(iCallChangeStatus.Int());
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+		User::WaitForRequest(iCallChangeStatus);
+		if (iCallChangeStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("second answering call status = %d"), tCallStatus);
+			}
+		else
+			{
+			User::LeaveIfError(iCallChangeStatus.Int());
+			}
+		}
+	else
+		{
+		User::LeaveIfError(iStatus.Int());
+		}
+	}
+
+void CTestLtsyCallControlBase::AnswerIncomingCallTwoL()
+	{
+	INFO_PRINTF1(_L("starting answering incoming call two"));
+	
+	TRequestStatus iStatus;
+	TRequestStatus iCallChangeStatus;
+	
+	RMobileCall::TMobileCallStatus tCallStatus;
+	iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+	
+	iLtsyModel.CallSharedData().VoiceCallTwo().AnswerIncomingCall(iStatus);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("answering call result = %d"), iStatus.Int());
+	
+	if (iStatus.Int() == KErrNone)
+		{
+		User::WaitForRequest(iCallChangeStatus);
+		if (iCallChangeStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("first answering call status = %d"), tCallStatus);
+			}
+		else
+			{
+			User::LeaveIfError(iCallChangeStatus.Int());
+			}
+		
+		iLtsyModel.CallSharedData().VoiceCallTwo().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+		User::WaitForRequest(iCallChangeStatus);
+		if (iCallChangeStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("second answering call status = %d"), tCallStatus);
+			}
+		else
+			{
+			User::LeaveIfError(iCallChangeStatus.Int());
+			}
+		
+		
+		iLtsyModel.CallSharedData().VoiceCallOne().NotifyMobileCallStatusChange(iCallChangeStatus, tCallStatus);
+		User::WaitForRequest(iCallChangeStatus);
+		if (iCallChangeStatus.Int() == KErrNone)
+			{
+			INFO_PRINTF2(_L("call one swith call status = %d"), tCallStatus);
+			}
+		else
+			{
+			User::LeaveIfError(iCallChangeStatus.Int());
+			}
+		
+		}
+	else
+		{
+		User::LeaveIfError(iStatus.Int());
+		}	
+	}
+
+void CTestLtsyCallControlBase::NotifyIncomingCallTwoL()
+	{
+	INFO_PRINTF1(_L("starting notify incoming call two"));
+	
+	TName name;
+	TRequestStatus iNotifyIncomingCallStatus;
+	iLtsyModel.CallSharedData().VoiceLine().NotifyIncomingCall(iNotifyIncomingCallStatus, name);
+	User::WaitForRequest(iNotifyIncomingCallStatus);
+	
+	INFO_PRINTF2(_L("Notify incoming call result = %d"), iNotifyIncomingCallStatus.Int());
+	
+	if (iNotifyIncomingCallStatus.Int() == KErrNone)
+		{
+		INFO_PRINTF3(_L("Notify incoming call %S Result = %d"), &name, iNotifyIncomingCallStatus.Int());
+		
+		INFO_PRINTF1(_L("Starting Open Call one for incoming call..."));
+		
+		TInt nRes = iLtsyModel.CallSharedData().VoiceCallTwo().OpenExistingCall(iLtsyModel.CallSharedData().VoiceLine(), name);
+
+		//Get Call info
+		RMobileCall::TMobileCallInfoV1 tCallInfo;
+		RMobileCall::TMobileCallInfoV1Pckg tCallInfoPckg(tCallInfo);
+		iLtsyModel.CallSharedData().VoiceCallTwo().GetMobileCallInfo(tCallInfoPckg);
+		
+		INFO_PRINTF2(_L("Remote call service(voice=1,data=3,fax=5) = %d"), tCallInfo.iService);
+
+		INFO_PRINTF2(_L("Remote call telnum = %S"), &(tCallInfo.iRemoteParty.iRemoteNumber.iTelNumber));
+		
+		}	
+	else
+		{
+		User::LeaveIfError(iNotifyIncomingCallStatus.Int());
+		}
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolcustomapiterminateallcalls.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,67 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+#include "testltsycallcontrolcustomapiterminateallcalls.h"
+
+CTestLtsyCallControlCustomAPITerminateAllCalls::CTestLtsyCallControlCustomAPITerminateAllCalls(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+CTestLtsyCallControlCustomAPITerminateAllCalls::~CTestLtsyCallControlCustomAPITerminateAllCalls()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlCustomAPITerminateAllCalls::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlCustomAPITerminateAllCalls::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,NotifyIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, CustomAPITerminateAllCallsL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when terminat all calls"),err);
+			return TestStepResult();
+			}
+		
+		//Close call
+		CloseCallOne();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialbadcall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,61 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontroldialbadcall.h"
+
+CTestLtsyCallControlDialBadCall::CTestLtsyCallControlDialBadCall(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+CTestLtsyCallControlDialBadCall::~CTestLtsyCallControlDialBadCall()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlDialBadCall::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlDialBadCall::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		//Open Call
+		TRAPD(err,OpenCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when opne call two"),err);
+			return TestStepResult();
+			}
+				
+		TRAP(err, CallOneDialBadNumber());
+		if (err == KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when dial bad telephone number"),err);
+			return TestStepResult();			
+			}
+						
+		//Close call
+		CloseCallOne();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialemergencycall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,63 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+#include "testltsycallcontroldialemergencycall.h"
+
+//const define
+_LIT16(KLtsyEmergencyNum, "58848158");
+
+
+CTestLtsyCallControlDialEmergencyCall::CTestLtsyCallControlDialEmergencyCall(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlDialEmergencyCall::~CTestLtsyCallControlDialEmergencyCall()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlDialEmergencyCall::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlDialEmergencyCall::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,iLtsyModel.CallSharedData().EmergencyCall().OpenNewCall(iLtsyModel.CallSharedData().VoiceLine()));
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when open emergency call"),err);
+			return TestStepResult();			
+			}
+		}
+	
+	TRequestStatus iStatus;
+	iLtsyModel.CallSharedData().EmergencyCall().DialEmergencyCall(iStatus, KLtsyEmergencyNum);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("Dial emergency call result = %d"),iStatus.Int());
+	
+	User::After(1000*4000);
+	
+	iLtsyModel.CallSharedData().EmergencyCall().Close();
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialemergencycallstopallcalls.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,76 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontroldialemergencycallstopallcalls.h"
+
+_LIT16(KLtsyEmergencyTelNum, "58848157");
+
+CTestLtsyCallControlDialEmergencyCallStopAllCall::CTestLtsyCallControlDialEmergencyCallStopAllCall(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlDialEmergencyCallStopAllCall::~CTestLtsyCallControlDialEmergencyCallStopAllCall()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlDialEmergencyCallStopAllCall::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlDialEmergencyCallStopAllCall::doTestStepL()"));
+	
+	TRAPD(err,OpenCallOneL());
+	if (err != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("The error was %d when opne call one"),err);
+		return TestStepResult();
+		}			
+	
+	DialCallOne();
+	
+	User::After(1000*2000);
+
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,iLtsyModel.CallSharedData().EmergencyCall().OpenNewCall(iLtsyModel.CallSharedData().VoiceLine()));
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when open emergency call"),err);
+			return TestStepResult();			
+			}
+		}	
+	
+	TRequestStatus iStatus;
+	iLtsyModel.CallSharedData().EmergencyCall().DialEmergencyCall(iStatus, KLtsyEmergencyTelNum);
+	User::WaitForRequest(iStatus);
+	
+	INFO_PRINTF2(_L("Dial emergency call result = %d"),iStatus.Int());
+	
+	User::After(1000*4000);
+	
+	iLtsyModel.CallSharedData().EmergencyCall().Close();
+	
+	CloseCallOne();
+	
+	return TestStepResult();
+	}	
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialhangupcase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,66 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontroldialhangupcase.h"
+
+CTestLtsyCallControlDialHangupCase::CTestLtsyCallControlDialHangupCase(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+CTestLtsyCallControlDialHangupCase::~CTestLtsyCallControlDialHangupCase()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlDialHangupCase::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlDialHangupCase::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		//Open Call
+		TRAPD(err,OpenCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when opne call two"),err);
+			return TestStepResult();
+			}
+		
+		DialCallTwo();
+		
+		User::After(1000*1000);
+		
+		//Hang up call
+		TRAP(err, HangupCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when hang up call two"),err);
+			return TestStepResult();
+			}
+		
+		//Close call
+		CloseCallTwo();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontroldialselfcall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,61 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontroldialselfcall.h"
+
+CTestLtsyCallControlDialSelfCall::CTestLtsyCallControlDialSelfCall(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+CTestLtsyCallControlDialSelfCall::~CTestLtsyCallControlDialSelfCall()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlDialSelfCall::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlDialSelfCall::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		//Open Call
+		TRAPD(err,OpenCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when opne call two"),err);
+			return TestStepResult();
+			}
+				
+		TRAP(err, CallOneDialSelfNumber());
+		if (err == KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when dial bad telephone number"),err);
+			return TestStepResult();			
+			}
+						
+		//Close call
+		CloseCallOne();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase1.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,62 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontrolnotifyincomingcallcase1.h"
+
+
+CTestLtsyCallControlNotifyIncomingCallCase1::CTestLtsyCallControlNotifyIncomingCallCase1(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlNotifyIncomingCallCase1::~CTestLtsyCallControlNotifyIncomingCallCase1()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlNotifyIncomingCallCase1::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlNotifyIncomingCallCase1::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,NotifyIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call"),err);
+			return TestStepResult();
+			}
+		
+		//Close call
+		CloseCallOne();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase2.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,100 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontrolnotifyincomingcallcase2.h"
+
+
+CTestLtsyCallControlNotifyIncomingCallCase2::CTestLtsyCallControlNotifyIncomingCallCase2(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlNotifyIncomingCallCase2::~CTestLtsyCallControlNotifyIncomingCallCase2()
+	{
+	
+	}
+
+
+TVerdict CTestLtsyCallControlNotifyIncomingCallCase2::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlNotifyIncomingCallCase2::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,NotifyIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		User::After(1000*1000);
+		
+		TRAP(err, NotifyIncomingCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call two"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call two"),err);
+			return TestStepResult();
+			}		
+		
+		TRAP(err ,HangupCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when hang up call one"),err);
+			return TestStepResult();
+			}	
+		
+		TRAP(err ,HangupCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when hang up call two"),err);
+			return TestStepResult();
+			}			
+		
+		//Close call one
+		CloseCallOne();
+		
+		//Close call two
+		CloseCallTwo();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolnotifyincomingcallcase3.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontrolnotifyincomingcallcase3.h"
+
+
+CTestLtsyCallControlNotifyIncomingCallCase3::CTestLtsyCallControlNotifyIncomingCallCase3(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlNotifyIncomingCallCase3::~CTestLtsyCallControlNotifyIncomingCallCase3()
+	{
+	
+	}
+
+
+TVerdict CTestLtsyCallControlNotifyIncomingCallCase3::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlNotifyIncomingCallCase3::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,NotifyIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call one"),err);
+			return TestStepResult();
+			}
+		
+		User::After(1000*1000);
+		
+		HoldCallOne();
+		
+		ResumeCallOne();
+		
+		TRAP(err, HangupCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when Hang up call one"),err);
+			return TestStepResult();
+			}		
+		
+		//Close call one
+		CloseCallOne();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolphoneterminateallcalls.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,71 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontrolphoneterminateallcalls.h"
+
+CTestLtsyCallControlPhoneTerminateAllCalls::CTestLtsyCallControlPhoneTerminateAllCalls(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlPhoneTerminateAllCalls::~CTestLtsyCallControlPhoneTerminateAllCalls()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlPhoneTerminateAllCalls::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlPhoneTerminateAllCalls::doTestStepL()"));
+	
+	TRAPD(err,OpenCallOneL());
+	if (err != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("The error was %d when opne call one"),err);
+		return TestStepResult();
+		}			
+	
+	DialCallOne();
+
+	TRAP(err,OpenCallTwoL());
+	if (err != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("The error was %d when opne call two"),err);
+		return TestStepResult();
+		}		
+	
+	DialCallTwo();
+
+	TRAP(err, PhoneTerminateAllCallsL());
+	if (err != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF2(_L("The error was %d when phone terminate all calls"),err);
+		return TestStepResult();			
+		}	
+	
+	CloseCallOne();
+	
+	CloseCallTwo();
+	
+	return TestStepResult();
+	}	
+	
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallcontrolswapcalls.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,109 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsycallcontrolswapcalls.h"
+
+CTestLtsyCallControlSwapCalls::CTestLtsyCallControlSwapCalls(CTestLtsyModel& aModel)
+	: CTestLtsyCallControlBase(aModel)
+	{
+	
+	}
+
+
+CTestLtsyCallControlSwapCalls::~CTestLtsyCallControlSwapCalls()
+	{
+	
+	}
+
+TVerdict CTestLtsyCallControlSwapCalls::doTestStepL()
+	{
+	INFO_PRINTF1(_L("starting CTestLtsyCallControlSwapCalls::doTestStepL()"));
+	
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,NotifyIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call"),err);
+			return TestStepResult();
+			}
+		
+		TRAP(err, AnswerIncomingCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call"),err);
+			return TestStepResult();
+			}
+		
+		User::After(1000*1000);
+		
+		TRAP(err,NotifyIncomingCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when notify incoming call"),err);
+			return TestStepResult();
+			}		
+
+		TRAP(err, AnswerIncomingCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when answer incoming call"),err);
+			return TestStepResult();
+			}		
+		
+		SwapCallOne();
+		
+		NotifyCallTwo();
+		
+		SwapCallTwo();
+		
+		NotifyCallOne();
+		
+		TRAP(err, HangupCallOneL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when hang up call  one"),err);
+			return TestStepResult();			
+			}
+		
+		
+		TRAP(err, HangupCallTwoL());
+		if (err != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF2(_L("The error was %d when hang up call  two"),err);
+			return TestStepResult();			
+			}
+		
+		//Close call
+		CloseCallOne();
+		
+		//Close call
+		CloseCallTwo();
+		}
+	
+	return TestStepResult();
+	}
+
+//End of file
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsycallshareddata.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,81 @@
+// TestTelephonyCallSharedData.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyCallSharedData
+
+// CTSY include
+
+// user include
+#include "testltsycallshareddata.h"
+
+
+CTestLtsyCallSharedData* CTestLtsyCallSharedData::NewL()
+	{
+	CTestLtsyCallSharedData* self = new (ELeave) CTestLtsyCallSharedData;
+	CleanupStack::PushL(self);
+	
+	self->ConstructL();
+	
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestLtsyCallSharedData::~CTestLtsyCallSharedData()
+	{
+	iVoiceLine.Close();
+	
+	iVoiceCallOne.Close();
+	
+	iVoiceCallTwo.Close();
+	
+	iEmergencyCall.Close();
+	
+	iMmCustomAPI.Close();
+	
+	delete iThirdPartyTel;
+	iThirdPartyTel = NULL;
+	}
+
+
+CTestLtsyCallSharedData::CTestLtsyCallSharedData()
+	{
+	
+	}
+
+
+void CTestLtsyCallSharedData::ConstructL()
+	{
+	
+	}
+
+RLine& CTestLtsyCallSharedData::VoiceLine()
+	{
+	return iVoiceLine;
+	}
+
+RMobileCall& CTestLtsyCallSharedData::VoiceCallOne()
+	{
+	return iVoiceCallOne;
+	}
+
+RMobileCall& CTestLtsyCallSharedData::VoiceCallTwo()
+	{
+	return iVoiceCallTwo;
+	}
+
+RMobileCall& CTestLtsyCallSharedData::EmergencyCall()
+	{
+	return iEmergencyCall;
+	}
+
+RMmCustomAPI& CTestLtsyCallSharedData::MmCustomAPI()
+	{
+	return iMmCustomAPI;
+	}
+
+CTelephony*& CTestLtsyCallSharedData::ThirdPartyTelephony()
+	{
+	return iThirdPartyTel;
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosephone.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+//  TestTelephonyClosePhone.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyClosePhone
+
+// user include
+#include "TestLtsyClosePhone.h"
+
+// member functions
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyClosePhone::CTestLtsyClosePhone( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyClosePhone::~CTestLtsyClosePhone()
+	{
+	
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will close the shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyClosePhone::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TestClosePhone();
+		}
+
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosesms.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,73 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyclosesms.h"
+
+CTestLtsyCloseSms::CTestLtsyCloseSms(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyCloseSms::~CTestLtsyCloseSms()
+	{
+	}
+
+CTestLtsyCloseSms* CTestLtsyCloseSms::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyCloseSms* self = new (ELeave)CTestLtsyCloseSms(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyCloseSms* CTestLtsyCloseSms::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyCloseSms* self=CTestLtsyCloseSms::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyCloseSms::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyCloseSms::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSms::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyCloseSms::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSms::doTestStepL called"));
+	TRAPD(err,CloseSmsL(););
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when close sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyCloseSms::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSms::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyclosesmsstore.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,73 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyclosesmsstore.h"
+
+CTestLtsyCloseSmsStore::CTestLtsyCloseSmsStore(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyCloseSmsStore::~CTestLtsyCloseSmsStore()
+	{
+	}
+
+CTestLtsyCloseSmsStore* CTestLtsyCloseSmsStore::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyCloseSmsStore* self = new (ELeave)CTestLtsyCloseSmsStore(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyCloseSmsStore* CTestLtsyCloseSmsStore::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyCloseSmsStore* self=CTestLtsyCloseSmsStore::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyCloseSmsStore::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyCloseSmsStore::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSmsStore::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyCloseSmsStore::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSmsStore::doTestStepL called"));
+	TRAPD(err,CloseSmsStoreL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when close sms store"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyCloseSmsStore::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyCloseSmsStore::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsygetmessagestoreinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,89 @@
+//
+// testltsygetmessagestoreinfo.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#include "testltsygetmessagestoreinfo.h"
+
+CTestLtsyGetMessageStoreInfo::CTestLtsyGetMessageStoreInfo(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyGetMessageStoreInfo::~CTestLtsyGetMessageStoreInfo()
+	{
+	}
+
+CTestLtsyGetMessageStoreInfo* CTestLtsyGetMessageStoreInfo::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyGetMessageStoreInfo* self = new (ELeave)CTestLtsyGetMessageStoreInfo(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyGetMessageStoreInfo* CTestLtsyGetMessageStoreInfo::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyGetMessageStoreInfo* self=CTestLtsyGetMessageStoreInfo::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyGetMessageStoreInfo::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyGetMessageStoreInfo::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyGetMessageStoreInfo::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyGetMessageStoreInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyGetMessageStoreInfo::doTestStepL called"));
+	TRAPD(err,GetMessageStoreInfoL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when get message store info"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyGetMessageStoreInfo::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyGetMessageStoreInfo::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyGetMessageStoreInfo::GetMessageStoreInfoL()
+	{
+	TInt  smsIndex(0);             //smsIndex always is zero
+	TRequestStatus status;
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg smsInfoPckg(iInfo);
+	Sms().GetMessageStoreInfo(status,smsIndex,smsInfoPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("GetMessageStoreInfo() request status = %d"),r);
+	CheckMessageStoreInfoL();
+	INFO_PRINTF4(_L("GetMessageStoreInfo MobileTypeName = %S, TotalEntries=%d,UsedEntries=%d\n"),&iInfo.iName,iInfo.iTotalEntries,iInfo.iUsedEntries );
+	}
+
+void CTestLtsyGetMessageStoreInfo::CheckMessageStoreInfoL()
+	{
+	TBool matched = ETrue;
+	if (!iInfo.iName.Compare(KETelIccSmsStore) == 0)
+		{
+		INFO_PRINTF2(_L("The tel sms store name %s could not match with expect one"),&(iInfo.iName));
+		matched = EFalse;
+		}
+	if(!matched)
+		{
+		SetTestStepResult(EFail);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonebatterycap.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,59 @@
+// TestLtsyGetPhoneBatteryCap.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyGetPhoneBatteryCap
+
+//system include
+#include <etelmm.h>
+#include <e32std.h>
+
+//user include
+
+#include "TestLtsyGetPhoneBatteryCap.h"
+
+
+/** Supported battery information capabilities. The supported 
+* capabilities are returned to the client when it requests them by calling
+* CMmPhoneTsy::GetBatteryCaps() 
+*/
+/**
+ * Constructor
+ * 
+ */
+CTestLtsyGetPhoneBatteryCap::CTestLtsyGetPhoneBatteryCap(CTestLtsyModel& aModel) 
+    : CTestLtsyPhoneStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyGetPhoneBatteryCap::~CTestLtsyGetPhoneBatteryCap()
+	{
+	}
+
+/**
+ * Invoked by the test execute framework for exercising functionality under test
+ * @return	EPass: The test passed succesfully;
+ EFail: The test failed;
+ EInconclusive: The result of the test was inconclusive;
+ ETestSuiteError: Error in the test suite;
+ EAbort: The test was aborted;
+ EIgnore: The test was unexecuted
+ */
+TVerdict CTestLtsyGetPhoneBatteryCap::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyGetPhoneInfo::doTestStepL Begin"));
+	if (TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetBatteryCaps());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonebatteryinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,103 @@
+// TestTelephonyGetPhoneTime.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyGetPhoneTime
+
+//system include
+#include <etelmm.h>
+#include <e32std.h>
+
+//user include
+
+#include "TestLtsyGetPhoneBatteryInfo.h"
+
+
+/** Supported battery information capabilities. The supported 
+* capabilities are returned to the client when it requests them by calling
+* CMmPhoneTsy::GetBatteryCaps() 
+*/
+/**
+ * Constructor
+ * 
+ */
+CTestLtsyGetPhoneBatteryInfo::CTestLtsyGetPhoneBatteryInfo(CTestLtsyModel& aModel) 
+    : CTestLtsyPhoneStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyGetPhoneBatteryInfo::~CTestLtsyGetPhoneBatteryInfo()
+	{
+	}
+
+/**
+ * Invoked by the test execute framework for exercising functionality under test
+ * @return	EPass: The test passed succesfully;
+ EFail: The test failed;
+ EInconclusive: The result of the test was inconclusive;
+ ETestSuiteError: Error in the test suite;
+ EAbort: The test was aborted;
+ EIgnore: The test was unexecuted
+ */
+TVerdict CTestLtsyGetPhoneBatteryInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyGetPhoneInfo::doTestStepL Begin"));
+	if (TestStepResult() == EPass)
+		{
+		GetBatteryCaps();
+		TRequestStatus reqStatus;
+		SharedPhone().GetBatteryInfo(reqStatus, iBatteryInfo);
+		User::WaitForRequest(reqStatus);
+		if (reqStatus==KErrNone)
+			{
+			INFO_PRINTF2(_L("Battery status : %d\n"), iBatteryInfo.iStatus);
+			INFO_PRINTF2(_L("Battery charge level : %d\n"), iBatteryInfo.iChargeLevel);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Battery charge, Error %d returned.\n"), reqStatus.Int());
+			}
+		}
+	return TestStepResult();
+	}
+
+/**
+ * 
+ * Get battery caps
+ * 
+ */
+void CTestLtsyGetPhoneBatteryInfo::GetBatteryCaps()
+	{
+	TUint32 caps;
+	TInt res = SharedPhone().GetBatteryCaps(caps);
+	if (res != KErrNone)
+		{
+		ERR_PRINTF1(_L("Failed to Check return value."));
+		}
+	}
+
+/**
+ * 
+ * Notify battery info change or not
+ * 
+ */
+void CTestLtsyGetPhoneBatteryInfo::NotifyBatteryInfoChangeL()
+	{
+	TRequestStatus status;
+	RMobilePhone::TMobilePhoneBatteryInfoV1 batInfo;
+	TUint twentyCharge = 20;
+	SharedPhone().NotifyBatteryInfoChange(status, batInfo);
+
+	User::WaitForRequest(status);
+	if(batInfo.iStatus != RMobilePhone::EBatteryConnectedButExternallyPowered)
+		{
+		INFO_PRINTF1(_L("Failed to Check Phone battery status."));
+		}
+	if(batInfo.iChargeLevel != twentyCharge)
+		{
+		INFO_PRINTF1(_L("Failed to Check Phone battery charge level."));
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonesignalcap.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,54 @@
+// TestLtsyGetPhoneSignalCap.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyGetPhoneSignalCap
+
+//system include
+#include <etelmm.h>
+
+//user include
+
+#include "TestLtsyGetPhoneSignalCap.h"
+
+/**
+ * Constructor
+ * 
+ */
+CTestLtsyGetPhoneSignalCap::CTestLtsyGetPhoneSignalCap(CTestLtsyModel& aModel)
+    :CTestLtsyPhoneStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyGetPhoneSignalCap::~CTestLtsyGetPhoneSignalCap()
+	{
+	}
+
+/**
+ * Invoked by the test execute framework for exercising functionality under test
+ * @return	EPass: The test passed succesfully;
+		    EFail: The test failed;
+		    EInconclusive: The result of the test was inconclusive;
+		    ETestSuiteError: Error in the test suite;
+		    EAbort: The test was aborted;
+		    EIgnore: The test was unexecuted
+ */	
+
+TVerdict CTestLtsyGetPhoneSignalCap::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestTelePhonyGetPhoneInfo::doTestStepL Begin"));
+	if (TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetSignalCaps());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsygetphonesignalstrength.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,103 @@
+// TestTelephonyGetPhonesingalStrength.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyGetPhonesingalStrength
+
+//system include
+#include <etelmm.h>
+
+//user include
+
+#include "TestLtsyGetPhoneSignalStrength.h"
+
+/**
+ * Constructor
+ * 
+ */
+CTestLtsyGetPhoneSignalStrength::CTestLtsyGetPhoneSignalStrength(CTestLtsyModel& aModel)
+    :CTestLtsyPhoneStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyGetPhoneSignalStrength::~CTestLtsyGetPhoneSignalStrength()
+	{
+	}
+
+/**
+ * Invoked by the test execute framework for exercising functionality under test
+ * @return	EPass: The test passed succesfully;
+		    EFail: The test failed;
+		    EInconclusive: The result of the test was inconclusive;
+		    ETestSuiteError: Error in the test suite;
+		    EAbort: The test was aborted;
+		    EIgnore: The test was unexecuted
+ */	
+
+TVerdict CTestLtsyGetPhoneSignalStrength::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestTelePhonyGetPhoneInfo::doTestStepL Begin"));
+	if (TestStepResult() == EPass)
+		{
+		
+		GetSignalCaps();
+		TRequestStatus reqStatus;
+		SharedPhone().GetSignalStrength(reqStatus, iSignalStrength, iBar);
+		User::WaitForRequest(reqStatus);
+		if (reqStatus==KErrNone)
+			{
+			INFO_PRINTF2(_L("Signal strength (in dBm) : %d\n"), iSignalStrength);
+			INFO_PRINTF2(_L("Signal strength (in display bars) : %d\n"), iBar);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Signal strength, Error %d returned.\n"), reqStatus.Int());
+			}
+	
+		}
+	return TestStepResult();
+	}
+
+/**
+ * Get signal caps
+ * 
+ */
+void CTestLtsyGetPhoneSignalStrength::GetSignalCaps()
+	{
+	TUint32 caps;
+	TInt res = SharedPhone().GetSignalCaps(caps);
+	if (res != KErrNone)
+		{
+		ERR_PRINTF2(_L("The result is not expect %d"),&res);
+		SetTestStepResult(EFail);
+		}
+	}
+
+/**
+ * Notify signal strength change
+ * 
+ */
+void CTestLtsyGetPhoneSignalStrength::NotifySignalStrengthChangeL()
+	{
+	TRequestStatus reqStatus;
+	TInt32 signalStrength(0);
+	TInt8 bar(0);
+	TInt32 completeSignalStrength(70);
+	TInt8 completeBar(3);
+	SharedPhone().NotifySignalStrengthChange(reqStatus, signalStrength, bar);
+	User::WaitForRequest(reqStatus);
+	if(bar != completeBar)
+		{
+		ERR_PRINTF1(_L("bar is not expect."));
+		SetTestStepResult(EFail);
+		}
+	if(signalStrength != completeSignalStrength)
+		{
+		ERR_PRINTF1(_L("signalStrength is not expect."));
+		SetTestStepResult(EFail);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsymodel.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,276 @@
+//  TestTelephonyModel.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyModel
+
+// CTSY include
+#include <bautils.h>
+
+#include "TestLtsyModel.h"
+#include "testltsycallshareddata.h"
+#include "TestLtsyPktSharedData.h"
+#include "TestLtsySmsSharedData.h"
+#include "TestLtsyPhoneStoreSharedData.h"
+
+// the file used to identify if we run on real environment
+//_LIT(KCTsyRealEnvFilePath,    "z:\\systemtest\\testdata\\telephony\\ctsyrealenv.txt");
+//_LIT(KMmTsyModuleName, "PhoneTsy");
+
+/**
+ * Factory function
+ * 
+ */
+CTestLtsyModel* CTestLtsyModel::NewL()
+	{
+	CTestLtsyModel* self = new (ELeave) CTestLtsyModel();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyModel::~CTestLtsyModel()
+	{
+	delete iSharedPhoneEnv;
+	delete iCallSharedData;
+	delete iPktSharedData;
+	delete iSmsSharedData;
+	delete iPhoneStoreSharedData;
+	}
+
+/**
+ * 2nd Constructor 
+ * 
+ */
+void CTestLtsyModel::ConstructL()
+	{
+	iSharedPhoneEnv = CTestLtsySharedEnv::NewL();
+	iCallSharedData = CTestLtsyCallSharedData::NewL();
+	iPktSharedData 	= CTestLtsyPktSharedData::NewL();
+	iSmsSharedData = CTestLtsySmsSharedData::NewL();
+	iPhoneStoreSharedData = CTestLtsyPhoneStoreSharedData::NewL();
+	}
+	
+//=============================================================================
+// class CTestTelephonyAdaptorEnv
+//=============================================================================	
+/**
+ * Constructor
+ * 
+ */
+CTestLtsySharedEnv::CTestLtsySharedEnv()
+    {
+    // reset iPhoneInitialized
+    iPhoneInitialized = EFalse;
+    iPhoneIndex = -1;
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsySharedEnv::~CTestLtsySharedEnv()
+    {     
+    ClosePhone();
+    DestroyTelephony();
+    }
+
+/**
+ * Factory function
+ * 
+ */
+CTestLtsySharedEnv* CTestLtsySharedEnv::NewL()
+    {
+    CTestLtsySharedEnv* self = new (ELeave) CTestLtsySharedEnv();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+ * 2nd constructor
+ */
+void CTestLtsySharedEnv::ConstructL()
+    {
+    }
+	
+/**
+ * Load phone module
+ * 
+ * @param const TDesC& aModuleName The phone module used by ETel server for loading a specific TSY
+ */
+void CTestLtsySharedEnv::LoadModuleL(const TDesC& aModuleName)
+    {	
+
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	CleanupStack::PopAndDestroy(&fs);
+    
+	TInt ret = iSharedTelServer.LoadPhoneModule(aModuleName);
+
+	if (ret != KErrNone)
+		{
+		iSharedTelServer.Close();
+		User::Leave(ret);
+		}
+    }
+
+/**
+ * Open the shared phone
+ * 
+ * @param const TDesC& aModuleName The phone module used by ETel server for loading a specific TSY
+ */
+void CTestLtsySharedEnv::OpenPhoneL(const TDesC& aModuleName)
+    {
+    THandleInfo handleInfo;
+    iSharedTelServer.HandleInfo(&handleInfo);
+	if(iPhoneInitialized)
+	    {
+	    // a panic occurs if handleInfo.iNumThreads <= 0
+	    if(handleInfo.iNumThreads <= 0)
+	    	{
+	    	iSharedPhone = NULL;
+	        iPhoneInitialized = EFalse;
+	        iSharedTelServer.Close();
+	    	}
+		else
+		    {
+			// return if phone has already been opened before
+			return;
+			}
+	    }
+	
+	// make sure this pointer was NULL
+	ASSERT(iSharedPhone == NULL);
+	
+	// make a copy of module name
+	iModuleName.Copy(aModuleName);
+	
+	// start connect to ETel server
+	User::LeaveIfError(iSharedTelServer.Connect());
+	User::LeaveIfError(iSharedTelServer.ShareAuto());	
+
+	// start load module	
+	LoadModuleL(aModuleName);
+	
+	// check if we can find corresponding phone object according to passed TSY module name
+	if(!FindPhoneIndex())
+		{
+		// the phone index could not be found
+        User::Leave(KErrNotFound);		
+ 		}
+		
+	// create a new RMobilePhone instance
+	iSharedPhone = new (ELeave) RMobilePhone();
+	RTelServer::TPhoneInfo phoneInfo;
+	User::LeaveIfError(iSharedTelServer.GetPhoneInfo(iPhoneIndex,phoneInfo));
+	
+	// start openning phone
+	TInt ret = iSharedPhone->Open(iSharedTelServer,phoneInfo.iName);
+	if(ret != KErrNone)
+	    {
+		User::Leave(ret);
+		}
+	
+	iPhoneInitialized = ETrue;
+	}
+
+/**
+ * Find the phone index according to TSY name
+ * 
+ */
+TBool CTestLtsySharedEnv::FindPhoneIndex()
+	{
+	TInt phoneNum = 0;
+	TInt err = iSharedTelServer.EnumeratePhones(phoneNum);
+	if(err != KErrNone)
+		{
+		return EFalse;
+		}
+	
+	TBool found = EFalse;
+	for(TInt i = 0; i < phoneNum; i++)
+		{
+		RTelServer::TPhoneInfo phoneInfo;
+		TBuf<KModuleNameLen> moduleName;
+		err = iSharedTelServer.GetTsyName(i,moduleName);
+		if(err != KErrNone)
+			{
+			return EFalse;
+			}
+		else
+			{
+			if(moduleName.CompareF(iModuleName) == 0)
+				{
+				iPhoneIndex = i;
+				found = ETrue;
+				break;
+				}
+			}
+		}
+	
+	return found;
+	}
+
+/**
+ * Close the shared phone and server
+ * Client must call this function, if it has called OpenPhoneL().
+ * 
+ */
+void CTestLtsySharedEnv::ClosePhone()
+	{
+	// close and delete the shared phone
+	iSharedPhone->Close();
+	delete iSharedPhone;
+	iSharedPhone = NULL;
+	
+	// unload the phone module
+	iSharedTelServer.UnloadPhoneModule(iModuleName);
+	iSharedTelServer.Close();
+	
+	// reset iPhoneInitialized
+	iPhoneInitialized = EFalse;
+	}
+
+/**
+ * Create a CTelephony object and related resource. 
+ * 
+ */
+void CTestLtsySharedEnv::CreateTelephonyL()
+	{
+	iActiveSchaduler = new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iActiveSchaduler);
+	
+	iTelephony = CTelephony::NewL();
+	}
+
+/**
+ * Delete CTelephony object related source.
+ * 
+ */
+void CTestLtsySharedEnv::DestroyTelephony()
+	{
+	
+	delete iActiveSchaduler;
+	iActiveSchaduler = NULL;
+	delete iTelephony;
+	iTelephony       = NULL;
+
+	delete iSharedPhone;
+	iSharedPhone = NULL;
+	
+	// reset iPhoneInitialized
+	iPhoneInitialized = EFalse;
+	}
+
+CTelephony* CTestLtsySharedEnv::Telephony()
+	{
+	return iTelephony;
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyopenphone.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,53 @@
+//  TestTelephonyOpenPhone.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestTelephonyOpenPhone
+
+// user include
+#include "TestLtsyOpenPhone.h"
+#include "TestLtsyCallSharedData.h"
+#include "TestLtsySmsSharedData.h"
+#include "TestLtsyPktSharedData.h"
+#include "TestLtsyPhoneStoreSharedData.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyOpenPhone::CTestLtsyOpenPhone( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyOpenPhone::~CTestLtsyOpenPhone()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyOpenPhone::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,TestOpenPhoneL());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyopensms.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,73 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyopensms.h"
+
+CTestLtsyOpenSms::CTestLtsyOpenSms(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyOpenSms::~CTestLtsyOpenSms()
+	{
+	}
+
+CTestLtsyOpenSms* CTestLtsyOpenSms::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyOpenSms* self = new (ELeave)CTestLtsyOpenSms(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyOpenSms* CTestLtsyOpenSms::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyOpenSms* self=CTestLtsyOpenSms::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyOpenSms::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyOpenSms::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSms::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyOpenSms::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSms::doTestStepL called"));
+	TRAPD(err,OpenSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when open sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyOpenSms::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSms::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyopensmsstore.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,73 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyopensmsstore.h"
+
+CTestLtsyOpenSmsStore::CTestLtsyOpenSmsStore(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyOpenSmsStore::~CTestLtsyOpenSmsStore()
+	{
+	}
+
+CTestLtsyOpenSmsStore* CTestLtsyOpenSmsStore::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyOpenSmsStore* self = new (ELeave)CTestLtsyOpenSmsStore(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyOpenSmsStore* CTestLtsyOpenSmsStore::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyOpenSmsStore* self=CTestLtsyOpenSmsStore::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyOpenSmsStore::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyOpenSmsStore::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSmsStore::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyOpenSmsStore::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSmsStore::doTestStepL called"));
+	TRAPD(err,OpenSmsStoreL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when open sms store"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyOpenSmsStore::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyOpenSmsStore::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkclose.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,80 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyphbkclose.h"
+
+CTestLtsyPhbkClose::CTestLtsyPhbkClose(CTestLtsyModel& aTestModel)
+    : CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkClose::~CTestLtsyPhbkClose()
+	{
+	}
+
+CTestLtsyPhbkClose* CTestLtsyPhbkClose::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkClose* self = new (ELeave)CTestLtsyPhbkClose(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkClose* CTestLtsyPhbkClose::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkClose* self=CTestLtsyPhbkClose::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkClose::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkClose::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkClose::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkClose::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkClose::doTestStepL called"));
+	TRAPD(err,ClosePhonebookL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when close phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkClose::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkClose::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkClose::ClosePhonebookL()
+	{
+	PhoneBookStore().Close();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkdelete.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,85 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyphbkdelete.h"
+
+CTestLtsyPhbkDelete::CTestLtsyPhbkDelete(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkDelete::~CTestLtsyPhbkDelete()
+	{
+	}
+
+CTestLtsyPhbkDelete* CTestLtsyPhbkDelete::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkDelete* self = new (ELeave)CTestLtsyPhbkDelete(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkDelete* CTestLtsyPhbkDelete::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkDelete* self=CTestLtsyPhbkDelete::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkDelete::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkDelete::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDelete::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkDelete::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDelete::doTestStepL called"));
+	TInt index = 10;
+	TRAPD(err,DeletePhonebookL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkDelete::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDelete::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkDelete::DeletePhonebookL(TInt aIndex)
+	{
+	TRequestStatus status;
+	PhoneBookStore().Delete(status,aIndex);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkdeleteinvalidindex.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,102 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyphbkdeleteinvalidindex.h"
+
+CTestLtsyPhbkDeleteInvalidIndex::CTestLtsyPhbkDeleteInvalidIndex(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkDeleteInvalidIndex::~CTestLtsyPhbkDeleteInvalidIndex()
+	{
+	}
+
+CTestLtsyPhbkDeleteInvalidIndex* CTestLtsyPhbkDeleteInvalidIndex::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkDeleteInvalidIndex* self = new (ELeave)CTestLtsyPhbkDeleteInvalidIndex(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkDeleteInvalidIndex* CTestLtsyPhbkDeleteInvalidIndex::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkDeleteInvalidIndex* self=CTestLtsyPhbkDeleteInvalidIndex::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkDeleteInvalidIndex::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkDeleteInvalidIndex::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDeleteInvalidIndex::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkDeleteInvalidIndex::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDeleteInvalidIndex::doTestStepL called"));
+	TInt index = 251;
+	TRAPD(err,DeletePhonebookL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = 0;
+	TRAPD(err1,DeletePhonebookL(index));
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete phonebook"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = -5;
+	TRAPD(err2,DeletePhonebookL(index));
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete phonebook"),err2);
+	    SetTestStepResult(EFail);
+		}
+		
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkDeleteInvalidIndex::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkDeleteInvalidIndex::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkDeleteInvalidIndex::DeletePhonebookL(TInt aIndex)
+	{
+	TRequestStatus status;
+	PhoneBookStore().Delete(status,aIndex);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkgetstoreinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,88 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyphbkgetstoreinfo.h"
+
+CTestLtsyPhbkGetStoreInfo::CTestLtsyPhbkGetStoreInfo(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkGetStoreInfo::~CTestLtsyPhbkGetStoreInfo()
+	{
+	}
+
+CTestLtsyPhbkGetStoreInfo* CTestLtsyPhbkGetStoreInfo::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkGetStoreInfo* self = new (ELeave)CTestLtsyPhbkGetStoreInfo(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkGetStoreInfo* CTestLtsyPhbkGetStoreInfo::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkGetStoreInfo* self=CTestLtsyPhbkGetStoreInfo::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkGetStoreInfo::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkGetStoreInfo::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkGetStoreInfo::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkGetStoreInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkGetStoreInfo::doTestStepL called"));
+	TRAPD(err,GetStoreInfoL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when get phonebook store info"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkGetStoreInfo::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkGetStoreInfo::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkGetStoreInfo::GetStoreInfoL()
+	{
+	TRequestStatus status;
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
+	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
+	iModel.SharedEnv().Phone().GetPhoneStoreInfo(status, phoneStoreInfoPckg, KETelIccSmsStore);
+//	iModel.SharedEnv().Phone().GetPhoneStoreInfo(status, phoneStoreInfoPckg, KETelIccFdnPhoneBook);
+//	iiModel.SharedEnv().Phone().GetPhoneStoreInfo(status, phoneStoreInfoPckg, KETelIccAdnPhoneBook);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("GetPhoneStoreInfo() request status = %d"),r);
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkopen.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,81 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsyphbkopen.h"
+
+CTestLtsyPhbkOpen::CTestLtsyPhbkOpen(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkOpen::~CTestLtsyPhbkOpen()
+	{
+	}
+
+CTestLtsyPhbkOpen* CTestLtsyPhbkOpen::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkOpen* self = new (ELeave)CTestLtsyPhbkOpen(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkOpen* CTestLtsyPhbkOpen::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkOpen* self=CTestLtsyPhbkOpen::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkOpen::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkOpen::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkOpen::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkOpen::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkOpen::doTestStepL called"));
+	TRAPD(err,OpenPhonebookL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when open phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkOpen::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkOpen::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkOpen::OpenPhonebookL()
+	{
+	PhoneBookStore().Open(iModel.SharedEnv().Phone(),  KETelIccAdnPhoneBook);
+//	PhoneBookStore().Open(iModel.SharedEnv().Phone(),  KETelIccFdnPhoneBook);
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkread.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,133 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//system include 
+#include <mpbutil.h> 
+//user include
+#include "testltsyphbkread.h"
+//const defination
+_LIT(KExpectedText, "TelNo 010");
+_LIT(KExpectedNumber,"+123456010");
+const TUint KExpectedIndex = 10;
+
+CTestLtsyPhbkRead::CTestLtsyPhbkRead(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkRead::~CTestLtsyPhbkRead()
+	{
+	}
+
+CTestLtsyPhbkRead* CTestLtsyPhbkRead::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkRead* self = new (ELeave)CTestLtsyPhbkRead(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkRead* CTestLtsyPhbkRead::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkRead* self=CTestLtsyPhbkRead::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkRead::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkRead::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkRead::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkRead::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkRead::doTestStepL called"));
+	TInt index = 10;
+	TRAPD(err,ReadEntryL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when read phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkRead::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkRead::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkRead::ReadEntryL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TBuf8<800> outputPbData;
+	TUint16 index(0);
+	TUint8 tonNpi;
+	TPtrC16 number(NULL,0);
+	TPtrC16 text(NULL,0);
+	TUint8 tagValue(0);
+	CPhoneBookBuffer::TPhBkTagType dataType;
+	
+	CPhoneBookBuffer* pbBuffer=new(ELeave) CPhoneBookBuffer(); // used to read phonebook data
+	CleanupStack::PushL(pbBuffer);
+	PhoneBookStore().Read(status,aIndex,1,outputPbData);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	// Set pbBuffer to point to received phonebook data
+	pbBuffer->Set(&outputPbData); 
+	// Start reading received phonebook data
+	pbBuffer->StartRead();       
+	while (pbBuffer->GetTagAndType(tagValue,dataType)==KErrNone)
+		{
+		switch (tagValue)
+			{
+		case RMobilePhoneBookStore::ETagPBAdnIndex:
+			pbBuffer->GetValue(index);			
+			break;
+		case RMobilePhoneBookStore::ETagPBTonNpi:
+			pbBuffer->GetValue(tonNpi);			
+			break;
+		case RMobilePhoneBookStore::ETagPBText:
+			pbBuffer->GetValue(text);			
+			break;
+		case RMobilePhoneBookStore::ETagPBNumber:
+			pbBuffer->GetValue(number);			
+			break;
+		default:
+			// An unsupported field type - just skip this value
+			pbBuffer->SkipValue(dataType);
+			break;
+			}
+		}
+	if((index != KExpectedIndex)||(text.MatchF(KExpectedText)==KErrNotFound)||
+			                      (number.MatchF(KExpectedNumber)==KErrNotFound))
+		{
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy();             
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkreadinvalidindex.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,107 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//system include 
+#include <mpbutil.h> 
+//user include
+#include "testltsyphbkreadinvalidindex.h"
+
+
+
+CTestLtsyPhbkReadInvalidIndex::CTestLtsyPhbkReadInvalidIndex(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkReadInvalidIndex::~CTestLtsyPhbkReadInvalidIndex()
+	{
+	}
+
+CTestLtsyPhbkReadInvalidIndex* CTestLtsyPhbkReadInvalidIndex::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkReadInvalidIndex* self = new (ELeave)CTestLtsyPhbkReadInvalidIndex(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkReadInvalidIndex* CTestLtsyPhbkReadInvalidIndex::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkReadInvalidIndex* self=CTestLtsyPhbkReadInvalidIndex::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkReadInvalidIndex::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkReadInvalidIndex::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkReadInvalidIndex::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkReadInvalidIndex::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkReadInvalidIndex::doTestStepL called"));
+	TInt index = 0;
+	TRAPD(err,ReadEntryL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when read phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = -2;
+	TRAPD(err1,ReadEntryL(index));
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when read phonebook"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+    index = 600;
+	TRAPD(err2,ReadEntryL(index));
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when read phonebook"),err2);
+	    SetTestStepResult(EFail);
+		}
+	
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkReadInvalidIndex::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkReadInvalidIndex::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkReadInvalidIndex::ReadEntryL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TBuf8<800> outputPbData;
+	PhoneBookStore().Read(status,aIndex,1,outputPbData);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkwrite.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,134 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//system include 
+#include <mpbutil.h> 
+//user include
+#include "testltsyphbkwrite.h"
+//const define
+const TUint8 KTypeOfNumber=0x81;
+
+CTestLtsyPhbkWrite::CTestLtsyPhbkWrite(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkWrite::~CTestLtsyPhbkWrite()
+	{
+	}
+
+CTestLtsyPhbkWrite* CTestLtsyPhbkWrite::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkWrite* self = new (ELeave)CTestLtsyPhbkWrite(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkWrite* CTestLtsyPhbkWrite::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkWrite* self=CTestLtsyPhbkWrite::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkWrite::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkWrite::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWrite::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkWrite::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWrite::doTestStepL called"));
+	TInt index = 10;
+	TRAPD(err,WriteEntryL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkWrite::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWrite::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkWrite::WriteEntryL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TBuf8<800> pbData; // Client reserved space for phonebook data
+	TInt ret;
+	    
+	_LIT16(KTel,"123456%03d");
+	_LIT16(KText,"TelNo %03d");
+	TBuf16<20> text(KTel), number(KText);
+
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+	CleanupStack::PushL(pbBuffer);
+	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+	pbBuffer->AddNewEntryTag();
+	// convert number into TLV format and append it to allocated buffer
+	TInt index = aIndex;
+	ret = pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBAdnIndex,(TUint16)index);
+	if( ret != KErrNone )
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	number.Format(KTel(), index);
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
+//	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNewEntry, number);
+	if( ret != KErrNone )
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	// convert number type into TLV format and append it to allocated buffer
+	TUint8 tonNpi=KTypeOfNumber; 
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+
+	text.Format(KText(), index);
+// convert text into TLV format and append it to allocated buffer
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	PhoneBookStore().Write(status, pbData,index);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	CleanupStack::PopAndDestroy();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphbkwriteinvalidindex.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,150 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//system include 
+#include <mpbutil.h> 
+//user include
+#include "testltsyphbkwriteinvalidindex.h"
+//const define
+const TUint8 KTypeOfNumber=0x81;
+
+CTestLtsyPhbkWriteInvalidIndex::CTestLtsyPhbkWriteInvalidIndex(CTestLtsyModel& aTestModel)
+	: CTestLtsyPhoneStoreBase(aTestModel)
+	{
+
+	}
+
+CTestLtsyPhbkWriteInvalidIndex::~CTestLtsyPhbkWriteInvalidIndex()
+	{
+	}
+
+CTestLtsyPhbkWriteInvalidIndex* CTestLtsyPhbkWriteInvalidIndex::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkWriteInvalidIndex* self = new (ELeave)CTestLtsyPhbkWriteInvalidIndex(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsyPhbkWriteInvalidIndex* CTestLtsyPhbkWriteInvalidIndex::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsyPhbkWriteInvalidIndex* self=CTestLtsyPhbkWriteInvalidIndex::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsyPhbkWriteInvalidIndex::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsyPhbkWriteInvalidIndex::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWriteInvalidIndex::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkWriteInvalidIndex::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWriteInvalidIndex::doTestStepL called"));
+	TInt index = -1;
+	TRAPD(err,WriteEntryL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write phonebook"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = 0;
+	TRAPD(err1,WriteEntryL(index));
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write phonebook"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = 256;
+	TRAPD(err2,WriteEntryL(index));
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write phonebook"),err2);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhbkWriteInvalidIndex::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhbkWriteInvalidIndex::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsyPhbkWriteInvalidIndex::WriteEntryL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TBuf8<800> pbData; // Client reserved space for phonebook data
+	TInt ret;
+	    
+	_LIT16(KTel,"123456%03d");
+	_LIT16(KText,"TelNo %03d");
+	TBuf16<20> text(KTel), number(KText);
+
+	CPhoneBookBuffer* pbBuffer = new(ELeave) CPhoneBookBuffer(); // used to write phonebook data
+	CleanupStack::PushL(pbBuffer);
+	pbBuffer->Set(&pbData); // Set it to point to the Client buffer
+	pbBuffer->AddNewEntryTag();
+	// convert number into TLV format and append it to allocated buffer
+	TInt index = aIndex;
+	ret = pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBAdnIndex,(TUint16)index);
+	if( ret != KErrNone )
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	number.Format(KTel(), index);
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, number);
+//	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNewEntry, number);
+	if( ret != KErrNone )
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	// convert number type into TLV format and append it to allocated buffer
+	TUint8 tonNpi=KTypeOfNumber; 
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBTonNpi, tonNpi);
+	if(ret!=KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+
+	text.Format(KText(), index);
+// convert text into TLV format and append it to allocated buffer
+	ret=pbBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, text);
+	if(ret != KErrNone)
+		{
+		CleanupStack::PopAndDestroy();
+		SetTestStepResult(EFail);
+		}
+	PhoneBookStore().Write(status, pbData,index);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	CleanupStack::PopAndDestroy();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonedetectednetworks.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetDetectedNetworks.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetDetectedNetworks
+
+// user include
+#include "TestLtsyPhoneGetDetectedNetworks.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetDetectedNetworks::CTestLtsyPhoneGetDetectedNetworks( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetDetectedNetworks::~CTestLtsyPhoneGetDetectedNetworks()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetDetectedNetworks::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetDetectedNetworksL());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonedetectednetworkscancel.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetDetectedNetworksCancel.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetDetectedNetworksCancel
+
+// user include
+#include "TestLtsyPhoneGetDetectedNetworksCancel.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetDetectedNetworksCancelCancel::CTestLtsyPhoneGetDetectedNetworksCancelCancel( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetDetectedNetworksCancelCancel::~CTestLtsyPhoneGetDetectedNetworksCancelCancel()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetDetectedNetworksCancelCancel::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetDetectedNetworksCancelL());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetcellinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetCellInfo.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetCellInfo
+
+// user include
+#include "TestLtsyPhoneGetCellInfo.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetCellInfo::CTestLtsyPhoneGetCellInfo( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetCellInfo::~CTestLtsyPhoneGetCellInfo()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetCellInfo::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetCellInfo());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetcurrentnetworkinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetCurrentNetworkInfo.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetCurrentNetworkInfo
+
+// user include
+#include "TestLtsyPhoneGetCurrentNetworkInfo.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetCurrentNetworkInfo::CTestLtsyPhoneGetCurrentNetworkInfo( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetCurrentNetworkInfo::~CTestLtsyPhoneGetCurrentNetworkInfo()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetCurrentNetworkInfo::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetCurrentNetworkInfo());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetfdnstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetFdnStatus.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetFdnStatus
+
+// user include
+#include "TestLtsyPhoneGetFdnStatus.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetFdnStatus::CTestLtsyPhoneGetFdnStatus( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetFdnStatus::~CTestLtsyPhoneGetFdnStatus()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetFdnStatus::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetFdnStatus());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegethomenetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetHomeNetwork.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetHomeNetwork
+
+// user include
+#include "TestLtsyPhoneGetHomeNetwork.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetHomeNetwork::CTestLtsyPhoneGetHomeNetwork( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetHomeNetwork::~CTestLtsyPhoneGetHomeNetwork()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetHomeNetwork::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetHomeNetwork());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetnetworkregistrationstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetNetworkRegistrationStatus.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetNetworkRegistrationStatus
+
+// user include
+#include "TestLtsyPhoneGetNetworkRegistrationStatus.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetNetworkRegistrationStatus::CTestLtsyPhoneGetNetworkRegistrationStatus( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetNetworkRegistrationStatus::~CTestLtsyPhoneGetNetworkRegistrationStatus()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetNetworkRegistrationStatus::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetNetworkRegistrationStatus());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonegetphoneid.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneGetPhoneID.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneGetPhoneID
+
+// user include
+#include "TestLtsyPhoneGetPhoneID.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneGetPhoneID::CTestLtsyPhoneGetPhoneID( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneGetPhoneID::~CTestLtsyPhoneGetPhoneID()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneGetPhoneID::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GetPhoneId());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphoneregistercellinfochangenotification.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneRegisterCellInfoChangeNotification.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneRegisterCellInfoChangeNotification
+
+// user include
+#include "testltsyphoneregistercellinfochangenotification.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneRegisterCellInfoChangeNotification::CTestLtsyPhoneRegisterCellInfoChangeNotification( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneRegisterCellInfoChangeNotification::~CTestLtsyPhoneRegisterCellInfoChangeNotification()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneRegisterCellInfoChangeNotification::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,RegisterCellInfoChangeNotification());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphoneselectnetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneSelectNetwork.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneSelectNetwork
+
+// user include
+#include "TestLtsyPhoneSelectNetwork.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneSelectNetwork::CTestLtsyPhoneSelectNetwork( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneSelectNetwork::~CTestLtsyPhoneSelectNetwork()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneSelectNetwork::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,SelectNetwork());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonesetnetworkselectionsetting.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+//  TestLtsyPhoneSetNetworkSelectionSetting.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPhoneSetNetworkSelectionSetting
+
+// user include
+#include "TestLtsyPhoneSetNetworkSelectionSetting.h"
+
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneSetNetworkSelectionSetting::CTestLtsyPhoneSetNetworkSelectionSetting( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPhoneStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneSetNetworkSelectionSetting::~CTestLtsyPhoneSetNetworkSelectionSetting()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPhoneSetNetworkSelectionSetting::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,SetNetworkSelectionSetting());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestepbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,431 @@
+// TestTelephonyPktTestStepBase.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPktTestStepBase
+#include <mmlist.h>
+#include <mmretrieve.h>
+// 	user include
+#include "TestLtsyPhoneStepBase.h"
+#include "te_integration_stltsysuitestepbase.h"
+#include "te_integration_stltsysuitedefs.h"
+
+// 
+_LIT(KTsyModuleName, "PhoneTsy");
+/**
+ * Constructor
+ */
+CTestLtsyPhoneStepBase::CTestLtsyPhoneStepBase(CTestLtsyModel& aModel)
+	:iModel(aModel),iSharedPhone(aModel.SharedEnv().Phone())
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPhoneStepBase::~CTestLtsyPhoneStepBase()
+	{
+
+	}
+/**
+ * Get the shared phone
+ * 
+ */
+RMobilePhone& CTestLtsyPhoneStepBase::SharedPhone() 
+	{
+	return iSharedPhone;
+	}
+	
+TVerdict CTestLtsyPhoneStepBase::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhoneStepBase::doTestStepPreambleL()"));
+	// uncomment the following 3 lines if you have common pre setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPreambleL();
+	// if (TestStepResult()!=EPass)
+	//    return   TestStepResult();
+	// process some pre setting to this test step then set SetTestStepResult to EFail or Epass.
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+TVerdict CTestLtsyPhoneStepBase::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPhoneStepBase::doTestStepPostambleL()"));
+	// process something post setting to the test step
+	// uncomment the following line if you have common post setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPostambleL();
+	// uncomment the following line if you have post process or remove the following line if no post process
+	// SetTestStepResult(EPass);		// or EFail
+	return TestStepResult();
+	}
+void CTestLtsyPhoneStepBase::TestOpenPhoneL()
+	{
+	// reset all shared data to make sure we are going to run on a clean environment
+	//Open the shared phone
+	iModel.SharedEnv().OpenPhoneL(KTsyModuleName);
+	}
+void CTestLtsyPhoneStepBase::TestClosePhone()
+	{
+	iModel.SharedEnv().ClosePhone();	
+	}
+
+void CTestLtsyPhoneStepBase::GetFdnStatus()
+	{
+	INFO_PRINTF1(_L("GetFdnStatus() invoked......\n"));
+	TRequestStatus Status;
+	RMobilePhone::TMobilePhoneFdnStatus FdnStatus;
+	iSharedPhone.GetFdnStatus(Status,FdnStatus);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetFdnStatus() complete = %d\n"), Status.Int());
+	}
+void CTestLtsyPhoneStepBase::GetNetworkRegistrationStatus()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetNetworkRegistrationStatus() invoked......\n"));
+	RMobilePhone::TMobilePhoneRegistrationStatus RegStatus;
+	iSharedPhone.GetNetworkRegistrationStatus(Status,RegStatus);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetNetworkRegistrationStatus() complete = %d\n"), Status.Int());
+	}
+void CTestLtsyPhoneStepBase::GetHomeNetwork()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetHomeNetwork() invoked......\n"));
+	RMobilePhone::TMobilePhoneNetworkInfoV1  aNetworkInfo;
+	RMobilePhone::TMobilePhoneNetworkInfoV1Pckg aNetworkInfoBuf(aNetworkInfo); // package TMobilePhoneNetworkInfoV1 into a buffer
+	RMobilePhone::TMobilePhoneLocationAreaV1 aArea;
+	iSharedPhone.GetHomeNetwork(Status, aNetworkInfoBuf) ;
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetHomeNetwork() complete = %d\n"), Status.Int());
+	}
+
+//void CTestLtsyPhoneStepBase::GetServiceProviderName()
+//	{
+//	
+//	}
+void CTestLtsyPhoneStepBase::GetPhoneId()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetPhoneId() invoked......\n"));
+	RMobilePhone::TMobilePhoneIdentityV1 aPhoneId;
+	iSharedPhone.GetPhoneId(Status,aPhoneId);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetPhoneId() complete = %d\n"), Status.Int());
+	
+	}
+void CTestLtsyPhoneStepBase::GetDetectedNetworksL()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetDetectedNetworks() invoked......\n"));
+	CRetrieveMobilePhoneDetectedNetworks* Retriever = CRetrieveMobilePhoneDetectedNetworks::NewL(iSharedPhone);
+	Retriever->StartV2(Status);
+	User::After(50*1000*1000);
+	delete Retriever;
+	INFO_PRINTF1(_L("GetDetectedNetworks() invoked......OK\n"));
+	
+//	iList = iRetriever->RetrieveListV2L();
+	}
+void CTestLtsyPhoneStepBase::GetDetectedNetworksCancelL()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetDetectedNetworksCancel() invoked......\n"));
+	CRetrieveMobilePhoneDetectedNetworks* Retriever = CRetrieveMobilePhoneDetectedNetworks::NewL(iSharedPhone);
+	Retriever->StartV2(Status);
+	Retriever->Cancel();
+	User::After(50*1000*1000);
+	delete Retriever;
+	INFO_PRINTF1(_L("GetDetectedNetworksCancel() invoked......OK\n"));
+	}
+void CTestLtsyPhoneStepBase::SetNetworkSelectionSetting()
+/**
+*	3.10.12 Set Network Selection Setting
+*	void RMobilePhone::SetNetworkSelectionSetting(TRequestStatus& aReqStatus,
+*		const TDes8& aSetting) const
+*	This method is used by client application to set the way a phone will select a
+*	network. The new setting is supplied within the aSetting parameter, which is a
+*	packaged version of the TMobilePhoneNetworkSelectionV1V1 class above.
+*	In manual network selection, the user is able to select a network to camp on to
+*	from a list of detected networks. The selected network has to be accessible by the
+*	user, i.e. it is not a forbidden network.
+*	When a phone is using manual network selection, at power-up or after signal loss,
+*	it will try to register to the network that the user last selected. If this network
+*	is not available then it is up to the phone whether it tries to fall-back to
+*	automatic selection or leaves the phone in no service.
+*
+*/
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetNetworkSelectionSetting() invoked......\n"));
+	RMobilePhone::TMobilePhoneNetworkSelectionV1  localNetworkSel;
+	localNetworkSel.iMethod = RMobilePhone::ENetworkSelectionManual;
+	
+	RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg localNetworkSelBuf(localNetworkSel) ;
+    
+	INFO_PRINTF1(_L("SetNetworkSelectionSetting() invoked......\n"));
+	iSharedPhone.SetNetworkSelectionSetting(Status, localNetworkSelBuf) ;
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("SetNetworkSelectionSetting() complete = %d\n"), Status.Int());
+	}
+void CTestLtsyPhoneStepBase::SelectNetwork()
+	{
+	TRequestStatus Status;
+	RMobilePhone::TMobilePhoneNetworkManualSelection tempsel;
+	tempsel.iCountry = _L("460");
+	tempsel.iNetwork = _L("00");
+	INFO_PRINTF1(_L("SelectNetwork() invoked......\n"));
+	iSharedPhone.SelectNetwork(Status,ETrue,tempsel);
+//	iSharedPhone.CancelAsyncRequest(Status);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("SelectNetwork() complete = %d\n"), Status.Int());
+	
+	}
+void CTestLtsyPhoneStepBase::SetAndSelectNetwork()
+	{
+	INFO_PRINTF1(_L("SetAndSelectNetwork() invoked......\n"));
+	SetNetworkSelectionSetting();
+	SelectNetwork();
+	}
+void CTestLtsyPhoneStepBase::GetCurrentNetworkInfo()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetCurrentNetworkInfo() invoked......\n"));	
+	RMobilePhone::TMobilePhoneNetworkInfoV5  aNetworkInfo;
+	RMobilePhone::TMobilePhoneNetworkInfoV5Pckg aNetworkInfoBuf(aNetworkInfo); // package TMobilePhoneNetworkInfoV1 into a buffer
+	RMobilePhone::TMobilePhoneLocationAreaV1 aArea;
+	iSharedPhone.GetCurrentNetwork(Status, aNetworkInfoBuf, aArea);
+	User::WaitForRequest(Status);
+
+	if (Status==KErrNone)
+		{
+		INFO_PRINTF1(_L("Get Get Current Network Information OK\n"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Get Get Current Network Information, Error %d returned.\n"), Status.Int());
+		}
+
+	}
+//void CTestLtsyPhoneStepBase::GetNetworkMode()
+//	{
+//	TRequestStatus Status;
+//	INFO_PRINTF1(_L("SetAndSelectNetwork() invoked......\n")));
+//	User::WaitForRequest(Status);
+//	INFO_PRINTF1(_L("SetAndSelectNetwork() complete = %d\n")), Status.Int());
+//	}
+void CTestLtsyPhoneStepBase::GetNitzInfo()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("SetAndSelectNetwork() invoked......\n"));
+	RMobilePhone::TMobilePhoneNITZ NITZInfo;
+	iSharedPhone.GetNITZInfo(NITZInfo);
+	
+    User::After(15*1000*1000);
+	INFO_PRINTF1(_L("SetAndSelectNetwork() invoked......OK\n"));
+	
+	}
+void CTestLtsyPhoneStepBase::GetSignalStrength()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetSignalStrength() invoked......\n"));
+	TInt32 signalStrength;
+	TInt8 bars;
+
+	iSharedPhone.GetSignalStrength(Status, signalStrength, bars);
+	User::WaitForRequest(Status);
+	
+	if (Status==KErrNone)
+		{
+		INFO_PRINTF2(_L("Signal strength (in dBm) : %d\n"), signalStrength);
+		INFO_PRINTF2(_L("Signal strength (in display bars) : %d\n"), bars);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Signal strength, Error %d returned.\n"), Status.Int());
+		}
+		
+	User::After(3000000);		// Give user time to see the test results 
+	}
+void CTestLtsyPhoneStepBase::GetSignalCaps()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetSignalCaps() invoked......\n"));
+	// Signal Caps
+    TUint32 mmSignalCaps;
+	TInt retCap;
+	retCap = iSharedPhone.GetSignalCaps(mmSignalCaps);
+	if (retCap==KErrNotSupported)
+		{
+		INFO_PRINTF1(_L("Signal Capabilities NOT Supported\n"));		
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Phone Signal Strength Caps = 0x%x\n"), mmSignalCaps);
+		if (mmSignalCaps & RMobilePhone::KCapsGetSignalStrength)
+			{
+			INFO_PRINTF1(_L("  Get Signal Strength Supported\n"));
+			}
+		if (mmSignalCaps & RMobilePhone::KCapsNotifySignalStrengthChange)
+			{
+			INFO_PRINTF1(_L("  Notify Signal Strength Supported\n"));
+			}
+		}
+	}
+void CTestLtsyPhoneStepBase::GetBatteryInfo()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetBatteryInfo() invoked......\n"));
+	RMobilePhone::TMobilePhoneBatteryInfoV1 battery;
+	iSharedPhone.GetBatteryInfo(Status, battery);
+	User::WaitForRequest(Status);
+	if (Status==KErrNone)
+		{
+		INFO_PRINTF2(_L("Battery status : %d\n"), battery.iStatus);
+		INFO_PRINTF2(_L("Battery charge level : %d\n"), battery.iChargeLevel);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Battery charge, Error %d returned.\n"), Status.Int());
+		}
+	}
+
+void CTestLtsyPhoneStepBase::GetSignalStrengthCancel()
+/** 
+ * This method retrieves a phone's Signal and Battery Strength Information.
+ */
+	{
+	TRequestStatus Status;
+	// Cancel Requests
+	INFO_PRINTF1(_L("GetSignalStrengthCancel() invoked......\n"));
+	TInt32 signalStrength;
+	TInt8 bars;
+	iSharedPhone.GetSignalStrength(Status, signalStrength, bars);
+	iSharedPhone.CancelAsyncRequest(EMobilePhoneGetSignalStrength);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetSignalStrength Cancel status = %d\n\n"), Status.Int());
+	}
+
+/**
+ * Notify signal strength change
+ * 
+ */
+void CTestLtsyPhoneStepBase::NotifySignalStrengthChange()
+	{
+	TRequestStatus reqStatus;
+	TInt32 signalStrength(0);
+	TInt8 bar(0);
+	TInt32 completeSignalStrength(70);
+	TInt8 completeBar(3);
+	SharedPhone().NotifySignalStrengthChange(reqStatus, signalStrength, bar);
+	User::WaitForRequest(reqStatus);
+	if(bar != completeBar)
+		{
+		ERR_PRINTF1(_L("bar is not expect."));
+		}
+	if(signalStrength != completeSignalStrength)
+		{
+		ERR_PRINTF1(_L("signalStrength is not expect."));
+		}
+	}
+void CTestLtsyPhoneStepBase::GetBatteryCaps()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("GetBatteryCaps() invoked......\n"));
+	// Battery Caps
+    TUint32 mmBatteryCaps;
+	TInt retCap;
+	retCap = iSharedPhone.GetBatteryCaps(mmBatteryCaps);
+
+	if (retCap==KErrNotSupported)
+		{
+		INFO_PRINTF1(_L("Battery Capabilities NOT Supported\n"));		
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Phone Battery Caps = 0x%x\n"), mmBatteryCaps);
+		}
+	}
+void CTestLtsyPhoneStepBase::GetBatteryStrengthCancel()
+/** 
+ * This method retrieves a phone's Signal and Battery Strength Information.
+ */
+	{
+	TRequestStatus Status;
+	// Cancel Requests
+	INFO_PRINTF1(_L("GetBatteryStrengthCancel() invoked......\n"));
+	RMobilePhone::TMobilePhoneBatteryInfoV1 battery;
+
+	iSharedPhone.GetBatteryInfo(Status, battery);
+	iSharedPhone.CancelAsyncRequest(EMobilePhoneGetBatteryInfo);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetBatteryInfo Cancel status = %d\n"), Status.Int());
+	}
+/**
+ * 
+ * Notify battery info change or not
+ * 
+ */
+void CTestLtsyPhoneStepBase::NotifyBatteryInfoChange()
+	{
+	TRequestStatus status;
+	RMobilePhone::TMobilePhoneBatteryInfoV1 batInfo;
+	TUint twentyCharge = 20;
+	iSharedPhone.NotifyBatteryInfoChange(status, batInfo);
+
+	User::WaitForRequest(status);
+	if(batInfo.iStatus != RMobilePhone::EBatteryConnectedButExternallyPowered)
+		{
+		INFO_PRINTF1(_L("Failed to Check Phone battery status."));
+		}
+	if(batInfo.iChargeLevel != twentyCharge)
+		{
+		INFO_PRINTF1(_L("Failed to Check Phone battery charge level."));
+		}
+	}
+//void CTestLtsyPhoneStepBase::GetCurrentSystemNetworkModes()
+//	{
+//	TRequestStatus Status;
+//	INFO_PRINTF1(_L("GetCellInfo() invoked......\n")));
+//	User::WaitForRequest(Status);
+//	INFO_PRINTF1(_L("GetCellInfo() complete = %d\n")), Status.Int());	
+//	}
+//void CTestLtsyPhoneStepBase::GetNetworkProviderName()
+//	{
+//	TRequestStatus Status;
+//	INFO_PRINTF1(_L("GetCellInfo() invoked......\n")));
+//	User::WaitForRequest(Status);
+//	INFO_PRINTF1(_L("GetCellInfo() complete = %d\n")), Status.Int());	
+//	}
+//void CTestLtsyPhoneStepBase::GetOperatorName()
+//	{
+//	TRequestStatus Status;
+//	INFO_PRINTF1(_L("GetCellInfo() invoked......\n")));
+//	User::WaitForRequest(Status);
+//	INFO_PRINTF1(_L("GetCellInfo() complete = %d\n")), Status.Int());	
+//	}
+void CTestLtsyPhoneStepBase::RegisterCellInfoChangeNotification()
+	{
+	TRequestStatus Status;
+	INFO_PRINTF1(_L("NotifyCellInfoChange() invoked......\n"));
+	RMobilePhone::TMobilePhoneCellInfoV9 phoneCellinfo1;
+	RMobilePhone::TMobilePhoneCellInfoV9Pckg Packaged1(phoneCellinfo1);
+	iSharedPhone.NotifyCellInfoChange(Status,Packaged1);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("NotifyCellInfoChange() complete = %d\n"), Status.Int());
+	
+	}
+void CTestLtsyPhoneStepBase::GetCellInfo()
+	{
+	TRequestStatus Status;
+	RMobilePhone::TMobilePhoneCellInfoV9 phoneCellinfo;
+	RMobilePhone::TMobilePhoneCellInfoV9Pckg Packaged(phoneCellinfo);
+	
+	INFO_PRINTF1(_L("GetCellInfo() invoked......\n"));
+	iSharedPhone.GetCellInfo(Status,Packaged);
+	User::WaitForRequest(Status);
+	INFO_PRINTF2(_L("GetCellInfo() complete = %d\n"), Status.Int());	
+	}
+//void CTestLtsyPhoneStepBase::GetPhoneCellInfo()
+//	{
+//	}
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestorebase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,100 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+// user include
+#include "testltsyphonestorebase.h"
+#include "testltsyphonestoreshareddata.h"
+
+//const define
+_LIT16(KPhoneTSY, "phonetsy");
+
+// member functions
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPhoneStoreBase::CTestLtsyPhoneStoreBase(CTestLtsyModel& aTestModel)
+    : iModel(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPhoneStoreBase::~CTestLtsyPhoneStoreBase()
+	{
+	
+	}
+
+TVerdict CTestLtsyPhoneStoreBase::doTestStepPreambleL()
+	{
+	OpenPhoneL();
+	if(TestStepResult() == EPass)
+		{		
+		
+		}
+	
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsyPhoneStoreBase::doTestStepPostambleL()
+	{
+
+	return TestStepResult();
+	}
+
+/**
+ * Get the PhoneON object
+ * 
+ */
+RMobileONStore& CTestLtsyPhoneStoreBase::PhoneONStore()
+	{
+	return iModel.PhoneStoreSharedData().PhoneONStore();	
+	}
+
+/**
+ * Get the Enstore object
+ * 
+ */
+RMobileENStore& CTestLtsyPhoneStoreBase::PhoneENStore()
+	{
+    return iModel.PhoneStoreSharedData().PhoneENStore();	
+	}
+
+/**
+ * Get the PhoneBook store object
+ * 
+ */
+RMobilePhoneBookStore& CTestLtsyPhoneStoreBase::PhoneBookStore()
+	{
+	 return iModel.PhoneStoreSharedData().PhoneBookStore();	
+	}
+
+void CTestLtsyPhoneStoreBase::OpenPhoneL()
+	{
+	INFO_PRINTF1(_L("starting opne phone"));
+		
+	if (!iModel.SharedEnv().PhoneOpened())
+		{
+		iModel.SharedEnv().OpenPhoneL(KPhoneTSY);
+		}
+	}
+
+// end of file
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyphonestoreshareddata.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,87 @@
+// TestTelephonyPhoneStoreSharedData.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPhoneStoreSharedData
+
+// CTSY include
+
+// user include
+#include "TestLtsyPhoneStoreSharedData.h"
+
+/**
+ * Constructor
+ * 
+ */
+CTestLtsyPhoneStoreSharedData::CTestLtsyPhoneStoreSharedData()
+	{
+	}
+
+/**
+ * Factory function to create a new CTestTelephonySmsSharedData object
+ * 
+ */
+CTestLtsyPhoneStoreSharedData*CTestLtsyPhoneStoreSharedData::NewL()
+	{
+	CTestLtsyPhoneStoreSharedData* self = new (ELeave) CTestLtsyPhoneStoreSharedData();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPhoneStoreSharedData::~CTestLtsyPhoneStoreSharedData()
+	{
+	Reset();
+	}
+
+/**
+ * ConstructL
+ * 
+ */
+void CTestLtsyPhoneStoreSharedData::ConstructL()
+	{
+	}
+
+/**
+ * Delete all store objects
+ * 
+ */
+void CTestLtsyPhoneStoreSharedData::Reset()
+	{
+	iENStore.Close();
+	iONStore.Close();
+	iPhBkStore.Close();
+	}
+
+/**
+ * return ENStore 
+ * 
+ */
+RMobileENStore& CTestLtsyPhoneStoreSharedData::PhoneENStore()
+	{
+	return iENStore;
+	}
+
+
+/**
+ * return ONStore
+ * 
+ */
+RMobileONStore& CTestLtsyPhoneStoreSharedData::PhoneONStore()
+	{
+	return iONStore;
+	}
+
+/**
+ * return PhoneBookStore
+ * 
+ */
+RMobilePhoneBookStore& CTestLtsyPhoneStoreSharedData::PhoneBookStore()
+	{
+	return iPhBkStore;
+	}
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktactivatecontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+// TestLtsyPktActivateContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktActivateContext
+
+// 	user include
+#include "TestLtsyPktActivateContext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktActivateContext::CTestLtsyPktActivateContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktActivateContext::~CTestLtsyPktActivateContext()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktActivateContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextActivateTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktattachnetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+// TestLtsyPktAttachNetwork.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktAttachNetwork
+
+// 	user include
+#include "TestLtsyPktAttachNetwork.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktAttachNetwork::CTestLtsyPktAttachNetwork(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktAttachNetwork::~CTestLtsyPktAttachNetwork()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktAttachNetwork::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextAttachTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosecontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,38 @@
+// TestLtsyPktCloseContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktCloseContext
+
+// 	user include
+#include "TestLtsyPktCloseContext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktCloseContext::CTestLtsyPktCloseContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktCloseContext::~CTestLtsyPktCloseContext()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktCloseContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+		CloseExistContext();
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosecontextqos.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,38 @@
+// TestLtsyPktCloseContextQos.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktCloseContextQos
+
+// 	user include
+#include "TestLtsyPktCloseContextQos.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktCloseContextQos::CTestLtsyPktCloseContextQos(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktCloseContextQos::~CTestLtsyPktCloseContextQos()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktCloseContextQos::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	CloseExistContextQos();
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktclosepacket.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,48 @@
+//  TestLtsyPktClosePacket.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktClosePacket
+
+// user include
+
+#include "TestLtsyPktClosePacket.h"
+
+/**
+* Constructor
+* 
+*/
+CTestLtsyPktClosePacket::CTestLtsyPktClosePacket( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPktTestStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPktClosePacket::~CTestLtsyPktClosePacket()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktClosePacket::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+//		if (iModel.SharedEnv().PhoneOpened())
+//			{
+//			iModel.SharedEnv().ClosePhone();	
+//			}
+    	ClosePacketobject();
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdeactivatecontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktDeactivateContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktDeactivateContext
+
+// 	user include
+#include "TestLtsyPktDeactivateContext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktDeactivateContext::CTestLtsyPktDeactivateContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPktDeactivateContext::~CTestLtsyPktDeactivateContext()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktDeactivateContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextDeactivateTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdeletecontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktDeleteContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktDeleteContext
+
+// 	user include
+#include "TestLtsyPktDeleteContext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktDeleteContext::CTestLtsyPktDeleteContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktDeleteContext);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktDeleteContext::~CTestLtsyPktDeleteContext()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktDeleteContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextDeleteTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktdetachnetwork.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktDetachNetwork.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktDetachNetwork
+
+// 	user include
+#include "TestLtsyPktDetachNetwork.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktDetachNetwork::CTestLtsyPktDetachNetwork(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPktDetachNetwork::~CTestLtsyPktDetachNetwork()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktDetachNetwork::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextDetachTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextconfig.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktGetContextConfig.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetContextConfig
+
+// 	user include
+#include "TestLtsyPktGetContextConfig.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetContextConfig::CTestLtsyPktGetContextConfig(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktGetContextConfig);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetContextConfig::~CTestLtsyPktGetContextConfig()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetContextConfig::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextGetConfigTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+// TestLtsyPktGetContextInfo.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetContextInfo
+
+// 	user include
+#include "TestLtsyPktGetContextInfo.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetContextInfo::CTestLtsyPktGetContextInfo(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetContextInfo::~CTestLtsyPktGetContextInfo()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetContextInfo::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,DisplayContextInfo());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextqosprifile.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktGetContextQoSProfile.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetContextQoSProfile
+
+// 	user include
+#include "TestLtsyPktGetContextQoSProfile.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetContextQoSProfile::CTestLtsyPktGetContextQoSProfile(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktGetContextQoSProfile);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetContextQoSProfile::~CTestLtsyPktGetContextQoSProfile()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetContextQoSProfile::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsGetQoSProfileTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetcontextqosprofile.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktGetContextQoSProfile.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetContextQoSProfile
+
+// 	user include
+#include "TestLtsyPktGetContextQoSProfile.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetContextQoSProfile::CTestLtsyPktGetContextQoSProfile(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktGetContextQoSProfile);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetContextQoSProfile::~CTestLtsyPktGetContextQoSProfile()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetContextQoSProfile::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsGetQoSProfileTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetdefaultparams.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktGetDefaultParams.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetDefaultParams
+
+// 	user include
+#include "TestLtsyPktGetDefaultParams.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetDefaultParams::CTestLtsyPktGetDefaultParams(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktGetDefaultParams);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetDefaultParams::~CTestLtsyPktGetDefaultParams()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetDefaultParams::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsGetDefaultContextParamsTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetdynamiccapabilities.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+// TestLtsyPktGetDynamicCapabilities.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetDynamicCapabilities
+
+// 	user include
+#include "TestLtsyPktGetDynamicCapabilities.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetDynamicCapabilities::CTestLtsyPktGetDynamicCapabilities(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetDynamicCapabilities::~CTestLtsyPktGetDynamicCapabilities()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetDynamicCapabilities::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,DisplayDynamicCapabilities());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetnwkregistrationstatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// testltsypktgetnwkregistrationstatus.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktNetworkRegistrationStatus
+
+// 	user include
+#include "testltsypktgetnwkregistrationstatus.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktNetworkRegistrationStatus::CTestLtsyPktNetworkRegistrationStatus(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktNetworkRegistrationStatus);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktNetworkRegistrationStatus::~CTestLtsyPktNetworkRegistrationStatus()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktNetworkRegistrationStatus::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,DisplayNetworkRegistrationStatus());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetservicestatus.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,44 @@
+// TestLtsyPktGetServiceStatus.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetServiceStatus
+
+// 	user include
+#include "testltsypktgetservicestatus.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetServiceStatus::CTestLtsyPktGetServiceStatus(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetServiceStatus::~CTestLtsyPktGetServiceStatus()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetServiceStatus::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,DisplayPacketServiceStatus());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktgetstaticcapabilities.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+// TestLtsyPktGetStaticCapabilities.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktGetStaticCapabilities
+
+// 	user include
+#include "TestLtsyPktGetStaticCapabilities.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktGetStaticCapabilities::CTestLtsyPktGetStaticCapabilities(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktGetStaticCapabilities::~CTestLtsyPktGetStaticCapabilities()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktGetStaticCapabilities::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+		TRAPD(err,DisplayStaticCapabilities());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktinitialsecontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+// TestLtsyPktInitialiseContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktInitialiseContext
+
+// 	user include
+#include "testltsypktinitialisecontext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktInitialiseContext::CTestLtsyPktInitialiseContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktInitialiseContext::~CTestLtsyPktInitialiseContext()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktInitialiseContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsInitialiseContext());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopencontext.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,47 @@
+// TestLtsyPktOpenContext.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktOpenContext
+
+// 	user include
+#include "TestLtsyPktOpenContext.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktOpenContext::CTestLtsyPktOpenContext(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktOpenContext::~CTestLtsyPktOpenContext()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktOpenContext::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+		if (!IsOpenedPktService())
+			{
+			OpenPacketobject();
+			}
+    	TRAPD(err,OpenNewContext());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopencontextqos.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,43 @@
+// TestLtsyPktOpenContextQos.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktOpenContextQos
+
+// 	user include
+#include "TestLtsyPktOpenContextQos.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktOpenContextQos::CTestLtsyPktOpenContextQos(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktOpenContextQos::~CTestLtsyPktOpenContextQos()
+	{
+	}
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktOpenContextQos::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,OpenNewContextQos());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktopenpacket.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,53 @@
+//  TestLtsyPktOpenPPacket.cpp
+//  Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+//  Implementation of the Class CTestLtsyPktOpenPacket
+
+// user include
+
+#include "TestLtsyPktOpenPacket.h"
+_LIT(KTsyModuleName, "PhoneTsy");
+/**
+* Constructor
+* 
+*/
+CTestLtsyPktOpenPacket::CTestLtsyPktOpenPacket( CTestLtsyModel& aTestModel) 
+    :CTestLtsyPktTestStepBase(aTestModel)
+	{
+	}
+
+/**
+* Destructor
+*
+*/	
+CTestLtsyPktOpenPacket::~CTestLtsyPktOpenPacket()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktOpenPacket::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+		if (!iModel.SharedEnv().PhoneOpened())
+			{
+			iModel.SharedEnv().OpenPhoneL(KTsyModuleName);
+			}
+    	TRAPD(err,OpenPacketobject());
+    	if(err != KErrNone)
+    		{
+    		ERR_PRINTF2(_L("The error was returned %d!! when open Phone"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	
+	return TestStepResult();
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetcontextconfig.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktSetContextConfig.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktSetContextConfig
+
+// 	user include
+#include "TestLtsyPktSetContextConfig.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktSetContextConfig::CTestLtsyPktSetContextConfig(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktSetContextConfig);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktSetContextConfig::~CTestLtsyPktSetContextConfig()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktSetContextConfig::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsContextSetConfigTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetcontextqosprofile.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// TestLtsyPktSetContextQoSProfile.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktSetContextQoSProfile
+
+// 	user include
+#include "TestLtsyPktSetContextQoSProfile.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktSetContextQoSProfile::CTestLtsyPktSetContextQoSProfile(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktSetContextQoSProfile);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktSetContextQoSProfile::~CTestLtsyPktSetContextQoSProfile()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktSetContextQoSProfile::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsSetQoSProfileTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktsetdefaultparams.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,45 @@
+// CTestLtsyPktSetDefaultParams.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestLtsyPktSetDefaultParams
+
+// 	user include
+#include "TestLtsyPktSetDefaultParams.h"
+
+/**
+ * Constructor
+ */
+CTestLtsyPktSetDefaultParams::CTestLtsyPktSetDefaultParams(CTestLtsyModel& aModel)
+	:CTestLtsyPktTestStepBase(aModel)
+	{
+	SetTestStepName(KTestLtsyPktSetDefaultParams);
+	}
+
+/**
+ * Destructor
+ */
+CTestLtsyPktSetDefaultParams::~CTestLtsyPktSetDefaultParams()
+	{
+	}
+
+/**
+ * It implements the required functionality of the test step.
+ * This step will open a shared phone
+ * @return TVerdict - result of the test step
+ * @leave - System wide error codes
+ */
+TVerdict CTestLtsyPktSetDefaultParams::doTestStepL()
+	{
+	if(TestStepResult() == EPass)
+		{
+    	TRAPD(err,GprsSetDefaultContextParamsTest());
+    	if(err != KErrNone)
+    		{
+    		INFO_PRINTF2(_L("The error was returned %d!! when open Context"),err);
+    	    SetTestStepResult(EFail);
+    		}
+		}
+	return TestStepResult();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktshareddata.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,49 @@
+// TestTelephonyPktSharedData.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPktSharedData
+
+// user include
+#include "TestLtsyPktSharedData.h"
+
+/**
+ * Factory function
+ */
+CTestLtsyPktSharedData* CTestLtsyPktSharedData::NewL()
+	{
+	CTestLtsyPktSharedData* ret = new(ELeave) CTestLtsyPktSharedData();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	
+	return ret;
+	}
+
+/**
+ * Constructor
+ * 
+ * @param CTestStep& aTestStep The test step used for logging and reading info from ini
+ * @param CTestTelephonyTsyAdaptor& aTestEnvAdaptor The telephony tsy adaptor
+ */
+CTestLtsyPktSharedData::CTestLtsyPktSharedData()
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPktSharedData::~CTestLtsyPktSharedData()
+	{
+	}
+
+
+/**
+ * ConstructL
+ * 
+ */
+void CTestLtsyPktSharedData::ConstructL()
+	{
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsypktteststepbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,1114 @@
+// TestTelephonyPktTestStepBase.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonyPktTestStepBase
+
+// 	user include
+#include "TestLtsyPktTestStepBase.h"
+#include "te_integration_stltsysuitestepbase.h"
+#include "te_integration_stltsysuitedefs.h"
+
+_LIT8(KName, "internet");
+/**
+ * Constructor
+ */
+CTestLtsyPktTestStepBase::CTestLtsyPktTestStepBase(CTestLtsyModel& aModel)
+	:iModel(aModel),iSharedPhone(aModel.SharedEnv().Phone())
+	{
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsyPktTestStepBase::~CTestLtsyPktTestStepBase()
+	{
+
+	}
+
+TVerdict CTestLtsyPktTestStepBase::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPktTestStepBase::doTestStepPreambleL()."));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+TVerdict CTestLtsyPktTestStepBase::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsyPktTestStepBase::doTestStepPostambleL()"));
+	return TestStepResult();
+	}
+
+/**
+ * Get the shared phone
+ * 
+ */
+RMobilePhone& CTestLtsyPktTestStepBase::SharedPhone() 
+	{
+	return iSharedPhone;
+	}
+/**
+ * Check if the RPacketService has been opened
+ * @return - the result
+ */
+TBool CTestLtsyPktTestStepBase::IsOpenedPktService()
+	{
+	return (NULL != iModel.PktSharedData().iPacket.SubSessionHandle());
+	}
+void CTestLtsyPktTestStepBase::OpenPacketobject()
+	{
+	TInt           returnStatus;
+	INFO_PRINTF1(_L("Close packet\n"));
+	// Open Packet object
+	iModel.PktSharedData().iPacket.Close();
+	INFO_PRINTF1(_L("packet closeed \n"));
+	INFO_PRINTF1(_L("To open Packet Object\n"));
+
+	returnStatus = iModel.PktSharedData().iPacket.Open(iModel.SharedEnv().Phone());
+	if(returnStatus == KErrNone)
+		{
+		INFO_PRINTF1(_L("packet opened \n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Opened packet error\n"));
+		INFO_PRINTF2(_L("Opened packet error = %d\n"), returnStatus);
+		}
+	}
+void CTestLtsyPktTestStepBase::ClosePacketobject()
+	{
+	INFO_PRINTF1(_L("Close packet\n"));
+	User::After(1000000);
+	iModel.PktSharedData().iPacket.Close();
+	INFO_PRINTF1(_L("packet closeed \n"));
+	}
+void CTestLtsyPktTestStepBase::DisplayPacketServiceStatus()
+/**
+ * Test the TSY's functionality to retrieve the packet service status.
+ */
+	{
+	TInt returnStatus = iModel.PktSharedData().iPacket.GetStatus(iModel.PktSharedData().iPacketStatus);
+	if(returnStatus==KErrNone)
+		{
+		switch (iModel.PktSharedData().iPacketStatus)
+			{
+			case RPacketService::EStatusUnattached:
+				INFO_PRINTF1(_L("Packet Service status = Unattached\n"));
+				break;
+			case RPacketService::EStatusAttached:
+				INFO_PRINTF1(_L("Packet Service status = Attached\n"));
+				break;
+			case RPacketService::EStatusActive:
+				INFO_PRINTF1(_L("Packet Service status = Active\n"));
+				break;
+			case RPacketService::EStatusSuspended:
+				INFO_PRINTF1(_L("Packet Service status = Suspended\n"));
+				break;
+			default:
+				INFO_PRINTF1(_L("Packet Service error\n"));
+				break;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Packet Service error\n"));
+		}
+	}
+
+void CTestLtsyPktTestStepBase::GprsNetWorkTest()
+	{
+	INFO_PRINTF1(_L("Open Packet Object"));
+
+	TInt           returnStatus;
+	TRequestStatus requestStatus;
+	INFO_PRINTF1(_L("Close packet\n"));
+	// Open Packet object
+	iModel.PktSharedData().iPacket.Close();
+	INFO_PRINTF1(_L("packet closeed \n"));
+	INFO_PRINTF1(_L("To open Packet Object\n"));
+	returnStatus = iModel.PktSharedData().iPacket.Open(iSharedPhone);
+	if(returnStatus == KErrNone)
+		{
+		INFO_PRINTF1(_L("packet opened \n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Opened packet error\n"));
+		}
+	requestStatus = KErrNone;
+	INFO_PRINTF1((_L("RPacket::GetNtwkRegStatus() invoked...\n")));
+	iModel.PktSharedData().iPacket.GetNtwkRegStatus(requestStatus, iModel.PktSharedData().iRegistrationStatus);
+	User::WaitForRequest(requestStatus);
+	
+	if(requestStatus == KErrNone)
+		{
+		switch (iModel.PktSharedData().iRegistrationStatus)
+			{
+			case RPacketService::ENotRegisteredNotSearching:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered Not Searching\n"));
+				break;
+			case RPacketService::ERegisteredOnHomeNetwork:
+				INFO_PRINTF1(_L("Netw Reg status = Registered On Home Network\n"));
+				break;
+			case RPacketService::ENotRegisteredSearching:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered Searching\n"));
+				break;
+			case RPacketService::ERegistrationDenied:
+				INFO_PRINTF1(_L("Netw Reg status = Registration Denied\n"));
+				break;
+			case RPacketService::EUnknown:
+				INFO_PRINTF1(_L("Netw Reg status = Unknown\n"));
+				break;
+			case RPacketService::ERegisteredRoaming:
+				INFO_PRINTF1(_L("Netw Reg status = RegisteredRoaming\n"));
+				break;
+			case RPacketService::ENotRegisteredButAvailable:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered But Available\n"));
+				break;
+			case RPacketService::ENotRegisteredAndNotAvailable:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered And Not Available\n"));
+				break;
+			default:
+				INFO_PRINTF1(_L("Network Registration Status Error\n"));
+				break;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Network Registration Status Error\n"));
+		}
+	iModel.PktSharedData().iPacket.Close();
+	}
+void CTestLtsyPktTestStepBase::DisplayNetworkRegistrationStatus()
+/**
+ * Test the TSY's functionality to retrieve the network registration status.
+ */
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1((_L("RPacket::GetNtwkRegStatus() invoked...\n")));
+	iModel.PktSharedData().iPacket.GetNtwkRegStatus(requestStatus, iModel.PktSharedData().iRegistrationStatus);
+	User::WaitForRequest(requestStatus);
+	
+	if(requestStatus == KErrNone)
+		{
+		switch (iModel.PktSharedData().iRegistrationStatus)
+			{
+			case RPacketService::ENotRegisteredNotSearching:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered Not Searching\n"));
+				break;
+			case RPacketService::ERegisteredOnHomeNetwork:
+				INFO_PRINTF1(_L("Netw Reg status = Registered On Home Network\n"));
+				break;
+			case RPacketService::ENotRegisteredSearching:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered Searching\n"));
+				break;
+			case RPacketService::ERegistrationDenied:
+				INFO_PRINTF1(_L("Netw Reg status = Registration Denied\n"));
+				break;
+			case RPacketService::EUnknown:
+				INFO_PRINTF1(_L("Netw Reg status = Unknown\n"));
+				break;
+			case RPacketService::ERegisteredRoaming:
+				INFO_PRINTF1(_L("Netw Reg status = RegisteredRoaming\n"));
+				break;
+			case RPacketService::ENotRegisteredButAvailable:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered But Available\n"));
+				break;
+			case RPacketService::ENotRegisteredAndNotAvailable:
+				INFO_PRINTF1(_L("Netw Reg status = Not Registered And Not Available\n"));
+				break;
+			default:
+				INFO_PRINTF1(_L("Network Registration Status Error\n"));
+				break;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Network Registration Status Error\n"));
+		}
+	}
+
+void CTestLtsyPktTestStepBase::DisplayContextInfo()
+/**
+ * Test the TSY's functionality to retrieve the packet context information
+ * using the packet service object.
+ */
+	{
+	// Enumerate Contexts & Get Context Info
+	INFO_PRINTF1(_L("Display the packet context information\n"));
+
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketService::EnumerateContexts() invoked....\n"));
+	iModel.PktSharedData().iPacket.EnumerateContexts(requestStatus, iModel.PktSharedData().iNumContexts, iModel.PktSharedData().iMaxContextsAllowed);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketService::EnumerateContexts() completed %d\n"), requestStatus.Int());
+	INFO_PRINTF2(_L("Number of Contexts   = %d\n"), iModel.PktSharedData().iNumContexts);
+	INFO_PRINTF2(_L("Max Contexts Allowed = %d\n"), iModel.PktSharedData().iMaxContextsAllowed);
+
+	requestStatus = KErrNone;
+	INFO_PRINTF1(_L("Sync RPacket::GetContextInfo() invoked...\n"));
+	iModel.PktSharedData().iPacket.GetContextInfo(requestStatus, 0, iModel.PktSharedData().iContextInfo);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("Sync RPacket::GetContextInfo() completed %d\n"), requestStatus.Int());
+	if (requestStatus == KErrNone)
+		{
+		INFO_PRINTF2(_L("Context Name   = %S\n"), &iModel.PktSharedData().iContextInfo.iName);
+		DisplayContextStatus(iModel.PktSharedData().iContextInfo.iStatus);
+		}
+
+
+/********************************************************************
+	console->Printf(TRefByValue<const TDesC>(_L("Execute Async RPacket::GetContextInfo()\n")));
+	TRequestStatus requestStatus;
+	iPacket.GetContextInfo(requestStatus, 0, iContextInfo2);
+	User::WaitForRequest(requestStatus);
+	console->Printf(TRefByValue<const TDesC>(_L("RPacketService::GetContextInfo() ret = %d\n")), requestStatus);
+	if (requestStatus == KErrNone)
+		{
+		console->Printf(TRefByValue<const TDesC>(_L("Context Name   = %S\n")), iContextInfo2.iName);
+		console->Printf(TRefByValue<const TDesC>(_L("Context Status = %d\n")), iContextInfo2.iStatus);
+		}
+*********************************************************************/
+	}
+
+
+void CTestLtsyPktTestStepBase::DisplayContextStatus(RPacketContext::TContextStatus aContextStatus)
+	{
+	switch (aContextStatus)
+		{
+		case RPacketContext::EStatusUnknown:
+			INFO_PRINTF1(_L("Context Status = Unknown\n"));
+			break;
+		case RPacketContext::EStatusInactive:
+			INFO_PRINTF1(_L("Context Status = Inactive\n"));
+			break;
+		case RPacketContext::EStatusActivating:
+			INFO_PRINTF1(_L("Context Status = Activating\n"));
+			break;
+		case RPacketContext::EStatusActive:
+			INFO_PRINTF1(_L("Context Status = Active\n"));
+			break;
+		case RPacketContext::EStatusDeactivating:
+			INFO_PRINTF1(_L("Context Status = Deactivating\n"));
+			break;
+		case RPacketContext::EStatusSuspended:
+			INFO_PRINTF1(_L("Context Status = Suspended\n"));
+			break;
+		case RPacketContext::EStatusDeleted:
+			INFO_PRINTF1(_L("Context Status = Deleted\n"));
+			break;
+		default:
+			INFO_PRINTF1(_L("Error - Context Status\n"));
+			break;
+		}
+	}
+
+
+void CTestLtsyPktTestStepBase::DisplayContextStatus(RPacketContext& aContext, RPacketContext::TContextStatus& aContextStatus)
+	{
+	TRequestStatus returnStatus = aContext.GetStatus(aContextStatus);
+	if(returnStatus == KErrNone)
+		{
+		INFO_PRINTF1(_L("RPacketContext::GetStatus() OK\n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Error - Context Status\n"));
+		}
+	DisplayContextStatus(aContextStatus);
+	}
+
+void  CTestLtsyPktTestStepBase::GprsContextAttachTest()
+	{
+	INFO_PRINTF1(_L("GprsContextAttachTest\n"));
+	TRequestStatus requestStatus = KErrNone;
+	iModel.PktSharedData().iPacket.Attach(requestStatus);
+	User::WaitForRequest(requestStatus);
+	if(requestStatus == KErrNone)
+		{
+		INFO_PRINTF1(_L("GprsContextAttachTest OK \n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("GprsContextAttachTest Error\n"));
+		INFO_PRINTF2(_L("GprsContextAttachTest Error = %d\n"), requestStatus.Int());
+		}
+
+	}
+void  CTestLtsyPktTestStepBase::GprsContextDetachTest()
+	{
+	INFO_PRINTF1(_L("GprsContextDetachTest\n"));
+	TRequestStatus requestStatus = KErrNone;
+	iModel.PktSharedData().iPacket.Detach(requestStatus);
+	User::WaitForRequest(requestStatus);
+	if(requestStatus == KErrNone)
+		{
+		INFO_PRINTF1(_L("GprsContextDetachTest OK \n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("GprsContextDetachTest Error\n"));
+		INFO_PRINTF2(_L("GprsContextDetachTest Error = %d\n"), requestStatus.Int());
+		}
+
+	}
+void  CTestLtsyPktTestStepBase::DisplayStaticCapabilities()
+	{
+	// Static Capabilities
+	TRequestStatus returnStatus = KErrNone;
+	returnStatus = iModel.PktSharedData().iPacket.GetStaticCaps(iModel.PktSharedData().iStaticCaps, RPacketContext::EPdpTypeCDPD);
+	INFO_PRINTF2(_L("RPacketService::GetStaticCaps() ret = %d\n"), returnStatus.Int());
+	INFO_PRINTF2(_L("Static Caps = %d\n"), iModel.PktSharedData().iStaticCaps);
+	INFO_PRINTF2(_L("Static Caps = %xH\n"), iModel.PktSharedData().iStaticCaps);
+	}
+void  CTestLtsyPktTestStepBase::DisplayDynamicCapabilities()
+	{
+	// Dynamic Capabilities
+	TRequestStatus returnStatus = KErrNone;
+	returnStatus = iModel.PktSharedData().iPacket.GetDynamicCaps(iModel.PktSharedData().iDynamicCaps);
+	INFO_PRINTF2(_L("RPacketService::GetDynamicCaps() ret = %d\n"), returnStatus.Int());
+	INFO_PRINTF2(_L("Dynamic Caps = %d\n"), iModel.PktSharedData().iDynamicCaps);
+	INFO_PRINTF2(_L("Dynamic Caps = %xH\n"), iModel.PktSharedData().iDynamicCaps);
+	}
+
+void  CTestLtsyPktTestStepBase::GprsGetDefaultContextParamsTest()
+	{
+	TRequestStatus reqStatusContextParams = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig01;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg01(contextConfig01);
+	INFO_PRINTF1(_L("RPacketContext::GetDefaultContextParams() invoked...\n"));
+	iModel.PktSharedData().iPacket.GetDefaultContextParams(reqStatusContextParams, contextConfigPckg01);
+	User::WaitForRequest(reqStatusContextParams);
+	if(reqStatusContextParams == KErrNone)
+		{
+		INFO_PRINTF1(_L("RPacketContext::GetDefaultContextParams() complete\n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("RPacketContext::GetDefaultContextParams() Error\n"));
+		INFO_PRINTF2(_L("RPacketService::GprsgetDefaultContextParamsTest() completed %d\n"), reqStatusContextParams.Int());
+		}
+	}
+void  CTestLtsyPktTestStepBase::GprsSetDefaultContextParamsTest()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextParams = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig02;
+	//contextConfig2.iServiceOption = RPacketContext::KLowSpeedData;
+	contextConfig02.iPdpType  = RPacketContext::EPdpTypeIPv6;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg02(contextConfig02);
+	INFO_PRINTF1(_L("RPacketContext::SetDefaultContextParams() invoked...\n"));
+	iModel.PktSharedData().iPacket.SetDefaultContextParams(reqStatusContextParams, contextConfigPckg02);
+	User::WaitForRequest(reqStatusContextParams);
+	if(reqStatusContextParams == KErrNone)
+		{
+		INFO_PRINTF1(_L("RPacketContext::GprsContextSetConfigTest() complete\n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("RPacketContext::GprsContextSetConfigTest() Error\n"));
+		INFO_PRINTF2(_L("RPacketService::GprsSetDefaultContextParamsTest() completed %d\n"), reqStatusContextParams.Int());
+		}
+	}
+void  CTestLtsyPktTestStepBase::GprsContextActivateTest()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketContext::Activate() invoked...\n"));
+	iModel.PktSharedData().iContext1.Activate(requestStatus);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::Activate() completed %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsContextDeactivateTest()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketContext::Deactivate() invoked...\n"));
+	iModel.PktSharedData().iContext1.Deactivate(requestStatus);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::Deactivate() completed %d\n"), requestStatus.Int());
+	}
+
+void CTestLtsyPktTestStepBase::GprsContextSetConfigTest()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig2;
+	//contextConfig2.iServiceOption = RPacketContext::KLowSpeedData;
+	contextConfig2.iPdpType  = RPacketContext::EPdpTypeIPv6;
+	contextConfig2.iAccessPointName = KName;
+	//contextConfig2.iPdpAddress = ;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg2(contextConfig2);
+	INFO_PRINTF1(_L("RPacketContext::SetConfig() invoked...\n"));
+	iModel.PktSharedData().iContext1.SetConfig(reqStatusContextConfig, contextConfigPckg2);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig() complete = %d\n"), reqStatusContextConfig.Int());
+	}
+
+void CTestLtsyPktTestStepBase::GprsContextGetConfigTest()
+	{
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig3;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg3(contextConfig3);
+	INFO_PRINTF1(_L("RPacketContext::GetConfig() invoked...\n"));
+	iModel.PktSharedData().iContext1.GetConfig(reqStatusContextConfig, contextConfigPckg3);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::GetConfig() complete = %d\n"), reqStatusContextConfig.Int());
+	contextConfig3 = contextConfigPckg3();
+	}
+void CTestLtsyPktTestStepBase::NotificationContextAddedCancel()
+	{
+	TName contextAddedContextId;
+	TRequestStatus reqStatusContextAdded = KErrNone;
+	INFO_PRINTF1(_L("Test Notify Context Added Cancel\n"));
+	iModel.PktSharedData().iPacket.NotifyContextAdded(reqStatusContextAdded, contextAddedContextId);
+	iModel.PktSharedData().iPacket.CancelAsyncRequest(EPacketNotifyContextAdded);
+	User::WaitForRequest(reqStatusContextAdded);
+	if (reqStatusContextAdded == KErrCancel)
+		{
+		INFO_PRINTF1(_L("Notify Context Added is KErrCancel\n"));
+		}
+	else 
+		{
+		INFO_PRINTF1(_L("Error - Notify Context Added status\n"));
+		INFO_PRINTF2(_L("Error - Notify Context Added status = %d\n"), reqStatusContextAdded.Int());
+		}
+	}
+void CTestLtsyPktTestStepBase::NotificationContextAdded()
+	{
+	TName contextAddedContextId;
+	TRequestStatus reqStatusContextAdded = KErrNone;
+	// Notify Context Added
+	reqStatusContextAdded = KErrNone;
+	contextAddedContextId = _L("ABCDEFGHIJKLMNOP");
+	iModel.PktSharedData().iPacket.NotifyContextAdded(reqStatusContextAdded, contextAddedContextId);
+	if (reqStatusContextAdded == KRequestPending)
+		{
+		INFO_PRINTF1(_L("Notify Context Added is KRequestPending\n"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Notify Context Added request status\n"));
+		INFO_PRINTF2(_L("Error - Notify Context Added status = %d\n"), reqStatusContextAdded.Int());
+		}
+	}
+void CTestLtsyPktTestStepBase::OpenNewContext()
+	{
+	TInt returnStatus;
+	// check if the slot is free to open
+	if (NULL != iModel.PktSharedData().iContext1.SubSessionHandle())
+		{
+		ERR_PRINTF1(_L("Can't open the packet context before it's closed, aborting..."));
+		}
+	else
+		{
+	    returnStatus = iModel.PktSharedData().iContext1.OpenNewContext(iModel.PktSharedData().iPacket, iModel.PktSharedData().iContextName);
+		if (KErrNone != returnStatus)
+			{
+			INFO_PRINTF2(_L("RPacketContext::OpenNewContext() ret = %d\n"), returnStatus);
+			}
+	    INFO_PRINTF2(_L("RPacketContext::OpenNewContext() ret = %d\n"), returnStatus);
+	    INFO_PRINTF2(_L("Context Name = %S\n"), &iModel.PktSharedData().iContextName);
+		}
+	}
+void CTestLtsyPktTestStepBase::OpenExistingContext()
+	{
+	// Open an existing context
+	TInt returnStatus;
+	returnStatus = iModel.PktSharedData().iContext3.OpenExistingContext(iModel.PktSharedData().iPacket, iModel.PktSharedData().iContextName);
+	INFO_PRINTF2(_L("RPacketContext::OpenExistingContext() ret = %d\n"), returnStatus);
+	INFO_PRINTF2(_L("Context3 Name = %S\n"), &iModel.PktSharedData().iContextName);
+	}
+void CTestLtsyPktTestStepBase::OpenContextUsingUnknownName()
+
+{
+	// Attempt to open a Context using an unknown name
+	TInt returnStatus;
+	TName bogusContextName;
+	bogusContextName.Append(_L("Context"));
+	bogusContextName.AppendNum(10);
+	returnStatus = iModel.PktSharedData().iContext2.OpenExistingContext(iModel.PktSharedData().iPacket, bogusContextName);
+	INFO_PRINTF2(_L("RPacketContext::OpenExistingContext() returnStatus = %d\n"), returnStatus);
+}
+void CTestLtsyPktTestStepBase::CloseExistContext()
+	{
+	// Close Exist Context
+	User::After(1000000);
+	INFO_PRINTF1(_L("CloseExistContext() invoked...\n"));
+	iModel.PktSharedData().iContext1.Close();
+	INFO_PRINTF1(_L("CloseExistContext() OK...\n"));
+	}
+void CTestLtsyPktTestStepBase::GprsInitialiseContext()
+	{
+	TRequestStatus requestStatusInit = KErrNone;
+	INFO_PRINTF1(_L("RPacketContext::InitialiseContext() invoked...\n"));
+    RPacketContext::TDataChannelV2 dataChannel;
+    TPckg<RPacketContext::TDataChannelV2> dataChannelPckg(dataChannel);
+	//iContext1.LoanCommPort(requestStatusLoanCommPort, commPort);
+    iModel.PktSharedData().iContext1.InitialiseContext(requestStatusInit,dataChannelPckg);
+	User::WaitForRequest(requestStatusInit);
+	INFO_PRINTF2(_L("RPacketContext::InitialiseContext() completed %d \n"), requestStatusInit.Int());
+	}
+
+void CTestLtsyPktTestStepBase::NotificationContextStatusChangeCancel()
+	{
+	// cancel the context status change notification request
+	TRequestStatus requestStatusContextStatusChange;
+	INFO_PRINTF1(_L("RPacketContext::NotifyStatusChangeCancel() invoked...\n"));
+	iModel.PktSharedData().iContext1.CancelAsyncRequest(EPacketContextNotifyStatusChange);
+	User::WaitForRequest(requestStatusContextStatusChange);
+	if (requestStatusContextStatusChange == KErrCancel)
+		{
+		INFO_PRINTF1(_L("Notify Context Status Change is KErrCancel\n"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Error - Notify Context Status Change status  = %d\n"), requestStatusContextStatusChange.Int());
+		}
+	}
+
+void CTestLtsyPktTestStepBase::NotificationContextStatusChange()
+	{
+	// request notification when context status changes
+	INFO_PRINTF1(_L("RPacketContext::NotifyStatusChange() invoked...\n"));
+	TRequestStatus requestStatusContextStatusChange;
+	RPacketContext::TContextStatus newContextStatus;
+	iModel.PktSharedData().iContext1.NotifyStatusChange(requestStatusContextStatusChange, newContextStatus);
+	if (requestStatusContextStatusChange == KErrNone)
+		{
+		INFO_PRINTF1(_L("Context Status Changed\n"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Error - Notify Context Status Change status  = %d\n"), requestStatusContextStatusChange.Int());
+		}
+	}
+void CTestLtsyPktTestStepBase::OpenNewContextQos()
+	{
+	// Create QoS
+	TInt returnStatus;
+	INFO_PRINTF1(_L("OpenNewQoS() invoked...\n"));
+	returnStatus = iModel.PktSharedData().iQoS.OpenNewQoS(iModel.PktSharedData().iContext1, iModel.PktSharedData().iQoSName);
+	INFO_PRINTF2(_L("RPacketQoS::OpenNewQoS() ret = %d\n"), returnStatus);
+	INFO_PRINTF2(_L("Context Name = %S\n"), &iModel.PktSharedData().iQoSName);
+	}
+void CTestLtsyPktTestStepBase::CloseExistContextQos()
+	{
+	// Close QoS
+	INFO_PRINTF1(_L("CloseExistContextQos() invoked...\n"));
+	iModel.PktSharedData().iQoS.Close();
+	User::After(1000000);
+	INFO_PRINTF1(_L("CloseExistContextQos() OK...\n"));
+	}
+void CTestLtsyPktTestStepBase::GprsContextDeleteTest()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("GprsContextDeleteTest() invoked...\n"));
+	iModel.PktSharedData().iContext1.Delete(requestStatus);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketQoS::OpenNewQoS() ret = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked...\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput200000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput200000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	}
+void  CTestLtsyPktTestStepBase::GprsGetQoSProfileTest()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::GetProfileParameters() invoked...\n"));
+	TPckg<RPacketQoS::TQoSGPRSNegotiated> qosNegotiatedPckg(iModel.PktSharedData().iQoSNegotiated);   // pack
+	iModel.PktSharedData().iQoS.GetProfileParameters(requestStatus, qosNegotiatedPckg);
+	User::WaitForRequest(requestStatus);
+	// iQoSNegotiated = qosNegotiatedPckg();   // unpack necessary ???
+	INFO_PRINTF2(_L("    MinPrecedence       = %d\n"), iModel.PktSharedData().iQoSRequested.iMinPrecedence);
+	INFO_PRINTF2(_L("    ReqPrecedence           = %d\n"), iModel.PktSharedData().iQoSRequested.iReqPrecedence);
+	INFO_PRINTF2(_L("    ReqDelay           = %d\n"), iModel.PktSharedData().iQoSRequested.iReqDelay);
+	INFO_PRINTF2(_L("    MinDelay        = %d\n"), iModel.PktSharedData().iQoSRequested.iMinDelay);
+	INFO_PRINTF2(_L("    ReqReliability      = %d\n"), iModel.PktSharedData().iQoSRequested.iReqReliability);
+	INFO_PRINTF2(_L("    MinReliability = %d\n"), iModel.PktSharedData().iQoSRequested.iMinReliability);
+	INFO_PRINTF2(_L("    ReqPeakThroughput = %d\n"), iModel.PktSharedData().iQoSRequested.iReqPeakThroughput);
+	INFO_PRINTF2(_L("    MinPeakThroughput      = %d\n"), iModel.PktSharedData().iQoSRequested.iMinPeakThroughput);
+	INFO_PRINTF2(_L("    ReqMeanThroughput      = %d\n"), iModel.PktSharedData().iQoSRequested.iReqMeanThroughput);
+	INFO_PRINTF2(_L("    MinMeanThroughput      = %d\n"), iModel.PktSharedData().iQoSRequested.iMinMeanThroughput);
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest1()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.1..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EPriorityHighPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EPriorityHighPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass1;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass1;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass1;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass1;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput100;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput100;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest2()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.2..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EPriorityMediumPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass2;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass2;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput2000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput2000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput200;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput200;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest3()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.3..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EPriorityLowPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EPriorityLowPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass3;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass3;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass3;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass3;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput4000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput4000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput500;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput500;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest4()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.4..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass4;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass4;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput8000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput8000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput1000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest5()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.5..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass5;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass5;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput16000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput16000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput2000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput2000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest6()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.6..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput32000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput32000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput5000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput5000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest7()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.7..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput64000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput64000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput10000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput10000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest8()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.8..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput128000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput128000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput20000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput20000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest9()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.9..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput256000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput256000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput50000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput50000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest10()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.10..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput100000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput100000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest11()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.11..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput200000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput200000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest12()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.12..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput500000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput500000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest13()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.13..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput1000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput1000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest14()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.14..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput2000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput2000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest15()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.15..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput5000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput5000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest16()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.16..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput10000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput10000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest17()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.17..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput20000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput20000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest18()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.18..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput50000000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput50000000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest19()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.29..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+	iModel.PktSharedData().iQoSRequested.iMinPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqPrecedence = RPacketQoS::EUnspecifiedPrecedence;
+	iModel.PktSharedData().iQoSRequested.iReqDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iMinDelay = RPacketQoS::EDelayClass2;
+	iModel.PktSharedData().iQoSRequested.iReqReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iMinReliability = RPacketQoS::EReliabilityClass4;
+	iModel.PktSharedData().iQoSRequested.iReqPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iMinPeakThroughput = RPacketQoS::EPeakThroughput1000;
+	iModel.PktSharedData().iQoSRequested.iReqMeanThroughput = RPacketQoS::EMeanThroughput200000;
+	iModel.PktSharedData().iQoSRequested.iMinMeanThroughput = RPacketQoS::EMeanThroughput200000;
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void  CTestLtsyPktTestStepBase::GprsSetQoSProfileTest20()
+	{
+	TRequestStatus requestStatus = KErrNone;
+	INFO_PRINTF1(_L("RPacketQoS::SetProfileParameters() invoked.20..\n"));
+	INFO_PRINTF1(_L("  Use Assured Mode = True\n"));
+
+	TPckg<RPacketQoS::TQoSGPRSRequested> qosRequestedPckg(iModel.PktSharedData().iQoSRequested);   // pack
+	iModel.PktSharedData().iQoS.SetProfileParameters(requestStatus, qosRequestedPckg);
+	User::WaitForRequest(requestStatus);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), requestStatus.Int());
+	}
+void CTestLtsyPktTestStepBase::GprsContextSetConfigTest1()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig2;
+	//contextConfig2.iServiceOption = RPacketContext::KLowSpeedData;
+	contextConfig2.iPdpType  = RPacketContext::EPdpTypeIPv4;
+	contextConfig2.iAccessPointName = KName;
+	//contextConfig2.iPdpAddress = ;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg2(contextConfig2);
+	INFO_PRINTF1(_L("RPacketContext::SetConfig1() invoked...\n"));
+	iModel.PktSharedData().iContext1.SetConfig(reqStatusContextConfig, contextConfigPckg2);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig1() complete = %d\n"), reqStatusContextConfig.Int());
+	}
+void CTestLtsyPktTestStepBase::GprsContextSetConfigTest2()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig2;
+	//contextConfig2.iServiceOption = RPacketContext::KLowSpeedData;
+	contextConfig2.iPdpType  = RPacketContext::EPdpTypeIPv6;
+	contextConfig2.iAccessPointName = KName;
+	//contextConfig2.iPdpAddress = ;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg2(contextConfig2);
+	INFO_PRINTF1(_L("RPacketContext::SetConfig2() invoked...\n"));
+	iModel.PktSharedData().iContext1.SetConfig(reqStatusContextConfig, contextConfigPckg2);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig2() complete = %d\n"), reqStatusContextConfig.Int());
+	}
+void CTestLtsyPktTestStepBase::GprsContextSetConfigTest3()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig2;
+	//contextConfig2.iServiceOption = RPacketContext::KLowSpeedData;
+	contextConfig2.iPdpType  = RPacketContext::EPdpTypeX25;
+	contextConfig2.iAccessPointName = KName;
+	//contextConfig2.iPdpAddress = ;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg2(contextConfig2);
+	INFO_PRINTF1(_L("RPacketContext::SetConfig3() invoked...\n"));
+	iModel.PktSharedData().iContext1.SetConfig(reqStatusContextConfig, contextConfigPckg2);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig3() complete = %d\n"), reqStatusContextConfig.Int());
+	}
+void CTestLtsyPktTestStepBase::GprsContextSetConfigTest4()
+	{
+	// Set Context Config
+	TRequestStatus reqStatusContextConfig = KErrNone;
+	RPacketContext::TContextConfigGPRS contextConfig2;
+	contextConfig2.iAccessPointName = KName;
+	//contextConfig2.iPdpAddress = ;
+	TPckg<RPacketContext::TContextConfigGPRS> contextConfigPckg2(contextConfig2);
+	INFO_PRINTF1(_L("RPacketContext::SetConfig4() invoked...\n"));
+	iModel.PktSharedData().iContext1.SetConfig(reqStatusContextConfig, contextConfigPckg2);
+	User::WaitForRequest(reqStatusContextConfig);
+	INFO_PRINTF2(_L("RPacketContext::SetConfig4() complete = %d\n"), reqStatusContextConfig.Int());
+	}
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsyshareddata.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,193 @@
+// @file TestTelephonySharedData.cpp
+//
+// Copyright (c) 2004-2007 Symbian Software Ltd. All rights reserved.
+//
+// This contains implementation of Shared Data
+
+// User include
+#include "TestLtsySharedData.h"
+
+// Epoc include
+#include <etelmm.h>
+
+/*@{*/
+/// Literal constants
+_LIT(KSimTsyName,		"SIM");
+_LIT(KPhoneName,		"SimulatorPhone");
+_LIT(KDummyTsyName,		"DMM");
+_LIT(KDMobile,			"DMobile");
+/*@}*/
+
+CTestLtsySharedData* CTestLtsySharedData::NewL()
+	{
+	CTestLtsySharedData*	self=new(ELeave) CTestLtsySharedData();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestLtsySharedData::CTestLtsySharedData()
+:	CBase()
+,	iCallId(CTelephony::EISVCall1)
+,	iCallId1(CTelephony::EISVCall2)
+,	iTelServerConnected(EFalse)
+,	iPhoneModuleLoaded(EFalse)
+,	iPhoneOpened(EFalse)
+,	iPhoneInitialised(EFalse)
+,	iLineOpened(EFalse)
+,	iCallOpened(EFalse)
+,	iTelephony(NULL)
+,	iActiveScheduler(NULL)
+/*
+Constructor
+*/
+	{
+	}
+
+CTestLtsySharedData::~CTestLtsySharedData()
+/*
+Destructor
+*/
+	{
+	ClosePhone();
+	}
+
+void CTestLtsySharedData::ConstructL()
+	{
+	}
+
+TInt CTestLtsySharedData::OpenPhone(const TName& aTsyName, CTestStep& aTestStep)
+/*
+This function will load TSY depending on the comms db
+settings and opens the phone for making a call.
+
+@param - TSY to be loaded
+@param - CTestStep instance
+@leave - system wide error codes
+*/
+	{
+	ClosePhone();
+
+	// Load the phone module depending on the comms DB settings
+	TInt	ret=KErrNone;
+	if(aTsyName.Compare(KSimTsyName) == 0 )
+		{
+		iTSYName = aTsyName;
+		}
+	else if (aTsyName.Compare(KDummyTsyName) == 0 )
+		{
+		iTSYName = aTsyName;
+		}
+	else
+		{
+		ret=KErrArgument;
+		}
+
+	if ( ret==KErrNone )
+		{
+		ret = ReopenPhone();
+		}
+
+	if ( ret!=KErrNone )
+		{
+		aTestStep.ERR_PRINTF2(_L("Failed to open phone. Error code = %d"), ret);
+		aTestStep.SetTestStepResult(EFail);
+		}
+
+	return ret;
+	}
+
+TInt CTestLtsySharedData::ReopenPhone()
+/*
+This function will load TSY depending on the comms db
+settings and opens the phone for making a call.
+
+@param - CTestStep instance
+@leave - system wide error codes
+*/
+	{
+	TRAPD(ret, iActiveScheduler=new (ELeave) CActiveScheduler());
+
+	if ( ret==KErrNone )
+		{
+		CActiveScheduler::Install(iActiveScheduler);
+		ret=iServer.Connect();
+		}
+
+	if ( ret==KErrNone )
+		{
+		iTelServerConnected = ETrue;
+		ret=iServer.LoadPhoneModule(iTSYName);
+		}
+
+	if ( ret==KErrNone )
+		{
+		iPhoneModuleLoaded = ETrue;
+		TRAP(ret, iTelephony=CTelephony::NewL());
+		}
+
+	if ( ret==KErrNone )
+		{
+		// Open the phone
+		if ( iTSYName.Compare(KDummyTsyName) == 0 )
+			{
+			// Open the phone with the Dummy mobile phone name
+			ret = iMobilePhone.Open(iServer, KDMobile);
+			}
+		else
+			{
+			// open the phone with the simuplator phone
+			ret = iMobilePhone.Open(iServer, KPhoneName);
+			}
+		iPhoneOpened = ret==KErrNone;
+		}
+
+	return ret;
+	}
+
+void CTestLtsySharedData::ClosePhone()
+/*
+Closes the RTelServer, RmobilePhone,RMobileCall and RMobileLine opened sessions.
+*/
+	{
+	if ( iCallOpened )
+		{
+		iMobileCall.Close();
+		iCallOpened=EFalse;
+		}
+
+	if ( iLineOpened )
+		{
+		iMobileLine.Close();
+		iLineOpened=EFalse;
+		}
+
+	if ( iPhoneOpened )
+		{
+		iMobilePhone.Close();
+		iPhoneOpened = EFalse;
+		}
+
+	if ( iTelephony!= NULL )
+		{
+		delete iTelephony;
+		iTelephony=NULL;
+		}
+
+	if ( iPhoneModuleLoaded )
+		{
+		iServer.UnloadPhoneModule(iTSYName);
+		iPhoneModuleLoaded = EFalse;
+		}
+
+	if ( iTelServerConnected )
+		{
+		iServer.Close();
+		iTelServerConnected = EFalse;
+		}
+
+	CActiveScheduler::Install(NULL);
+	delete iActiveScheduler;
+	iActiveScheduler=NULL;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsack.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,86 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsack.h"
+
+CTestLtsySmsAck::CTestLtsySmsAck(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsAck::~CTestLtsySmsAck()
+	{
+	}
+
+CTestLtsySmsAck* CTestLtsySmsAck::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsAck* self = new (ELeave)CTestLtsySmsAck(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsAck* CTestLtsySmsAck::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsAck* self=CTestLtsySmsAck::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsAck::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsAck::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsAck::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsAck::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsAck::doTestStepL called"));
+	TRAPD(err,AckSmsStoredL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when ack sms store"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsAck::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsAck::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsAck::AckSmsStoredL()
+	{
+	TBool full(EFalse);
+	TRequestStatus status;
+	_LIT8(KNullAck,"00");
+	Sms().AckSmsStored(status,KNullAck(),full);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("AckSmsStored() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsatutil.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,221 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file testltsysmsatutil.cpp
+// This contains SmsAtUtil which is util for Sms At command
+// 
+
+// user include
+#include "testltsysmsatutil.h"
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAsciiToBinary
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt SmsAtUtil::ConvertAsciiToBinary(const TDesC8& aAscii,TDes8& aData)
+	{
+	aData.Zero();
+	TLex8 lex;
+	TUint8 val;
+	TInt ret;
+	const TInt count(aAscii.Length());
+	for(TInt i = 0;i < count;i = i + 2)
+		{
+		lex = aAscii.Mid(i,2);
+		ret = lex.Val(val,EHex);
+		if(ret != KErrNone)
+			{
+			return ret;
+			}
+		aData.Append(val);
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::AppendDataToAscii
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void SmsAtUtil::AppendDataToAscii(TDes8& aAscii,const TDesC8& aData)
+ 	{
+	const TInt count(aData.Length());
+//	__ASSERT_DEBUG((aAscii.MaxLength()-aAscii.MaxLength())<=(count*2),Panic(EATSmsUtilsDescriptorOverflow));
+
+	for(TInt i = 0; i < count; ++i)
+		{
+		AppendOctet(aData[i],aAscii);
+		}
+		
+//	__ASSERT_DEBUG(aAscii.Length()%2==0,Panic(EATSmsUtilsOddNumberOfSemiOctets));
+	}
+
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::IsAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TBool SmsAtUtil::IsAddressChar(TChar aChar)
+ 	{
+	if(aChar.IsDigit())
+		{
+		return ETrue;
+		}
+	if(aChar == TChar('*') ||
+	   aChar == TChar('#') ||
+	   aChar == TChar('a') ||
+	   aChar == TChar('b') ||
+	   aChar == TChar('c'))
+		{
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertNumberingPlan
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobileNPI SmsAtUtil::ConvertNumberingPlan(TInt aValue)
+	{
+	switch(aValue)
+		{
+		// The below 'magic numbers' come from the ETSI 03.40
+		// specification for Address Fields (section 9.1.2.5)
+	case 1:
+		return RMobilePhone::EIsdnNumberPlan;
+	case 3:
+		return RMobilePhone::EDataNumberPlan;
+	case 4:
+		return RMobilePhone::ETelexNumberPlan;
+	case 8:
+		return RMobilePhone::ENationalNumberPlan;
+	case 9:
+		return RMobilePhone::EPrivateNumberPlan;
+	default:
+		return RMobilePhone::EUnknownNumberingPlan;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertTypeOfNumber
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+RMobilePhone::TMobileTON SmsAtUtil::ConvertTypeOfNumber(TInt aValue) 
+	{
+	switch(aValue)
+		{
+		// The below 'magic numbers' come from the ETSI 03.40
+		// specification for Address Fields (section 9.1.2.5)
+	case 0:		
+		return RMobilePhone::EUnknownNumber;
+	case 1:		
+		return RMobilePhone::EInternationalNumber;
+	case 2:
+		return RMobilePhone::ENationalNumber;
+	case 3:
+		return RMobilePhone::ENetworkSpecificNumber;
+	case 4:
+		return RMobilePhone::ESubscriberNumber;
+	default:
+		return RMobilePhone::EUnknownNumber;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::AppendOctet
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void SmsAtUtil::AppendOctet(TInt aOctet,TDes8& aAscii)
+	{
+	// Ensure client has only passed us a octet (ie. low 8 bits only)
+	aOctet = aOctet&0xff;
+	// Append octet 
+	// (prefix '0' if the octets value only uses one digit as final 
+    //  octet coding must use two digits)
+	if(aOctet <= 0x0f)
+		{
+		aAscii.Append(TChar('0'));
+		}
+	
+	aAscii.AppendNum(aOctet,EHex);
+	}
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt SmsAtUtil::ConvertAddressChar(TChar aChar)
+ 	{
+	aChar.LowerCase();
+	if(aChar-TChar('0') <= 9)
+		{
+		// it should be digital number from 0~9
+		return aChar-TChar('0');
+		}
+	else if(aChar == TChar('*'))
+		{
+		return 10;
+		}
+	else if(aChar == TChar('#'))
+		{
+		return 11;
+		}
+	else if(aChar == TChar('a'))
+		{
+		return 12;
+		}
+	else if(aChar == TChar('b'))
+		{
+		return 13;
+		}
+	else if(aChar == TChar('c'))
+		{
+		return 14;
+		}
+	return 15;
+	}	
+
+// ---------------------------------------------------------------------------
+// SmsAtUtil::ConvertAddressChar
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TChar SmsAtUtil::ConvertAddressChar(TInt aBinary)
+	{
+	if(aBinary >= 0 && aBinary <= 9)
+		{
+		return TChar(aBinary) + TChar('0');  	// Assumes digit characters are one after each other
+		}
+	else if(aBinary == 10)
+		{
+		return TChar('*');
+		}
+	else if(aBinary == 11)
+		{
+		return TChar('#');
+		}
+	else if(aBinary == 12)
+		{
+		return TChar('a');
+		}
+	else if(aBinary == 13)
+		{
+		return TChar('b');
+		}
+	else if(aBinary == 14)
+		{
+		return TChar('c');
+		}
+	return TChar(0);		// This is the cloest I can find to a NULL char 
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsbase.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,158 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Implementation of the Class CTestLtsySmsBase
+// 
+//
+
+// user include
+#include "testltsysmsbase.h"
+#include "testltsysmsshareddata.h"
+
+//const define
+_LIT16(KPhoneTSY, "phonetsy");
+
+
+/**
+ * Constructor
+ * 
+ */
+CTestLtsySmsBase::CTestLtsySmsBase(CTestLtsyModel& aTestModel):
+                                   iModel(aTestModel)
+	{
+	}
+
+/**
+ * Destructor
+ *
+ */
+CTestLtsySmsBase::~CTestLtsySmsBase()
+	{
+
+	}
+
+TVerdict CTestLtsySmsBase::doTestStepPreambleL()
+	{
+	OpenPhoneL();
+	
+	if (TestStepResult() == EPass)
+		{
+		GetIndex();
+		}
+
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsBase::doTestStepPostambleL()
+	{
+	return TestStepResult();
+	}
+
+/**
+ * Get sms message number
+ * 
+ */
+void CTestLtsySmsBase::GetIndex()
+	{
+	iIndexNum = 0;
+	iStoreIndex = 0;
+	}
+
+void CTestLtsySmsBase::OpenPhoneL()
+	{
+	INFO_PRINTF1(_L("starting opne phone"));
+		
+	if (!iModel.SharedEnv().PhoneOpened())
+		{
+		iModel.SharedEnv().OpenPhoneL(KPhoneTSY);
+		}
+	}
+/**
+ * Open sms message
+ * 
+ */
+void CTestLtsySmsBase::OpenSmsL()
+	{
+	RMobileSmsMessaging smsMsg;
+	iModel.SmsSharedData().SmsMessagingArray().AppendL(smsMsg);
+    
+	iIndexNum = iModel.SmsSharedData().SmsMessagingArray().Count()-1;
+    
+	TInt ret( KErrNone );
+    ret = Sms().Open(iModel.SharedEnv().Phone());
+	if (KErrNone != ret)
+		{
+		INFO_PRINTF1(_L("Can't open the RMobileSmsMessaging service"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+/**
+ * Get the sms object
+ * 
+ */
+RMobileSmsMessaging& CTestLtsySmsBase::Sms()
+	{
+	return iModel.SmsSharedData().SmsMessagingArray()[iIndexNum];
+	}
+
+/**
+ * Get the sms store object
+ * 
+ */
+RMobileSmsStore& CTestLtsySmsBase::SmsStore()
+	{
+	return iModel.SmsSharedData().SmsStoreArray()[iStoreIndex];
+	}
+
+/**
+ * Open sms message store
+ * 
+ */
+void CTestLtsySmsBase::OpenSmsStoreL()
+	{
+	RMobileSmsStore smsStore;
+	iModel.SmsSharedData().SmsStoreArray().AppendL(smsStore);
+
+	iStoreIndex = iModel.SmsSharedData().SmsStoreArray().Count()-1;
+
+	TInt ret = SmsStore().Open(Sms(), KETelIccSmsStore);
+	if (KErrNone != ret)
+		{
+		ERR_PRINTF1(_L("Can't open the RMobileSmsStore service"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+/**
+ * Close sms
+ */
+void CTestLtsySmsBase::CloseSmsL()
+	{
+	Sms().Close();
+	iModel.SmsSharedData().SmsMessagingArray().Remove(iIndexNum);
+	iModel.SmsSharedData().SmsMessagingArray().Compress();
+	}
+
+/**
+ * Close sms store
+ * 
+ */
+void CTestLtsySmsBase::CloseSmsStoreL()
+	{
+	SmsStore().Close();
+	iModel.SmsSharedData().SmsStoreArray().Remove(iStoreIndex);
+	iModel.SmsSharedData().SmsStoreArray().Compress();
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmscontrolreceivesmscase1step.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,111 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Example CTestStep derived implementation
+// 
+//
+
+/**
+ @file CTestLtsySmsControlReceiveSmsCase1Step.cpp
+ @internalTechnology
+*/
+#include "testltsysmscontrolreceivesmscase1step.h"
+#include "te_integration_stltsysuitedefs.h"
+
+CCTestLtsySmsControlReceiveSmsCase1Step::~CCTestLtsySmsControlReceiveSmsCase1Step()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CCTestLtsySmsControlReceiveSmsCase1Step::CCTestLtsySmsControlReceiveSmsCase1Step()
+/**
+ * Constructor
+ */
+	{
+	// **MUST** call SetTestStepName in the constructor as the controlling
+	// framework uses the test step name immediately following construction to set
+	// up the step's unique logging ID.
+	SetTestStepName(KCTestLtsySmsControlReceiveSmsCase1Step);
+	}
+
+TVerdict CCTestLtsySmsControlReceiveSmsCase1Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Please delete this line or modify it. I am in Test Step Preamble in Class CCTestLtsySmsControlReceiveSmsCase1Step"));
+	// uncomment the following 3 lines if you have common pre setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPreambleL();
+	// if (TestStepResult()!=EPass)
+	//    return   TestStepResult();
+	// process some pre setting to this test step then set SetTestStepResult to EFail or Epass.
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+
+TVerdict CCTestLtsySmsControlReceiveSmsCase1Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	  if (TestStepResult()==EPass)
+		{
+
+		//  ************** Delete the Block, the block start ****************
+		INFO_PRINTF1(_L("Please modify me. I am in CCTestLtsySmsControlReceiveSmsCase1Step::doTestStepL() in the file CTestLtsySmsControlReceiveSmsCase1Step.cpp"));  //Block start
+		TPtrC TheString;
+		TBool TheBool;
+		TInt TheInt;
+		if(!GetStringFromConfig(ConfigSection(),KTe_integration_stltsySuiteString, TheString) ||
+			!GetBoolFromConfig(ConfigSection(),KTe_integration_stltsySuiteBool,TheBool) ||
+			!GetIntFromConfig(ConfigSection(),KTe_integration_stltsySuiteInt,TheInt)
+			)
+			{
+			// Leave if there's any error.
+			User::Leave(KErrNotFound);
+			}
+		else
+			{
+			INFO_PRINTF4(_L("The test step is %S, The Bool is %d, The int-value is %d"), &TheString, TheBool,TheInt); // Block end
+			}
+
+		//  **************   Block end ****************
+
+		SetTestStepResult(EPass);
+		}
+	  return TestStepResult();
+	}
+
+
+
+TVerdict CCTestLtsySmsControlReceiveSmsCase1Step::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Please delete this line or modify it. I am in Test Step Postamble in Class CCTestLtsySmsControlReceiveSmsCase1Step"));
+	// process something post setting to the test step
+	// uncomment the following line if you have common post setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPostambleL();
+	// uncomment the following line if you have post process or remove the following line if no post process
+	// SetTestStepResult(EPass);		// or EFail
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmscontrolsendsmscase1step.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,111 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Example CTestStep derived implementation
+// 
+//
+
+/**
+ @file CTestLtsySmsControlSendSmsCase1Step.cpp
+ @internalTechnology
+*/
+#include "testltsysmscontrolsendsmscase1step.h"
+#include "te_integration_stltsysuitedefs.h"
+
+CCTestLtsySmsControlSendSmsCase1Step::~CCTestLtsySmsControlSendSmsCase1Step()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CCTestLtsySmsControlSendSmsCase1Step::CCTestLtsySmsControlSendSmsCase1Step()
+/**
+ * Constructor
+ */
+	{
+	// **MUST** call SetTestStepName in the constructor as the controlling
+	// framework uses the test step name immediately following construction to set
+	// up the step's unique logging ID.
+	SetTestStepName(KCTestLtsySmsControlSendSmsCase1Step);
+	}
+
+TVerdict CCTestLtsySmsControlSendSmsCase1Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Please delete this line or modify it. I am in Test Step Preamble in Class CCTestLtsySmsControlSendSmsCase1Step"));
+	// uncomment the following 3 lines if you have common pre setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPreambleL();
+	// if (TestStepResult()!=EPass)
+	//    return   TestStepResult();
+	// process some pre setting to this test step then set SetTestStepResult to EFail or Epass.
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+
+TVerdict CCTestLtsySmsControlSendSmsCase1Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	  if (TestStepResult()==EPass)
+		{
+
+		//  ************** Delete the Block, the block start ****************
+		INFO_PRINTF1(_L("Please modify me. I am in CCTestLtsySmsControlSendSmsCase1Step::doTestStepL() in the file CTestLtsySmsControlSendSmsCase1Step.cpp"));  //Block start
+		TPtrC TheString;
+		TBool TheBool;
+		TInt TheInt;
+		if(!GetStringFromConfig(ConfigSection(),KTe_integration_stltsySuiteString, TheString) ||
+			!GetBoolFromConfig(ConfigSection(),KTe_integration_stltsySuiteBool,TheBool) ||
+			!GetIntFromConfig(ConfigSection(),KTe_integration_stltsySuiteInt,TheInt)
+			)
+			{
+			// Leave if there's any error.
+			User::Leave(KErrNotFound);
+			}
+		else
+			{
+			INFO_PRINTF4(_L("The test step is %S, The Bool is %d, The int-value is %d"), &TheString, TheBool,TheInt); // Block end
+			}
+
+		//  **************   Block end ****************
+
+		SetTestStepResult(EPass);
+		}
+	  return TestStepResult();
+	}
+
+
+
+TVerdict CCTestLtsySmsControlSendSmsCase1Step::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Please delete this line or modify it. I am in Test Step Postamble in Class CCTestLtsySmsControlSendSmsCase1Step"));
+	// process something post setting to the test step
+	// uncomment the following line if you have common post setting to all the test steps in there
+	// CTe_integration_stltsySuiteStepBase::doTestStepPostambleL();
+	// uncomment the following line if you have post process or remove the following line if no post process
+	// SetTestStepResult(EPass);		// or EFail
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdelete.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,84 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsdelete.h"
+
+CTestLtsySmsDelete::CTestLtsySmsDelete(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsDelete::~CTestLtsySmsDelete()
+	{
+	}
+
+CTestLtsySmsDelete* CTestLtsySmsDelete::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDelete* self = new (ELeave)CTestLtsySmsDelete(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsDelete* CTestLtsySmsDelete::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDelete* self=CTestLtsySmsDelete::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsDelete::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsDelete::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDelete::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDelete::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDelete::doTestStepL called"));
+	TInt index(6);
+	TRAPD(err,DeleteSmsL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDelete::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDelete::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsDelete::DeleteSmsL(TInt aIndex)
+	{
+	TRequestStatus status;
+	SmsStore().Delete(status,aIndex);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdeleteall.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,83 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsdeleteall.h"
+
+CTestLtsySmsDeleteAll::CTestLtsySmsDeleteAll(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsDeleteAll::~CTestLtsySmsDeleteAll()
+	{
+	}
+
+CTestLtsySmsDeleteAll* CTestLtsySmsDeleteAll::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDeleteAll* self = new (ELeave)CTestLtsySmsDeleteAll(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsDeleteAll* CTestLtsySmsDeleteAll::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDeleteAll* self=CTestLtsySmsDeleteAll::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsDeleteAll::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsDeleteAll::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteAll::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDeleteAll::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteAll::doTestStepL called"));
+	TRAPD(err,DeleteAllSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete all"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDeleteAll::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteAll::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsDeleteAll::DeleteAllSmsL()
+	{
+	TRequestStatus status;
+	SmsStore().DeleteAll( status );
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("DeleteAll() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsdeleteinvalidindex.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsdeleteinvalidindex.h"
+
+CTestLtsySmsDeleteInvalidIndex::CTestLtsySmsDeleteInvalidIndex(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsDeleteInvalidIndex::~CTestLtsySmsDeleteInvalidIndex()
+	{
+	}
+
+CTestLtsySmsDeleteInvalidIndex* CTestLtsySmsDeleteInvalidIndex::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDeleteInvalidIndex* self = new (ELeave)CTestLtsySmsDeleteInvalidIndex(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsDeleteInvalidIndex* CTestLtsySmsDeleteInvalidIndex::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsDeleteInvalidIndex* self=CTestLtsySmsDeleteInvalidIndex::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsDeleteInvalidIndex::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsDeleteInvalidIndex::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteInvalidIndex::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDeleteInvalidIndex::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteInvalidIndex::doTestStepL called"));
+	TInt index(0);
+	TRAPD(err,DeleteSmsL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	index = 46;
+	TRAPD(err1,DeleteSmsL(index));
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = -1;
+	TRAPD(err2,DeleteSmsL(index));
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err2);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsDeleteInvalidIndex::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsDeleteInvalidIndex::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsDeleteInvalidIndex::DeleteSmsL(TInt aIndex)
+	{
+	TRequestStatus status;
+	SmsStore().Delete(status,aIndex);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsnack.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,91 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsnack.h"
+#include "testltsysmsatutil.h"
+
+CTestLtsySmsNack::CTestLtsySmsNack(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsNack::~CTestLtsySmsNack()
+	{
+	}
+
+CTestLtsySmsNack* CTestLtsySmsNack::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsNack* self = new (ELeave)CTestLtsySmsNack(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsNack* CTestLtsySmsNack::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsNack* self=CTestLtsySmsNack::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsNack::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsNack::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsNack::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsNack::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsNack::doTestStepL called"));
+	TRAPD(err,NackSmsStoredL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when nack sms store"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsNack::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsNack::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsNack::NackSmsStoredL()
+	{
+	_LIT8(KTest,"9f05");
+	TBuf8<12> nackAsciiTest = KTest();
+	TBuf8<12> nackTest;
+	SmsAtUtil::ConvertAsciiToBinary(nackAsciiTest,nackTest);
+	TRequestStatus status;
+	TInt rpCause(2);  
+	
+	Sms().NackSmsStored(status,nackTest,rpCause);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("AckSmsStored() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsread.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsread.h"
+#include "testltsysmsatutil.h"
+
+CTestLtsySmsRead::CTestLtsySmsRead(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsRead::~CTestLtsySmsRead()
+	{
+	}
+
+CTestLtsySmsRead* CTestLtsySmsRead::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsRead* self = new (ELeave)CTestLtsySmsRead(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsRead* CTestLtsySmsRead::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsRead* self=CTestLtsySmsRead::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsRead::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsRead::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsRead::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsRead::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsRead::doTestStepL called"));
+	TInt index(6);
+	TRAPD(err,ReadSmsL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsRead::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsRead::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsRead::ReadSmsL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TPckg<RMobileSmsStore::TMobileGsmSmsEntryV1> pckgEntryV1(iEntryV1);
+	iEntryV1.iIndex = aIndex;		
+	SmsStore().Read(status, pckgEntryV1);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	TBuf<400>  msgAsciiData;
+	TBuf8<400> msgAscii; 
+	SmsAtUtil::AppendDataToAscii(msgAscii,iEntryV1.iMsgData);
+	msgAsciiData.Copy( msgAscii );
+	INFO_PRINTF4(_L("SmsStoreRead index=%d,status=%d,msgData=%S\n"),
+			        iEntryV1.iIndex,iEntryV1.iMsgStatus,&msgAsciiData);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsreadinvalidindex.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,109 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsreadinvalidindex.h"
+#include "testltsysmsatutil.h"
+
+CTestLtsySmsReadInvalidIndex::CTestLtsySmsReadInvalidIndex(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsReadInvalidIndex::~CTestLtsySmsReadInvalidIndex()
+	{
+	}
+
+CTestLtsySmsReadInvalidIndex* CTestLtsySmsReadInvalidIndex::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsReadInvalidIndex* self = new (ELeave)CTestLtsySmsReadInvalidIndex(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsReadInvalidIndex* CTestLtsySmsReadInvalidIndex::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsReadInvalidIndex* self=CTestLtsySmsReadInvalidIndex::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsReadInvalidIndex::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsReadInvalidIndex::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReadInvalidIndex::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsReadInvalidIndex::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReadInvalidIndex::doTestStepL called"));
+	TInt index(0);
+	TRAPD(err,ReadSmsL(index));
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = -2;
+	TRAPD(err1,ReadSmsL(index));
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	index = 50;
+	TRAPD(err2,ReadSmsL(index));
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when delete sms"),err2);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsReadInvalidIndex::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReadInvalidIndex::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsReadInvalidIndex::ReadSmsL(TInt aIndex)
+	{
+	TRequestStatus status;
+	TPckg<RMobileSmsStore::TMobileGsmSmsEntryV1> pckgEntryV1(iEntryV1);
+	iEntryV1.iIndex = aIndex;		
+	SmsStore().Read(status, pckgEntryV1);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Delete() request status = %d"),r);
+	TBuf<400>  msgAsciiData;
+	TBuf8<400> msgAscii; 
+	SmsAtUtil::AppendDataToAscii(msgAscii,iEntryV1.iMsgData);
+	msgAsciiData.Copy( msgAscii );
+	INFO_PRINTF4(_L("SmsStoreRead index=%d,status=%d,msgData=%S\n"),
+			        iEntryV1.iIndex,iEntryV1.iMsgStatus,&msgAsciiData);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsreceive.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,81 @@
+//
+// testltsysmsreceive.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+//user include
+#include "testltsysmsreceive.h"
+#include "smsatutil.h"
+
+
+CTestLtsySmsReceive::CTestLtsySmsReceive(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsReceive::~CTestLtsySmsReceive()
+	{
+	}
+
+CTestLtsySmsReceive* CTestLtsySmsReceive::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsReceive* self = new (ELeave)CTestLtsySmsReceive(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsReceive* CTestLtsySmsReceive::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsReceive* self=CTestLtsySmsReceive::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsReceive::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsReceive::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReceive::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsReceive::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReceive::doTestStepL called"));
+	TRAPD(err,ReceiveSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when receive sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsReceive::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsReceive::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsReceive::ReceiveSmsL()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 receiveAttr;
+	RMobileSmsMessaging::TMobileSmsReceiveAttributesV1Pckg receiveAttrPckg(receiveAttr);
+	Sms().ReceiveMessage(status, iRecvMsg, receiveAttrPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	TBuf<200>  outReceive;
+	outReceive.Copy(iRecvMsg);
+	INFO_PRINTF2(_L("Receiveing TPDU=%S"),&outReceive);
+	INFO_PRINTF2(_L("ReceiveMessage() request status = %d"),r);
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmssend.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,98 @@
+//
+// testltsysmssend.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+//user include
+#include "testltsysmssend.h"
+#include "testltsysmsatutil.h"
+//constant defination
+_LIT8(KSmsMessagingData,"11000D91683156211075f6000800064F60597D0021");
+_LIT(KSmsSCA,"8613800100500");  
+
+CTestLtsySmsSend::CTestLtsySmsSend(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsSend::~CTestLtsySmsSend()
+	{
+	}
+
+CTestLtsySmsSend* CTestLtsySmsSend::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsSend* self = new (ELeave)CTestLtsySmsSend(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsSend* CTestLtsySmsSend::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsSend* self=CTestLtsySmsSend::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsSend::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsSend::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSend::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsSend::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSend::doTestStepL called"));
+	TRAPD(err,SendSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when send message"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsSend::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSend::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsSend::SendSmsL()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1Pckg smsAttPckg(iSmsAttr);
+	TPtrC8 smsAsciiPdu(KSmsMessagingData);
+	TBuf8<200>  smsPdu;
+	SmsAtUtil::ConvertAsciiToBinary(smsAsciiPdu,smsPdu);
+	FillSmsAttibutes(KSmsSCA());
+	Sms().SendMessage(status,smsPdu,smsAttPckg);   
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("SendMessage() request status = %d"),r);
+	}
+
+void CTestLtsySmsSend::FillSmsAttibutes(const TDesC& aTelNumber)
+	{
+	_LIT8(KSubmit, "Submit");
+    iSmsAttr.iGsmServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber;
+    iSmsAttr.iGsmServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan;
+    iSmsAttr.iGsmServiceCentre.iTelNumber.Copy(aTelNumber);
+    iSmsAttr.iCdmaServiceCategory = 0;
+    iSmsAttr.iCdmaTeleservice = 0;
+    iSmsAttr.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+    iSmsAttr.iFlags = 0;
+    iSmsAttr.iMsgRef = 0;
+    iSmsAttr.iSubmitReport = KSubmit;
+    iSmsAttr.iMore = EFalse;
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmssendinvalidparam.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,176 @@
+//
+// testltsysmssendinvalidparam.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+//user include
+#include "testltsysmssendinvalidparam.h"
+#include "testltsysmsatutil.h"
+//constant defination
+_LIT8(KSmsMessagingData,"11000D91683156211075f6000800064F60597D0021");
+_LIT8(KSmsMessagingData1,"11000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F60597D002111000D91683156211075f6000800064F6059");
+_LIT(KSmsSCA,"8613800100500");  
+_LIT(KSmsSCA1,"8613800100500138001005001380010050013800100500138001005001380010050013800100500138001005001380010050");   
+_LIT(KSmsSCA2,"86138*#abc0W0"); 
+
+CTestLtsySmsSendInvalidParam::CTestLtsySmsSendInvalidParam(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsSendInvalidParam::~CTestLtsySmsSendInvalidParam()
+	{
+	}
+
+CTestLtsySmsSendInvalidParam* CTestLtsySmsSendInvalidParam::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsSendInvalidParam* self = new (ELeave)CTestLtsySmsSendInvalidParam(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsSendInvalidParam* CTestLtsySmsSendInvalidParam::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsSendInvalidParam* self=CTestLtsySmsSendInvalidParam::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsSendInvalidParam::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsSendInvalidParam::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSendInvalidParam::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsSendInvalidParam::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSendInvalidParam::doTestStepL called"));
+	TRAPD(err,SendSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when send message"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err1,SendSms1L());
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when send message"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err2,SendSmsL());
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when send message"),err2);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsSendInvalidParam::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsSendInvalidParam::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsSendInvalidParam::SendSmsL()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1Pckg smsAttPckg(iSmsAttr);
+	//There is too long data
+	TPtrC8 smsAsciiPdu(KSmsMessagingData1);
+	TBuf8<200>  smsPdu;
+	SmsAtUtil::ConvertAsciiToBinary(smsAsciiPdu,smsPdu);
+	FillSmsAttibutes(KSmsSCA());
+	Sms().SendMessage(status,smsPdu,smsAttPckg);   
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("SendMessage() request status = %d"),r);
+	}
+
+void CTestLtsySmsSendInvalidParam::FillSmsAttibutes(const TDesC& aTelNumber)
+	{
+	_LIT8(KSubmit, "Submit");
+    iSmsAttr.iGsmServiceCentre.iTypeOfNumber = RMobilePhone::ENationalNumber;
+    iSmsAttr.iGsmServiceCentre.iNumberPlan = RMobilePhone::ENationalNumberPlan; 
+    iSmsAttr.iGsmServiceCentre.iTelNumber.Copy(aTelNumber);
+    iSmsAttr.iCdmaServiceCategory = 0;
+    iSmsAttr.iCdmaTeleservice = 0;
+    iSmsAttr.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+    iSmsAttr.iFlags = 0;
+    iSmsAttr.iMsgRef = 0;
+    iSmsAttr.iSubmitReport = KSubmit;
+    iSmsAttr.iMore = EFalse;
+	}
+void CTestLtsySmsSendInvalidParam::SendSms1L()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1Pckg smsAttPckg(iSmsAttr);
+	TPtrC8 smsAsciiPdu(KSmsMessagingData);
+	TBuf8<200>  smsPdu;
+	SmsAtUtil::ConvertAsciiToBinary(smsAsciiPdu,smsPdu);
+	//There is too long sca
+	FillSmsAttibutes(KSmsSCA1());
+	Sms().SendMessage(status,smsPdu,smsAttPckg);   
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("SendMessage() request status = %d"),r);
+	}
+
+void CTestLtsySmsSendInvalidParam::FillSmsAttibutes1(const TDesC& aTelNumber)
+	{
+	_LIT8(KSubmit, "Submit");
+    iSmsAttr.iGsmServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber;
+    iSmsAttr.iGsmServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan;
+    iSmsAttr.iGsmServiceCentre.iTelNumber.Copy(aTelNumber);
+    iSmsAttr.iCdmaServiceCategory = 0;
+    iSmsAttr.iCdmaTeleservice = 0;
+    iSmsAttr.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+    iSmsAttr.iFlags = 0;
+    iSmsAttr.iMsgRef = 0;
+    iSmsAttr.iSubmitReport = KSubmit;
+    iSmsAttr.iMore = EFalse;
+	}
+void CTestLtsySmsSendInvalidParam::SendSms2L()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsSendAttributesV1Pckg smsAttPckg(iSmsAttr);
+	TPtrC8 smsAsciiPdu(KSmsMessagingData);
+	TBuf8<200>  smsPdu;
+	SmsAtUtil::ConvertAsciiToBinary(smsAsciiPdu,smsPdu);
+	//There is special sca
+	FillSmsAttibutes(KSmsSCA2());
+	Sms().SendMessage(status,smsPdu,smsAttPckg);   
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("SendMessage() request status = %d"),r);
+	}
+
+void CTestLtsySmsSendInvalidParam::FillSmsAttibutes2(const TDesC& aTelNumber)
+	{
+	_LIT8(KSubmit, "Submit");
+	//There is different TypeOfNumber and NumberPlan
+    iSmsAttr.iGsmServiceCentre.iTypeOfNumber = RMobilePhone::EUnknownNumber;
+    iSmsAttr.iGsmServiceCentre.iNumberPlan = RMobilePhone::EUnknownNumberingPlan;
+    iSmsAttr.iGsmServiceCentre.iTelNumber.Copy(aTelNumber);
+    iSmsAttr.iCdmaServiceCategory = 0;
+    iSmsAttr.iCdmaTeleservice = 0;
+    iSmsAttr.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+    iSmsAttr.iFlags = 0;
+    iSmsAttr.iMsgRef = 0;
+    iSmsAttr.iSubmitReport = KSubmit;
+    iSmsAttr.iMore = EFalse;
+	}
+
+//End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsshareddata.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,87 @@
+// TestTelephonySmsSharedData.cpp
+// Copyright (c) Symbian Software Ltd 2008. All rights reserved.
+//
+// Implementation of the Class CTestTelephonySmsSharedData
+
+// CTSY include
+
+// user include
+#include "TestLtsySmsSharedData.h"
+
+/**
+ * Constructor
+ * 
+ */
+CTestLtsySmsSharedData::CTestLtsySmsSharedData()
+	{
+	}
+
+/**
+ * Factory function to create a new CTestLtsySmsSharedData object
+ * 
+ */
+CTestLtsySmsSharedData*CTestLtsySmsSharedData:: NewL()
+	{
+	CTestLtsySmsSharedData* self = new (ELeave) CTestLtsySmsSharedData();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+ * Destructor
+ * 
+ */
+CTestLtsySmsSharedData::~CTestLtsySmsSharedData()
+	{
+	Reset();
+	}
+
+/**
+ * Delete all message, message store objects
+ * 
+ */
+void CTestLtsySmsSharedData::Reset()
+	{
+	for(TInt i = iMessaging.Count()-1; i >= 0; i--)
+		{
+		iMessaging[i].Close();
+		}
+	
+	for(TInt j = iSmsStore.Count()-1; j >= 0; j--)
+		{
+		iSmsStore[j].Close();
+		}
+	
+	iMessaging.Reset();
+	iSmsStore.Reset();
+	}
+
+/**
+ * ConstructL
+ * 
+ */
+void CTestLtsySmsSharedData::ConstructL()
+	{
+	}
+
+/**
+ * return sms array
+ * 
+ */
+RArray<RMobileSmsMessaging>& CTestLtsySmsSharedData::SmsMessagingArray()
+	{
+	return iMessaging;
+	}
+
+/**
+ * return sms store array
+ * 
+ */
+RArray<RMobileSmsStore>& CTestLtsySmsSharedData::SmsStoreArray()
+	{
+	return iSmsStore;
+	}
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsstore.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,150 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+// 
+
+//user include
+#include "testltsysmsstore.h"
+#include "testltsysmsatutil.h"
+
+CTestLtsySmsStore::CTestLtsySmsStore(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsStore::~CTestLtsySmsStore()
+	{
+	}
+
+CTestLtsySmsStore* CTestLtsySmsStore::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsStore* self = new (ELeave)CTestLtsySmsStore(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsStore* CTestLtsySmsStore::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsStore* self=CTestLtsySmsStore::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsStore::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsStore::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStore::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsStore::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStore::doTestStepL called"));
+	TRAPD(err,StoreSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when store sms"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsStore::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStore::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+void CTestLtsySmsStore::StoreSmsL()
+	{
+	ReceiveSmsL();
+	TRAPD(err,WriteSmsL());
+	if(err != KErrNone)
+		{
+		NackSmsStoredL();
+		}
+	else
+		{
+		AckSmsStoredL();
+		}
+	}
+
+void CTestLtsySmsStore::ReceiveSmsL()
+	{
+	TRequestStatus status;
+	RMobileSmsMessaging::TMobileSmsReceiveAttributesV1Pckg receiveAttrPckg(iReceiveAttr);
+	Sms().ReceiveMessage(status, iRecvMsg, receiveAttrPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	TBuf<200>  outReceive;
+	outReceive.Copy(iRecvMsg);
+	INFO_PRINTF2(_L("Receiveing TPDU=%S"),&outReceive);
+	INFO_PRINTF2(_L("ReceiveMessage() request status = %d"),r);
+	}
+
+void CTestLtsySmsStore::WriteSmsL()
+	{
+	TRequestStatus status;
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	smsWriteAddr.iTypeOfNumber = iReceiveAttr.iGsmServiceCentre.iTypeOfNumber;
+	smsWriteAddr.iNumberPlan = iReceiveAttr.iGsmServiceCentre.iNumberPlan;
+	smsWriteAddr.iTelNumber = iReceiveAttr.iGsmServiceCentre.iTelNumber;
+	
+	//For GsmTpdu
+    TBuf8<400>   writePduData; 
+    writePduData =  iRecvMsg;
+    FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+	}
+
+void CTestLtsySmsStore::AckSmsStoredL()
+	{
+	TBool full(EFalse);
+	TRequestStatus status;
+	_LIT8(KNullAck,"00");
+	Sms().AckSmsStored(status,KNullAck(),full);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("AckSmsStored() request status = %d"),r);
+	}
+
+void CTestLtsySmsStore::NackSmsStoredL()
+	{
+	TRequestStatus status;
+	TInt rpCause(2);  
+	
+	Sms().NackSmsStored(status,iRecvMsg,rpCause);
+	User::WaitForRequest(status);
+	TInt r=status.Int();
+	INFO_PRINTF2(_L("AckSmsStored() request status = %d"),r);
+	}
+
+void CTestLtsySmsStore::FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca)
+	{
+	TRequestStatus status;
+	RMobileSmsStore::TMobileGsmSmsEntryV1 smsEntry;
+	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsEntryPckg(smsEntry);
+	smsEntry.iMsgStatus=RMobileSmsStore::EStoredMessageUnsent;
+	smsEntry.iMsgData = aTpdu;
+	smsEntry.iServiceCentre = aMsgSca;
+	SmsStore().Write(status, smsEntryPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmsstoregetinfo.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,88 @@
+//
+// testltsygetmessagestoreinfo.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+#include "testltsysmsstoregetinfo.h"
+
+CTestLtsySmsStoreGetInfo::CTestLtsySmsStoreGetInfo(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsStoreGetInfo::~CTestLtsySmsStoreGetInfo()
+	{
+	}
+
+CTestLtsySmsStoreGetInfo* CTestLtsySmsStoreGetInfo::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsStoreGetInfo* self = new (ELeave)CTestLtsySmsStoreGetInfo(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsStoreGetInfo* CTestLtsySmsStoreGetInfo::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsStoreGetInfo* self=CTestLtsySmsStoreGetInfo::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsStoreGetInfo::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsStoreGetInfo::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStoreGetInfo::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsStoreGetInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStoreGetInfo::doTestStepL called"));
+	TRAPD(err,GetSmsStoreInfoL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when get sms store info"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsStoreGetInfo::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsStoreGetInfo::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsStoreGetInfo::GetSmsStoreInfoL()
+	{
+	TRequestStatus status;
+	TPckg<RMobilePhoneBookStore::TMobilePhoneBookInfoV1> smsInfoPckg(iInfo);
+	SmsStore().GetInfo(status,smsInfoPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("GetInfo() request status = %d"),r);
+	CheckSmsStoreInfoL();
+	INFO_PRINTF4(_L("GetInfo() MobileTypeName = %S, TotalEntries=%d,UsedEntries=%d\n"),&iInfo.iName,iInfo.iTotalEntries,iInfo.iUsedEntries );
+	}
+
+void CTestLtsySmsStoreGetInfo::CheckSmsStoreInfoL()
+	{
+	TBool matched = ETrue;
+	if (!iInfo.iName.Compare(KETelIccSmsStore) == 0)
+		{
+		INFO_PRINTF2(_L("The tel sms store name %s could not match with expect one"),&(iInfo.iName));
+		matched = EFalse;
+		}
+	if(!matched)
+		{
+		SetTestStepResult(EFail);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmswrite.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,99 @@
+//
+// testltsysmswrite.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+//user include
+#include "testltsysmswrite.h"
+#include "testltsysmsatutil.h"
+
+//constant defination
+_LIT8(KSmsMessagingData,"11000D91683156211075f6000800064F60597D0021");
+_LIT(KSmsSCA,"8613800100500");  
+
+CTestLtsySmsWrite::CTestLtsySmsWrite(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsWrite::~CTestLtsySmsWrite()
+	{
+	}
+
+CTestLtsySmsWrite* CTestLtsySmsWrite::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsWrite* self = new (ELeave)CTestLtsySmsWrite(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsWrite* CTestLtsySmsWrite::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsWrite* self=CTestLtsySmsWrite::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsWrite::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsWrite::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWrite::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsWrite::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWrite::doTestStepL called"));
+	TRAPD(err,WriteSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err);
+	    SetTestStepResult(EFail);
+		}
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsWrite::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWrite::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsWrite::WriteSmsL()
+	{
+
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	smsWriteAddr.iTypeOfNumber = RMobilePhone::EInternationalNumber;
+	smsWriteAddr.iNumberPlan = RMobilePhone::EIsdnNumberPlan;
+	smsWriteAddr.iTelNumber = KSmsSCA;
+	//For GsmTpdu
+	TBuf8<400>   writePduAscii(KSmsMessagingData);                        
+	TBuf8<400>   writePduData; 
+	writePduData.Zero();
+    SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+    FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+ 	}
+
+void CTestLtsySmsWrite::FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca)
+	{
+	TRequestStatus status;
+	RMobileSmsStore::TMobileGsmSmsEntryV1 smsEntry;
+	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsEntryPckg(smsEntry);
+	smsEntry.iMsgStatus=RMobileSmsStore::EStoredMessageUnsent;
+	smsEntry.iMsgData = aTpdu;
+	smsEntry.iServiceCentre = aMsgSca;
+	SmsStore().Write(status, smsEntryPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/src/testltsysmswriteinvalidparam.cpp	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,196 @@
+//
+// testltsysmswriteinvalidparam.cpp
+//
+// Copyright (c) Symbian Software Ltd. Your copyright notice.  All rights reserved.
+//
+
+//user include
+#include "testltsysmswriteinvalidparam.h"
+#include "testltsysmsatutil.h"
+
+//constant defination
+_LIT8(KSmsMessagingData,"11000D91683156211075f6000800064F60597D0021");
+_LIT(KSmsSCA,"8613800100500"); 
+_LIT(KSmsSCA1,"8613800100500138001005001380010050013800100500138001005001380010050013800100500138001005001380010050");  
+_LIT(KSmsSCA2,"86138*#abc0W0");
+
+CTestLtsySmsWriteInvalidParam::CTestLtsySmsWriteInvalidParam(CTestLtsyModel& aTestModel)
+	: CTestLtsySmsBase(aTestModel)
+	{
+
+	}
+
+CTestLtsySmsWriteInvalidParam::~CTestLtsySmsWriteInvalidParam()
+	{
+	}
+
+CTestLtsySmsWriteInvalidParam* CTestLtsySmsWriteInvalidParam::NewLC(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsWriteInvalidParam* self = new (ELeave)CTestLtsySmsWriteInvalidParam(aTestModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestLtsySmsWriteInvalidParam* CTestLtsySmsWriteInvalidParam::NewL(CTestLtsyModel& aTestModel)
+	{
+	CTestLtsySmsWriteInvalidParam* self=CTestLtsySmsWriteInvalidParam::NewLC(aTestModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestLtsySmsWriteInvalidParam::ConstructL()
+	{
+
+	}
+
+TVerdict CTestLtsySmsWriteInvalidParam::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWriteInvalidParam::doTestStepPreambleL called"));
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsWriteInvalidParam::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWriteInvalidParam::doTestStepL called"));
+	TRAPD(err,WriteSmsL());
+	if(err != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err1,WriteSms1L());
+	if(err1 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err1);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err2,WriteSms2L());
+	if(err2 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err2);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err3,WriteSms3L());
+	if(err3 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err3);
+	    SetTestStepResult(EFail);
+		}
+	
+	TRAPD(err4,WriteSms4L());
+	if(err4 != KErrNone)
+		{
+		INFO_PRINTF2(_L("The error was returned %d!! when write message"),err4);
+	    SetTestStepResult(EFail);
+		}
+	
+	return TestStepResult();
+	}
+
+TVerdict CTestLtsySmsWriteInvalidParam::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("CTestLtsySmsWriteInvalidParam::doTestStepPostambleL called"));
+	return TestStepResult();
+	}
+
+void CTestLtsySmsWriteInvalidParam::WriteSmsL()
+	{
+	//There is too long sca
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	    
+    smsWriteAddr.iTypeOfNumber = RMobilePhone::EInternationalNumber;
+  	smsWriteAddr.iNumberPlan = RMobilePhone::EIsdnNumberPlan;
+  	
+  	smsWriteAddr.iTelNumber = KSmsSCA1;
+  	TBuf8<400>   writePduAscii(KSmsMessagingData);                         //For GsmTpdu
+  	TBuf8<400>   writePduData; 
+  	writePduData.Zero();
+  	SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+  	FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+   	}
+
+void CTestLtsySmsWriteInvalidParam::WriteSms1L()
+	{
+	//different TypeOfNumber and NumberPlan
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	smsWriteAddr.iTypeOfNumber = RMobilePhone::ENetworkSpecificNumber;
+	smsWriteAddr.iNumberPlan = RMobilePhone::EDataNumberPlan;
+	
+	smsWriteAddr.iTelNumber = KSmsSCA;
+	 //For GsmTpdu
+	TBuf8<400>   writePduAscii(KSmsMessagingData);                        
+	TBuf8<400>   writePduData; 
+	writePduData.Zero();
+	SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+  	FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+	}
+
+void CTestLtsySmsWriteInvalidParam::WriteSms2L()
+	{
+	//different TypeOfNumber,NumberPlan and sca
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	smsWriteAddr.iTypeOfNumber = RMobilePhone::ESubscriberNumber;
+	smsWriteAddr.iNumberPlan = RMobilePhone::EPrivateNumberPlan;
+	
+	smsWriteAddr.iTelNumber = KSmsSCA2;
+	 //For GsmTpdu
+	TBuf8<400>   writePduAscii(KSmsMessagingData);                        
+	TBuf8<400>   writePduData; 
+	writePduData.Zero();
+	SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+  	FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+	}
+void CTestLtsySmsWriteInvalidParam::WriteSms3L()
+	{
+	//different TypeOfNumber and NumberPlan
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	
+	smsWriteAddr.iTypeOfNumber = RMobilePhone::ENationalNumber;
+	smsWriteAddr.iNumberPlan = RMobilePhone::ENationalNumberPlan;
+	
+	smsWriteAddr.iTelNumber = KSmsSCA;
+	 //For GsmTpdu
+	TBuf8<400>   writePduAscii(KSmsMessagingData);                        
+	TBuf8<400>   writePduData; 
+	writePduData.Zero();
+	
+	SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+  	FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+	}
+
+void CTestLtsySmsWriteInvalidParam::WriteSms4L()
+	{
+	//different TypeOfNumber and NumberPlan
+	RMobilePhone::TMobileAddress smsWriteAddr;
+	
+	smsWriteAddr.iTypeOfNumber = RMobilePhone::EUnknownNumber;
+	smsWriteAddr.iNumberPlan = RMobilePhone::RMobilePhone::EUnknownNumberingPlan;
+	
+	smsWriteAddr.iTelNumber = KSmsSCA;
+	 //For GsmTpdu
+	TBuf8<400>   writePduAscii(KSmsMessagingData);                        
+	TBuf8<400>   writePduData; 
+	writePduData.Zero();
+	SmsAtUtil::ConvertAsciiToBinary(writePduAscii,writePduData);
+  	FillWriteSmsAttibutesL(writePduData,smsWriteAddr);
+	}
+void CTestLtsySmsWriteInvalidParam::FillWriteSmsAttibutesL(TBuf8<400> aTpdu,RMobilePhone::TMobileAddress  aMsgSca)
+	{
+	TRequestStatus status;
+	RMobileSmsStore::TMobileGsmSmsEntryV1 smsEntry;
+	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsEntryPckg(smsEntry);
+	smsEntry.iMsgStatus=RMobileSmsStore::EStoredMessageUnsent;
+	smsEntry.iMsgData = aTpdu;
+	smsEntry.iServiceCentre = aMsgSca;
+	SmsStore().Write(status, smsEntryPckg);
+	User::WaitForRequest(status);
+	TInt r = status.Int();
+	INFO_PRINTF2(_L("Write() request status = %d"),r);
+	}
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsycallcontrol.ini	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,63 @@
+
+[Section0]
+TheString=CTestLtsyCallControlBase
+TheInt=0
+TheBool=False
+
+[Section1]
+TheString=CTestLtsySmsControlReceiveSmsCase1Step
+TheInt=1
+TheBool=True
+
+[Section2]
+TheString=CTestLtsySmsControlSendSmsCase1Step
+TheInt=2
+TheBool=False
+
+[Section50]
+TheString=CTestLtsyCallControlBase
+TheInt=0
+TheBool=False
+
+[Section51]
+TheString=CTestLtsyCallControlDialHangupCase
+TheInt=0
+TheBool=False
+
+
+[Section52]
+TheString=CTestLtsyCallControlNotifyIncomingCallCase1
+TheInt=0
+TheBool=False
+
+[Section53]
+TheString=CTestLtsyCallControlDialEmergencyCall
+TheInt=0
+TheBool=False
+
+[Section54]
+TheString=CTestLtsyCallControlCustomAPITerminateAllCalls
+TheInt=0
+TheBool=False
+
+[Section55]
+TheString=CTestLtsyCallControlPhoneTerminateAllCalls
+TheInt=0
+TheBool=False
+
+
+[Section56]
+TheString=CTestLtsyCallControlNotifyIncomingCallCase2
+TheInt=0
+TheBool=False
+
+[Section57]
+TheString=CTestLtsyCallControlNotifyIncomingCallCase3
+TheInt=0
+TheBool=False
+
+[Section58]
+TheString=CTestLtsyCallControlSwapCalls
+TheInt=0
+TheBool=False
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsycallcontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,114 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+
+PRINT ************************
+PRINT Start case 1
+PRINT Dial->Hold->Resume->Hold->Resume->Hang up
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlBase
+
+PRINT ************************
+PRINT Start case 2
+PRINT Dial->Hang up->Close
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialHangupCase
+
+PRINT ************************
+PRINT Start case 3
+PRINT Notify incoming call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase1
+
+PRINT ************************
+PRINT Start case 4
+PRINT Dial emergency call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialEmergencyCall
+
+PRINT ************************
+PRINT Start case 5
+PRINT Notify incoming call->Answer->RCustomAPI close all
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlCustomAPITerminateAllCalls
+
+
+PRINT ************************
+PRINT Start case 6
+PRINT Dial one->Dial two->Phone close all
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlPhoneTerminateAllCalls
+
+PRINT ************************
+PRINT Start case 7
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Notify incoming call 2
+PRINT Answer call 2
+PRINT Hangup call 1->Hangup call 2
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase2
+
+PRINT ************************
+PRINT Start case 8
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Hold 1
+PRINT Resume 1
+PRINT Hang up 1
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlNotifyIncomingCallCase3
+
+PRINT ************************
+PRINT Start case 9
+PRINT Notify incoming call 1
+PRINT Answer call 1
+PRINT Notify incoming call 2
+PRINT Answer call 2
+PRINT Swap call 1
+PRINT Swap call 2
+PRINT Hang up call 1
+PRINT Hang up call 2
+PRINT Close call 1
+PRINT Close call 2
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlSwapCalls
+
+PRINT ************************
+PRINT Start case 10
+PRINT Dial call number 11
+PRINT Close call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialBadCall
+
+PRINT ************************
+PRINT Start case 11
+PRINT Dial call self number 
+PRINT Close call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialSelfCall
+
+PRINT ************************
+PRINT Start case 12
+PRINT Dial normal call
+PRINT Dial emergency call
+PRINT ************************
+DELAY 2000
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsyCallControlDialEmergencyCallStopAllCall
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsysmscontrol.ini	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,15 @@
+
+[Section0]
+TheString=CTestLtsyCallControlDiallCase1Step
+TheInt=0
+TheBool=False
+
+[Section1]
+TheString=CTestLtsySmsControlReceiveSmsCase1Step
+TheInt=1
+TheBool=True
+
+[Section2]
+TheString=CTestLtsySmsControlSendSmsCase1Step
+TheInt=2
+TheBool=False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stllsysmscontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,33 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite  -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyOpenSms 
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyOpenSmsStore
+RUN_TEST_STEP 20 te_integration_stltsySuite CTestLtsySmsSend 
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyGetMessageStoreInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsStoreGetInfo
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsReceive
+delay 2000
+RUN_TEST_STEP 30 te_integration_stltsySuite CTestLtsySmsAck
+RUN_TEST_STEP 30 te_integration_stltsySuite CTestLtsySmsNack
+RUN_TEST_STEP 100 te_integration_stltsySuite CTestLtsySmsSendInvalidParam
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsRead
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsReadInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsDelete
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsDeleteInvalidIndex
+delay 5000
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsDeleteAll
+delay 5000
+RUN_TEST_STEP 200 te_integration_stltsySuite CTestLtsySmsStore
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsWrite
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsySmsWriteInvalidParam
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyCloseSms  
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyCloseSmsStore                             
+                             
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonebook.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,26 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite  -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+delay 5000
+RUN_TEST_STEP 120 te_integration_stltsySuite CTestLtsyPhbkGetStoreInfo
+delay 2000
+RUN_TEST_STEP 120 te_integration_stltsySuite CTestLtsyPhbkOpen 
+delay 10000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkDelete 
+delay 2000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkDeleteInvalidIndex
+delay 2000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkWrite      
+delay 1000
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkWriteInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkRead    
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkReadInvalidIndex
+RUN_TEST_STEP 10 te_integration_stltsySuite CTestLtsyPhbkClose                       
+                           
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonecontrol.ini	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,15 @@
+
+[Section0]
+TheString=CTestLtsyCallControlDiallCase1Step
+TheInt=0
+TheBool=False
+
+[Section1]
+TheString=CTestLtsySmsControlReceiveSmsCase1Step
+TheInt=1
+TheBool=True
+
+[Section2]
+TheString=CTestLtsySmsControlSendSmsCase1Step
+TheInt=2
+TheBool=False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsyphonecontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,22 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyOpenPhone
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetFdnStatus
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetNetworkRegistrationStatus
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneSingalCap
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneSingalStrength
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneBatteryCap
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyGetPhoneBatteryInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetCellInfo
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneGetPhoneID
+RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyPhoneSetNetworkSelectionSetting
+RUN_TEST_STEP 30 te_integration_stltsySuite TestLtsyPhoneSelectNetwork
+//RUN_TEST_STEP 10 te_integration_stltsySuite TestLtsyClosePhone
+
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsypktcontrol.ini	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,15 @@
+
+[Section0]
+TheString=CTestLtsyCallControlDiallCase1Step
+TheInt=0
+TheBool=False
+
+[Section1]
+TheString=CTestLtsySmsControlReceiveSmsCase1Step
+TheInt=1
+TheBool=True
+
+[Section2]
+TheString=CTestLtsySmsControlSendSmsCase1Step
+TheInt=2
+TheBool=False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsypktcontrol.script	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,41 @@
+//
+PRINT Run all te_integration_stltsy Suite Tests
+
+//
+LOAD_SUITE te_integration_stltsySuite -SharedData
+//
+//Please add or make change of you test steps, here is sample only:
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenPacket
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktAttachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktDetachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktAttachNetwork
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktNetworkRegistrationStatus
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetServiceStatust
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetStaticCapabilities
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetDynamicCapabilities
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktInitialiseContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktSetContextConfig
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktOpenContextQos
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktSetContextQoSProfile
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktActivateContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 150 te_integration_stltsySuite TestLtsyPktDeactivateContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktGetContextInfo
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktCloseContextQos
+RUN_TEST_STEP 100 te_integration_stltsySuite TestLtsyPktDeleteContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktCloseContext
+RUN_TEST_STEP 50 te_integration_stltsySuite TestLtsyPktClosePacket
+
+
+PRINT Complate_te_integration_stltsy_Tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/testdata/te_integration_stltsysuite.ini	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,15 @@
+
+[Section0]
+TheString=CTestLtsyCallControlDiallCase1Step
+TheInt=0
+TheBool=False
+
+[Section1]
+TheString=CTestLtsySmsControlReceiveSmsCase1Step
+TheInt=1
+TheBool=True
+
+[Section2]
+TheString=CTestLtsySmsControlSendSmsCase1Step
+TheInt=2
+TheBool=False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite.xml	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testSuite>
+  <name>te_integration_stltsySuite</name>
+  <testItems>
+    <test>te_integration_stltsyTest</test>
+  </testItems>
+  <testExecuteServers>
+    <server>te_integration_stltsySuite</server>
+  </testExecuteServers>
+</testSuite>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite/te_integration_stltsytest.xml	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testExecuteTest>
+  <name>te_integration_stltsyTest</name>
+  <timeout>10000</timeout>
+  <testScripts>
+    <script>
+      <hostPath>\te_integration_stltsy\scripts\te_integration_stltsySuite.script</hostPath>
+      <devicePath>c:\te_integration_stltsySuite.script</devicePath>
+    </script>
+  </testScripts>
+  <testServers>
+    <server>te_integration_stltsySuite</server>
+  </testServers>
+  <dependencies>
+    <data>
+      <hostPath>\te_integration_stltsy\testdata\te_integration_stltsySuite.ini</hostPath>
+      <devicePath>c:\testdata\configs\te_integration_stltsySuite.ini</devicePath>
+    </data>
+  </dependencies>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/attestltsy/integrationtest/xml/te_integration_stltsysuite/testexecuteservers/te_integration_stltsysuite.xml	Tue Feb 09 12:31:43 2010 +0000
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testExecuteServer>
+  <name>te_integration_stltsySuite</name>
+  <mmpFile>te_integration_stltsySuite.mmp</mmpFile>
+  <bldInfPath>\te_integration_stltsy\group\bld.inf</bldInfPath>
+</testExecuteServer>