From 2f415602c5fea51f6b2c7f9262c717972dcf1a59 Mon Sep 17 00:00:00 2001 From: pintar Date: Mon, 16 Feb 2009 17:08:41 +0000 Subject: [PATCH] --- AtsCommon/SipIsup_PICS.ttcn | 987 +++ AtsCommon/SipIsup_PIXITS.ttcn | 121 + AtsCommon/SipIsup_SS_TCFunctions.ttcn | 46 + AtsCommon/SipIsup_TestConfiguration.ttcn | 206 + AtsCommon/SipIsup_TestExecution.ttcn | 1627 ++++ AtsCommon/SipIsup_TestSystem.ttcn | 164 + AtsCommon/SipIsup_Testcases.ttcn | 67 + IsupAts/SipIsup_ISUP_Constants.ttcn | 1137 +++ IsupAts/SipIsup_ISUP_ModuleParams.ttcn | 721 ++ IsupAts/SipIsup_ISUP_MsgTemplates.ttcn | 1189 +++ IsupAts/SipIsup_ISUP_MsgTypes.ttcn | 971 +++ IsupAts/SipIsup_ISUP_ParamTemplates.ttcn | 3672 +++++++++ IsupAts/SipIsup_ISUP_ParamTypes.ttcn | 1777 +++++ IsupAts/SipIsup_ISUP_Steps.ttcn | 1857 +++++ IsupAts/SipIsup_ISUP_TCFunctions.ttcn | 61 + LibCommon/LibCommon_AbstractData.ttcn | 133 + LibCommon/LibCommon_BasicTypesAndValues.ttcn | 220 + LibCommon/LibCommon_DataStrings.ttcn | 100 + LibCommon/LibCommon_Sync.ttcn | 1003 +++ LibCommon/LibCommon_SyncExamples.ttcn | 794 ++ LibCommon/LibCommon_TextStrings.ttcn | 108 + LibCommon/LibCommon_Time.ttcn | 74 + LibCommon/LibCommon_VerdictControl.ttcn | 101 + LibIms/LibIms_Interface.ttcn | 44 + LibIms/LibIms_PIXITS.ttcn | 410 + LibIms/LibIms_SIPTypesAndValues.ttcn | 80 + LibIms/LibIms_Steps.ttcn | 859 +++ LibIms/LibIms_Templates.ttcn | 1775 +++++ LibSip/LibSip_Interface.ttcn | 175 + LibSip/LibSip_PIXITS.ttcn | 364 + LibSip/LibSip_SDPTypes.ttcn | 301 + LibSip/LibSip_SIPTypesAndValues.ttcn | 1658 ++++ LibSip/LibSip_Steps.ttcn | 3236 ++++++++ LibSip/LibSip_Templates.ttcn | 2323 ++++++ LibSip/LibSip_TemplatesDerived.ttcn | 19 + LibSip/LibSip_XMLTypes.ttcn | 645 ++ LibSip/LibSip_XMLTypes_GeneratedfromTTwb.ttcn | 583 ++ LibSip/XSDAUX.ttcn | 150 + ats/ttcn/AtsIms/AtsIms_Gm_TCFunctions.ttcn | 5774 -------------- ats/ttcn/AtsIms/AtsIms_Gm_Testcases.ttcn | 1308 ---- ats/ttcn/AtsIms/AtsIms_Ic_TCFunctions.ttcn | 2056 ----- ats/ttcn/AtsIms/AtsIms_Ic_Testcases.ttcn | 698 -- ats/ttcn/AtsIms/AtsIms_Isc_TCFunctions.ttcn | 3252 -------- ats/ttcn/AtsIms/AtsIms_Isc_Testcases.ttcn | 724 -- ats/ttcn/AtsIms/AtsIms_Mw_TCFunctions.ttcn | 6804 ----------------- ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn | 2416 ------ ats/ttcn/AtsIms/AtsIms_PICS.ttcn | 122 - ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn | 22 - ats/ttcn/AtsIms/AtsIms_TestCases.ttcn | 16 - ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn | 759 -- ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn | 11 - ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn | 63 - .../STFoutput/DTS_TISPAN-06035-2 V002f.doc | Bin 5934592 -> 0 bytes .../STFoutput/DTS_TISPAN-06035-3 V003.doc | Bin 2078720 -> 0 bytes model/ims.cqa | 3956 ---------- model/ims.qml | 4 - model/ims.qtr | Bin 13812736 -> 0 bytes model/ims.xmi | 1261 --- model/ims_main.cqa | 35 - model/ims_records.cqa | 396 - tp/tplan/IMS_CTS_1Gm.tplan | 1443 ---- tp/tplan/IMS_CTS_1Mw1Gm.tplan | 3518 --------- tp/tplan/IMS_CTS_Defs.tplan | 483 -- tp/tplan/IMS_CTS_ISC.tplan | 811 -- tp/tplan/IMS_CTS_Ic.tplan | 695 -- tp/tplan/LogicDefs.tplan | 10 - tp/tplan/UnitDefs.tplan | 16 - tp/tplan/UsefulDefs.tplan | 14 - 68 files changed, 29758 insertions(+), 36667 deletions(-) create mode 100644 AtsCommon/SipIsup_PICS.ttcn create mode 100644 AtsCommon/SipIsup_PIXITS.ttcn create mode 100644 AtsCommon/SipIsup_SS_TCFunctions.ttcn create mode 100644 AtsCommon/SipIsup_TestConfiguration.ttcn create mode 100644 AtsCommon/SipIsup_TestExecution.ttcn create mode 100644 AtsCommon/SipIsup_TestSystem.ttcn create mode 100644 AtsCommon/SipIsup_Testcases.ttcn create mode 100644 IsupAts/SipIsup_ISUP_Constants.ttcn create mode 100644 IsupAts/SipIsup_ISUP_ModuleParams.ttcn create mode 100644 IsupAts/SipIsup_ISUP_MsgTemplates.ttcn create mode 100644 IsupAts/SipIsup_ISUP_MsgTypes.ttcn create mode 100644 IsupAts/SipIsup_ISUP_ParamTemplates.ttcn create mode 100644 IsupAts/SipIsup_ISUP_ParamTypes.ttcn create mode 100644 IsupAts/SipIsup_ISUP_Steps.ttcn create mode 100644 IsupAts/SipIsup_ISUP_TCFunctions.ttcn create mode 100644 LibCommon/LibCommon_AbstractData.ttcn create mode 100644 LibCommon/LibCommon_BasicTypesAndValues.ttcn create mode 100644 LibCommon/LibCommon_DataStrings.ttcn create mode 100644 LibCommon/LibCommon_Sync.ttcn create mode 100644 LibCommon/LibCommon_SyncExamples.ttcn create mode 100644 LibCommon/LibCommon_TextStrings.ttcn create mode 100644 LibCommon/LibCommon_Time.ttcn create mode 100644 LibCommon/LibCommon_VerdictControl.ttcn create mode 100644 LibIms/LibIms_Interface.ttcn create mode 100644 LibIms/LibIms_PIXITS.ttcn create mode 100644 LibIms/LibIms_SIPTypesAndValues.ttcn create mode 100644 LibIms/LibIms_Steps.ttcn create mode 100644 LibIms/LibIms_Templates.ttcn create mode 100644 LibSip/LibSip_Interface.ttcn create mode 100644 LibSip/LibSip_PIXITS.ttcn create mode 100644 LibSip/LibSip_SDPTypes.ttcn create mode 100644 LibSip/LibSip_SIPTypesAndValues.ttcn create mode 100644 LibSip/LibSip_Steps.ttcn create mode 100644 LibSip/LibSip_Templates.ttcn create mode 100644 LibSip/LibSip_TemplatesDerived.ttcn create mode 100644 LibSip/LibSip_XMLTypes.ttcn create mode 100644 LibSip/LibSip_XMLTypes_GeneratedfromTTwb.ttcn create mode 100644 LibSip/XSDAUX.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Gm_TCFunctions.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Gm_Testcases.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Ic_TCFunctions.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Ic_Testcases.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Isc_TCFunctions.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Isc_Testcases.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Mw_TCFunctions.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_PICS.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_TestCases.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn delete mode 100644 ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn delete mode 100644 ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc delete mode 100644 ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc delete mode 100644 model/ims.cqa delete mode 100644 model/ims.qml delete mode 100644 model/ims.qtr delete mode 100644 model/ims.xmi delete mode 100644 model/ims_main.cqa delete mode 100644 model/ims_records.cqa delete mode 100644 tp/tplan/IMS_CTS_1Gm.tplan delete mode 100644 tp/tplan/IMS_CTS_1Mw1Gm.tplan delete mode 100644 tp/tplan/IMS_CTS_Defs.tplan delete mode 100644 tp/tplan/IMS_CTS_ISC.tplan delete mode 100644 tp/tplan/IMS_CTS_Ic.tplan delete mode 100644 tp/tplan/LogicDefs.tplan delete mode 100644 tp/tplan/UnitDefs.tplan delete mode 100644 tp/tplan/UsefulDefs.tplan diff --git a/AtsCommon/SipIsup_PICS.ttcn b/AtsCommon/SipIsup_PICS.ttcn new file mode 100644 index 0000000..019d9c4 --- /dev/null +++ b/AtsCommon/SipIsup_PICS.ttcn @@ -0,0 +1,987 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module contains the module parameters given in + * "SIP-ISUP Interworking between the IP Multimedia (IM) Core Network (CN) subsystem and Circuit Switched (CS) networks; PICS" + * ETSI ES 186 009-1 V0.0.3 + */ + +module SipIsup_PICS { +group PICS_Module_Parameters +{ + modulepar { +// Roles Table 1 + /* @desc Does the SUT implement Profile A? + ** @remark PICS Reference: Table 1, Item 1 + */ + boolean PC_IMPL_PROF_A; + + /* @desc Does the SUT implement Profile B? + ** @remark PICS Reference: Table 1, Item 2 + */ + boolean PC_IMPL_PROF_B; + + /* @desc Is the SUT connected to a BICC Network? + ** @remark PICS Reference: Table 1, Item 4 + */ + boolean PC_CONN_BICC; + + /* @desc Is the SUT connected to an ISUP Network? + ** @remark PICS Reference: Table 1, Item 5 + */ + boolean PC_CONN_ISUP; + + /* @desc Is the SUT connected with a �-law network? + ** @remark PICS Reference: Table 1, Item 6 + */ + boolean PC_CONN_MULAW; + + /* @desc Is the SUT connected with an outgoing international exchange? + ** @remark PICS Reference: Table 1, Item 7 + */ + boolean PC_CONN_OUT_INTERNAT; + + /* @desc Is the SUT connected with an incoming international exchange? + ** @remark PICS Reference: Table 1, Item 8 + */ + boolean PC_CONN_INC_INTERNAT; + + /* @desc Is the SUT an implementation according ETSI EN 383 001? + ** @remark PICS Reference: Table 1, Item 9 + */ + boolean PC_IMPL_383_001; + +// ForwardAddressSignalling Table 3 + /* @desc Does the SIP implementation use the en bloc operation in the forward address signalling (sending)? + ** @remark PICS Reference: Table 3, Item 1 + */ + boolean PC_USE_SIP_TX_ENBLOCK; + + /* @desc Does the SIP implementation use the overlap operation in the forward address signalling (sending)? + ** @remark PICS Reference: Table 3, Item 2 + */ + boolean PC_USE_SIP_TX_OVERLAP; + + /* @desc Does the SIP implementation support the overlap operation in the forward address signalling (receiving)? + ** @remark PICS Reference: Table 3, Item 4 + */ + boolean PC_SUPP_SIP_RX_OVERLAP; + + /* @desc Does the ISUP implementation support the overlap operation in the forward address signalling (receiving)? + ** @remark PICS Reference: Table 3, Item 8 + */ + boolean PC_SUPP_ISUP_RX_OVERLAP; + + +// RoleIndependentCapabilities Table 4 + /* @desc Does the SUT use the Continuity check procedures during call setup? + ** @remark PICS Reference: Table 4, Item 1 + */ + boolean PC_USE_CONT_CHK; + + /* @desc Does the SUT support the Continuity check procedures during call setup? + ** @remark PICS Reference: Table 4, Item 2 + */ + boolean PC_SUPP_CONT_CHK; + + /* @desc Does the SUT support internal resource reservations (preconditons used)? + ** @remark PICS Reference: Table 4, Item 4 + */ + boolean PC_SUPP_INT_RESOURCE; + + /* @desc Is the SUT able to support the reliability of provisional responses? + ** @remark PICS Reference: Table 4, Item 5 + */ + boolean PC_SUPP_RELY_PROV; + + /* @desc Does the SUT perform the automatic repeat attempt? + ** @remark PICS Reference: Table 4, Item 6 + */ + boolean PC_PERF_AUT_REPEAT; + + /* @desc Does the SUT send an ACM message after determination of end of address signalling? + ** @remark PICS Reference: Table 4, Item 9 + */ + boolean PC_SEND_ACM_EOA; + + /* @desc Does the SUT map the REL cause value into the reason header field of a SIP message (BYE, CANCEL or SIP final response)? + ** @remark PICS Reference: Table 4, Item 10 + */ + boolean PC_MAP_REL_CAUSE; + + /* @desc Does the SUT map a received reason header field included in a SIP message (BYE, CANCEL or SIP final response) to the ISUP cause value in the sent REL? + ** @remark PICS Reference: Table 4, Item 11 + */ + boolean PC_MAP_REASON_REL; + + /* @desc Does the SUT interwork the SIP Failure response to ISUP? + ** @remark PICS Reference: Table 4, Item 12 + */ + boolean PC_INTERW_SIP_FAIL; + + /* @desc Does the SUT derive the Display-name in the "From header field" from the "additional calling party number" or "calling party number"? + ** @remark PICS Reference: Table 4, Item 13 + */ + boolean PC_DERIV_DISPL_FROM; + + /* @desc Does the SUT control the exchange for the Suspend procedure? + ** @remark PICS Reference: Table 4, Item 14 + */ + boolean PC_CTRL_SUSP; + + /* @desc Does the SUT use internal resource reservations (preconditons used)? + ** @remark PICS Reference: Table 4, Item 15 + */ + boolean PC_USE_INT_RESOURCE; + + /* @desc Does the SUT satisfy the call using a new address provided in a Contact header field received in a 3xx response? + ** @remark PICS Reference: Table 4, Item 17 + */ + boolean PC_USE_NEW_ADDR_CONTACT; + + /* @desc Does the SUT refuse an offer with a 415 Unsupported media type response if more than one media typs are received in a SDP? + ** @remark PICS Reference: Table 4, Item 19 + */ + boolean PC_REFUSE_415_OFFER; + + /* @desc Does the SUT derive the Display-name in the "P-Asserted-Identity header field" from the "calling party number" or "additional calling party number"? + ** @remark PICS Reference: Table 4, Item 20 + */ + boolean PC_DERIV_DISP_P_ASS; + + /* @desc Does the SUT redirect to a new destination according the BICC/ISUP requirements if a REL is received with cause 23? + ** @remark PICS Reference: Table 4, Item 21 + */ + boolean PC_REDIR_CAUSE_23; + + /* @desc What is the value of PICS item 23 in table 4? + ** @remark PICS Reference: Table 4, Item 23 + */ + boolean PC_TABLE4_23; + + /* @desc What is the value of PICS item 23 in table 4? + ** @remark PICS Reference: Table 4, Item 24 + */ + boolean PC_TABLE4_24; + +// SupplementaryServiceMajorCapabilities Table 5 + /* @desc Does the SUT support the service Call Hold (HOLD)? + ** @remark PICS Reference: Table 5, Item 5 + */ + boolean PC_SUPP_HOLD; + + /* @desc Does the SUT support the service Terminal Portability (TP)? + ** @remark PICS Reference: Table 5, Item 6 + */ + boolean PC_SUPP_TP; + + /* @desc Does the SUT support the service Conference Call, add-on (CONF)? + ** @remark PICS Reference: Table 5, Item 10 + */ + boolean PC_SUPP_CONF; + + /* @desc Does the SUT support the Three-Party (3PTY) service? + ** @remark PICS Reference: Table 5, Item 18 + */ + boolean PC_SUPP_3PTY; + +// CLI Table 6 + /* @desc Does the SUT include a network provided E.164 calling party number if the P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN; address signal: network provided? + ** @remark PICS Reference: Table 6, Item 1 + */ + boolean PC_INCL_E164_P_ASS_NTWK; + + /* @desc Does the SUT include an addtional calling party number if a From header field has been received in the format "+"CC+NDC+SN; address signal: derived from the From header field? + ** @remark PICS Reference: Table 6, Item 3 + */ + boolean PC_INCL_ADD_CLD_FROM; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "presentation allowed" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 9 + */ + boolean PC_SEND_CLI_ALLOWED_NO_P; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "address not available" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 11 + */ + boolean PC_SEND_CLI_NOT_AVAIL_NO_P; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "resentation restricted by the network" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 12 + */ + boolean PC_SEND_CLI_RESTR_NTWK_NO_P; + +// HOLD Table 8 + /* @desc Does the SUT support that a party can put the other party on hold after alerting has commenced? + ** @remark PICS Reference: Table 8, Item 1 + */ + boolean PC_SUPP_HOLD_AFTER_ALERT; + + /* @desc Does the SUT support that a party can put the other party on hold after the calling user has provided all of the information necessary for processing the call? + ** @remark PICS Reference: Table 8, Item 2 + */ + boolean PC_SUPP_HOLD_NEC_INFO; + +// MCID Table 9 + /* @desc Does the SUT return an IRS with bit A of the MCID response indicator set to 0 "MCID not included", if the network does not support the MCID service? + ** @remark PICS Reference: Table 9, Item 1 + */ + boolean PC_RET_IRS_MCID_NOT; + +// UUS Table 11 + /* @desc Does the SUT understand an explicit user-to-user request? + ** @remark PICS Reference: Table 11, Item 1 + */ + boolean PC_IMPL_EXPL_USER_USER; + + /* @desc Does the SUT support the rejection procedure of an explicit service request or discarding of user-to-user information as described in 1.1.5.x.5.2/Q.737? + ** @remark PICS Reference: Table 11, Item 2 + */ + boolean PC_SUPP_REJ_UUI_Q737; + + /* @desc Does the SUT reject a user-to-user request service 3 not essential after call set-up using the FRJ message? + ** @remark PICS Reference: Table 11, Item 3 + */ + boolean PC_REJ_UUS3ESSENTIAL_FRJ; + +// ECT Table 12 + /* @desc Does the SUT return a LOP (response) message with the indication "insufficient information"? + ** @remark PICS Reference: Table 12, Item 1 + */ + boolean PC_RET_LOP_INSUFF; + } +} // endgroup PICS_Module_Parameters + + +group testCaseSelectionFunctions +{ + /* dummy selection function always returning 'true' */ + function f_selection_true() return boolean + { + return true + }// end function f_selection_true() + + /* Mnemonic selection reference: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + function f_selection_001() return boolean + { + return((not PC_SUPP_RELY_PROV) and PC_CONN_MULAW) + }// end function f_selection_001() + + /* Mnemonic selection reference: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + function f_selection_002() return boolean + { + return((not PC_USE_INT_RESOURCE) and PC_CONN_BICC) + }// end function f_selection_002() + + /* Mnemonic selection reference: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + function f_selection_003() return boolean + { + return((not PC_USE_INT_RESOURCE) and PC_CONN_ISUP) + }// end function f_selection_003() + + /* Mnemonic selection reference: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + function f_selection_004() return boolean + { + return((not PC_SUPP_INT_RESOURCE) and PC_CONN_MULAW) + }// end function f_selection_004() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( PICS 1/9 ) and ( PICS 4/23 ) */ + function f_selection_005() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_TABLE4_23) + }// end function f_selection_005() + + /* Mnemonic selection reference: not PICS 5/18 */ + function f_selection_006() return boolean + { + return(not PC_SUPP_3PTY) + }// end function f_selection_006() + + /* Mnemonic selection reference: ( not PICS 1/9 ) */ + function f_selection_007() return boolean + { + return(not PC_IMPL_383_001) + }// end function f_selection_007() + + /* Mnemonic selection reference: ( not PICS 11/2 ) */ + function f_selection_008() return boolean + { + return(not PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_008() + + /* Mnemonic selection reference: ( not PICS 3/4 ) */ + function f_selection_009() return boolean + { + return(not PC_SUPP_SIP_RX_OVERLAP) + }// end function f_selection_009() + + /* Mnemonic selection reference: ( not PICS 4/10 ) */ + function f_selection_010() return boolean + { + return(not PC_MAP_REL_CAUSE) + }// end function f_selection_010() + + /* Mnemonic selection reference: ( not PICS 4/15 ) and PICS 4/21 */ + function f_selection_011() return boolean + { + return((not PC_MAP_REL_CAUSE) and PC_REDIR_CAUSE_23) + }// end function f_selection_011() + + /* Mnemonic selection reference: ( not PICS 4/12 ) */ + function f_selection_012() return boolean + { + return(not PC_MAP_REASON_REL) + }// end function f_selection_012() + + /* Mnemonic selection reference: ( not PICS 4/12 ) */ + function f_selection_013() return boolean + { + return(not PC_INTERW_SIP_FAIL) + }// end function f_selection_013() + + /* Mnemonic selection reference: ( not PICS 4/13 ) */ + function f_selection_014() return boolean + { + return(not PC_DERIV_DISPL_FROM) + }// end function f_selection_014() + + /* Mnemonic selection reference: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + function f_selection_015() return boolean + { + return((not PC_DERIV_DISPL_FROM) and (not PC_DERIV_DISP_P_ASS)) + }// end function f_selection_015() + + /* Mnemonic selection reference: ( not PICS 4/13 ) and PICS 4/20 */ + function f_selection_016() return boolean + { + return((not PC_DERIV_DISPL_FROM) and PC_DERIV_DISP_P_ASS) + }// end function f_selection_016() + + /* Mnemonic selection reference: ( not PICS 4/150 ) */ + function f_selection_017() return boolean + { + return(not PC_USE_INT_RESOURCE) + }// end function f_selection_017() + + /* Mnemonic selection reference: ( not PICS 4/17 ) */ + function f_selection_018() return boolean + { + return(not PC_USE_NEW_ADDR_CONTACT) + }// end function f_selection_018() + + /* Mnemonic selection reference: ( not PICS 4/5 ) */ + function f_selection_019() return boolean + { + return(not PC_SUPP_RELY_PROV) + }// end function f_selection_019() + + /* Mnemonic selection reference: ( not PICS 9/1 ) */ + function f_selection_020() return boolean + { + return(not PC_RET_IRS_MCID_NOT) + }// end function f_selection_020() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + function f_selection_021() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_021() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + function f_selection_022() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_022() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_023() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_023() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + function f_selection_024() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_024() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 ) */ + function f_selection_025() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24)) + }// end function f_selection_025() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_026() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_026() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_027() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_027() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + function f_selection_028() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_028() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( ( not PICS 1/9 ) ) */ + function f_selection_029() return boolean + { + return(PC_IMPL_PROF_B and (not PC_IMPL_383_001)) + }// end function f_selection_029() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( PICS 1/9 ) and ( ( not PICS 4/23 ) ) */ + function f_selection_030() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and (not PC_TABLE4_23)) + }// end function f_selection_030() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/1 ) and ( PICS 4/9 ) */ + function f_selection_031() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_USE_SIP_TX_ENBLOCK and PC_SEND_ACM_EOA) + }// end function f_selection_031() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + function f_selection_032() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_032() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + function f_selection_033() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SEND_ACM_EOA) + }// end function f_selection_033() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 1/9 ) ) and ( PICS 4/9 ) */ + function f_selection_034() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_IMPL_383_001) and PC_SEND_ACM_EOA) + }// end function f_selection_034() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_035() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_035() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + function f_selection_036() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK and PC_SEND_ACM_EOA) + }// end function f_selection_036() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + function f_selection_037() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_037() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_038() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_038() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_039() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_039() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + function f_selection_040() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and PC_SUPP_CONT_CHK and PC_SEND_ACM_EOA) + }// end function f_selection_040() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 3/8) ) and ( PICS 4/2 ) */ + function f_selection_041() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_SUPP_ISUP_RX_OVERLAP and PC_SUPP_CONT_CHK) + }// end function f_selection_041() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + function f_selection_042() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_042() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( ( not PICS 1/7 ) ) */ + function f_selection_043() return boolean + { + return(PC_IMPL_383_001 and (not PC_CONN_OUT_INTERNAT)) + }// end function f_selection_043() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + function f_selection_044() return boolean + { + return(PC_IMPL_383_001 and (not PC_CONN_INC_INTERNAT)) + }// end function f_selection_044() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( PICS 1/7 ) */ + function f_selection_045() return boolean + { + return(PC_IMPL_383_001 and PC_CONN_OUT_INTERNAT) + }// end function f_selection_045() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( PICS 1/8 ) */ + function f_selection_046() return boolean + { + return(PC_IMPL_383_001 and PC_CONN_INC_INTERNAT) + }// end function f_selection_046() + + /* Mnemonic selection reference: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + function f_selection_047() return boolean + { + return(PC_USE_SIP_TX_ENBLOCK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_047() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 3/8 ) */ + function f_selection_048() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_ISUP_RX_OVERLAP) + }// end function f_selection_048() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 1/4 ) */ + function f_selection_049() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_CONN_BICC) + }// end function f_selection_049() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 1/5 ) */ + function f_selection_050() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_CONN_ISUP) + }// end function f_selection_050() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_051() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_051() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) ) */ + function f_selection_052() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_052() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + function f_selection_053() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_053() + + /* Mnemonic selection reference: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_054() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_054() + + /* Mnemonic selection reference: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + function f_selection_055() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_055() + + /* Mnemonic selection reference: ( PICS 3/4 ) and ( PICS 3/8 ) */ + function f_selection_056() return boolean + { + return(PC_SUPP_SIP_RX_OVERLAP and PC_SUPP_ISUP_RX_OVERLAP) + }// end function f_selection_056() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and ( not PICS 4/1 ) ) */ + function f_selection_057() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and (not PC_CONN_MULAW) and (not PC_USE_CONT_CHK)) + }// end function f_selection_057() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and PICS 4/1 ) */ + function f_selection_058() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_058() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + function f_selection_059() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_059() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + function f_selection_060() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_060() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + function f_selection_061() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and PC_USE_CONT_CHK) + }// end function f_selection_061() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + function f_selection_062() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_062() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + function f_selection_063() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_063() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 4/1 ) */ + function f_selection_064() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and PC_USE_CONT_CHK) + }// end function f_selection_064() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and ( not PICS 4/1 ) ) */ + function f_selection_065() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_MULAW and (not PC_USE_CONT_CHK)) + }// end function f_selection_065() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and PICS 4/1 ) */ + function f_selection_066() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_066() + + /* Mnemonic selection reference: ( PICS 4/5 ) and ( PICS 1/6 ) */ + function f_selection_067() return boolean + { + return(PC_SUPP_RELY_PROV and PC_CONN_MULAW) + }// end function f_selection_067() + + /* Mnemonic selection reference: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_068() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_068() + + /* Mnemonic selection reference: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + function f_selection_069() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_069() + + /* Mnemonic selection reference: ( PICS 5/6 ) and ( PICS 4/14 ) */ + function f_selection_070() return boolean + { + return(PC_SUPP_TP and PC_CTRL_SUSP) + }// end function f_selection_070() + + /* Mnemonic selection reference: ( PICS 8/1 ) and ( PICS 5/10 ) */ + function f_selection_071() return boolean + { + return(PC_SUPP_HOLD_AFTER_ALERT and PC_SUPP_CONF) + }// end function f_selection_071() + + /* Mnemonic selection reference: ( PICS 8/2 ) and ( PICS 5/10 ) */ + function f_selection_072() return boolean + { + return(PC_SUPP_HOLD_NEC_INFO and PC_SUPP_CONF) + }// end function f_selection_072() + + /* Mnemonic selection reference: not PICS 11/2 */ + function f_selection_073() return boolean + { + return(not PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_073() + + /* Mnemonic selection reference: NOT PICS 12/1 */ + function f_selection_074() return boolean + { + return(not PC_RET_LOP_INSUFF) + }// end function f_selection_074() + + /* Mnemonic selection reference: not PICS 5/10 */ + function f_selection_075() return boolean + { + return(not PC_SUPP_CONF) + }// end function f_selection_075() + + /* Mnemonic selection reference: ( PICS 1/1 ) and ( ( not PICS 4/24 ) ) */ + function f_selection_076() return boolean + { + return(PC_IMPL_PROF_A and (not PC_TABLE4_24)) + }// end function f_selection_076() + + /* Mnemonic selection reference: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + function f_selection_077() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24)) + }// end function f_selection_077() + + /* Mnemonic selection reference: PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) */ + function f_selection_078() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24)) + }// end function f_selection_078() + + /* Mnemonic selection reference: PICS 1/2 */ + function f_selection_079() return boolean + { + return(PC_IMPL_PROF_B) + }// end function f_selection_079() + + /* Mnemonic selection reference: PICS 1/2 and PICS 3/1 */ + function f_selection_080() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK) + }// end function f_selection_080() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 ) */ + function f_selection_081() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK) + }// end function f_selection_081() + + /* Mnemonic selection reference: PICS 1/2 and PICS 3/2 */ + function f_selection_082() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP) + }// end function f_selection_082() + + /* Mnemonic selection reference: PICS 1/9 */ + function f_selection_083() return boolean + { + return(PC_IMPL_383_001) + }// end function f_selection_083() + + /* Mnemonic selection reference: PICS 1/9 and ( not PICS 4/19 ) */ + function f_selection_084() return boolean + { + return(PC_IMPL_383_001 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_084() + + /* Mnemonic selection reference: PICS 1/9 and PICS 4/19 */ + function f_selection_085() return boolean + { + return(PC_IMPL_383_001 and PC_REFUSE_415_OFFER) + }// end function f_selection_085() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/1 and PICS 6/12 */ + function f_selection_086() return boolean + { + return(PC_IMPL_383_001 and PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_086() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/1 and PICS 6/3 and PICS 6/12 */ + function f_selection_087() return boolean + { + return(PC_IMPL_383_001 and PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_087() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/12 */ + function f_selection_088() return boolean + { + return(PC_IMPL_383_001 and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_088() + + /* Mnemonic selection reference: PICS 11/1 and PICS 11/2 */ + function f_selection_089() return boolean + { + return(PC_IMPL_EXPL_USER_USER and PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_089() + + /* Mnemonic selection reference: PICS 12/1 */ + function f_selection_090() return boolean + { + return(PC_RET_LOP_INSUFF) + }// end function f_selection_090() + + /* Mnemonic selection reference: PICS 3/1 */ + function f_selection_091() return boolean + { + return(PC_USE_SIP_TX_ENBLOCK) + }// end function f_selection_091() + + /* Mnemonic selection reference: PICS 3/2 */ + function f_selection_092() return boolean + { + return(PC_USE_SIP_TX_OVERLAP) + }// end function f_selection_092() + + /* Mnemonic selection reference: PICS 3/4 */ + function f_selection_093() return boolean + { + return(PC_SUPP_SIP_RX_OVERLAP) + }// end function f_selection_093() + + /* Mnemonic selection reference: PICS 4/10 */ + function f_selection_094() return boolean + { + return(PC_MAP_REL_CAUSE) + }// end function f_selection_094() + + /* Mnemonic selection reference: PICS 4/11 */ + function f_selection_095() return boolean + { + return(PC_MAP_REASON_REL) + }// end function f_selection_095() + + /* Mnemonic selection reference: PICS 4/12 */ + function f_selection_096() return boolean + { + return(PC_INTERW_SIP_FAIL) + }// end function f_selection_096() + + /* Mnemonic selection reference: PICS 4/13 */ + function f_selection_097() return boolean + { + return(PC_DERIV_DISPL_FROM) + }// end function f_selection_097() + + /* Mnemonic selection reference: PICS 4/13 and ( not PICS 4/20 ) */ + function f_selection_098() return boolean + { + return(PC_DERIV_DISPL_FROM and (not PC_DERIV_DISP_P_ASS)) + }// end function f_selection_098() + + /* Mnemonic selection reference: PICS 4/13 and PICS 4/20 */ + function f_selection_099() return boolean + { + return(PC_DERIV_DISPL_FROM and PC_DERIV_DISP_P_ASS) + }// end function f_selection_099() + + /* Mnemonic selection reference: PICS 4/14 */ + function f_selection_100() return boolean + { + return(PC_CTRL_SUSP) + }// end function f_selection_100() + + /* Mnemonic selection reference: PICS 4/17 */ + function f_selection_101() return boolean + { + return(PC_USE_NEW_ADDR_CONTACT) + }// end function f_selection_101() + + /* Mnemonic selection reference: PICS 4/5 and ( not PICS 4/4 ) */ + function f_selection_102() return boolean + { + return(PC_SUPP_INT_RESOURCE and (not PC_SUPP_RELY_PROV)) + }// end function f_selection_102() + + /* Mnemonic selection reference: PICS 4/5 */ + function f_selection_103() return boolean + { + return(PC_SUPP_RELY_PROV) + }// end function f_selection_103() + + /* Mnemonic selection reference: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + function f_selection_104() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_104() + + /* Mnemonic selection reference: PICS 4/6 */ + function f_selection_105() return boolean + { + return(PC_PERF_AUT_REPEAT) + }// end function f_selection_105() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/2 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_106() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_USE_SIP_TX_ENBLOCK and PC_USE_SIP_TX_OVERLAP and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_106() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_107() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_107() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_108() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_108() + + /* Mnemonic selection reference: PICS 5/6 */ + function f_selection_109() return boolean + { + return(PC_SUPP_TP) + }// end function f_selection_109() + + /* Mnemonic selection reference: PICS 6/1 */ + function f_selection_110() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK) + }// end function f_selection_110() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/11 */ + function f_selection_111() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_NOT_AVAIL_NO_P) + }// end function f_selection_111() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/3 */ + function f_selection_112() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM) + }// end function f_selection_112() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/3 and PICS 6/9 */ + function f_selection_113() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM and PC_SEND_CLI_ALLOWED_NO_P) + }// end function f_selection_113() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/9 */ + function f_selection_114() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_ALLOWED_NO_P) + }// end function f_selection_114() + + /* Mnemonic selection reference: PICS 6/3 */ + function f_selection_115() return boolean + { + return(PC_INCL_ADD_CLD_FROM) + }// end function f_selection_115() + + /* Mnemonic selection reference: ( not PICS 4/11 ) */ + function f_selection_116() return boolean + { + return(not PC_MAP_REASON_REL) + }// end function f_selection_116() + + /* Mnemonic selection reference: PICS 8/1 PICS 5/5 and PICS 5/18 */ + function f_selection_117() return boolean + { + return(PC_SUPP_HOLD_AFTER_ALERT and PC_SUPP_HOLD and PC_SUPP_3PTY) + }// end function f_selection_117() + + /* Mnemonic selection reference: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + function f_selection_118() return boolean + { + return(PC_SUPP_HOLD_NEC_INFO and PC_SUPP_HOLD and PC_SUPP_3PTY) + }// end function f_selection_118() + + /* Mnemonic selection reference: ( ( not PICS 11/1 )or ( not PICS 11/3 ) ) */ + function f_selection_119() return boolean + { + return((not PC_REJ_UUS3ESSENTIAL_FRJ) or (not PC_IMPL_EXPL_USER_USER)) + }// end function f_selection_119() + + /* Mnemonic selection reference: PICS 9/1 */ + function f_selection_120() return boolean + { + return(PC_RET_IRS_MCID_NOT) + }// end function f_selection_120() + +} + + +}// end module SipIsup_PICS diff --git a/AtsCommon/SipIsup_PIXITS.ttcn b/AtsCommon/SipIsup_PIXITS.ttcn new file mode 100644 index 0000000..1c75bd8 --- /dev/null +++ b/AtsCommon/SipIsup_PIXITS.ttcn @@ -0,0 +1,121 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module contains the PIXIT parameters + */ + +module SipIsup_PIXITS { + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + import from LibSip_SIPTypesAndValues all; + + /* + ** @remark Reference: XXX + ** @desc What is the local receive policy for SIP? + * Value of PX_LOCAL_POLICY + * 1: receive no cause due to local policy, 2: receive cause #31 due to local policy + */ + modulepar { + + /** @desc integer for testcase variant according to table entry in table to test purpose description, if present + */ + integer PX_TC_VA:=1; + + /** @desc Bitstring[5] for Bearer Capability Information Transfer Capability used for mapping between + * ISUP: Bearer Capability information element within USI parameter and + * SIP: SDP offer or PSTN XML BearerCapability + * Used in TC_301_014, TC_301_015 and TC_301_023 + */ + Bit5 PX_BearerCapabilityInformationTransferCapability:='00000'B; + + /** @desc Bitstring[5] for Bearer Capability Information Transfer Capability used for mapping between + * ISUP: Bearer Capability information element within ATP parameter and + * SIP: PSTN XML BearerCapability + * Used in TC_ + */ + Bit5 PX_BearerCapabilityInformationTransferCapability2:='00000'B; + + /** @desc Bitstring[7] for High layer characteristics identification used for mapping between + * ISUP: High layer compatibility information element within ATP or UTSI parameter and + * SIP: PSTN XML HighLayerCompatibility + * Used in TC_105_012, TC_105_013, TC_106_006, TC_106_007, TC_107_008, TC_107_009, + * TC_301_031, TC_301_032 and TC_301_033 + */ + Bit7 PX_HighLayerCharacteristicsIdentification:='0000001'B; + + /** @desc Bitstring[7] for 2nd High layer characteristics identification used for mapping between + * ISUP: High layer compatibility information element within ATP parameter and + * SIP: PSTN XML HighLayerCompatibility + * Used in TC104_015, TC_104_016 and TC_301_033 + */ + Bit7 PX_HighLayerCharacteristicsIdentification2:='0000001'B; + + /** @desc Bitstring[5] for Low layer Information Transfer Capability used for mapping between + * ISUP: Low layer compatibility information element within ATP parameter and + * SIP: PSTN XML LowLayerCompatibility + * Used in TC_104_018, TC_104_019, TC_106_008, TC_107_010 and TC_301_030 + */ + Bit5 PX_LowLayerInformationTransferCapability:='00000'B; + + /** @desc Bitstring[7] for Progress description used for mapping between + * ISUP: Progress indicator information element within ATP parameter and + * SIP: PSTN XML ProgressIndicator + * Used in TC_104_008, TC_104_020, TC_105_006, TC_107_004 and TC_301_029 + */ + + Bit7 PX_ProgressIndicator:='0000001'B; + + /** @desc Integer for Cause value used for mapping between + * ISUP: Cause value within CAUI parameter and + * SIP: Q.850 cause value in Reason header + * Used in TC_110_001 and TC_110_002 + */ + + integer PX_CauseValue:=16; + + /** @desc float default value for Ti/w1 (500 ms) + */ + float PX_SIP_Tiw1 := 0.5; + + /** @desc float default value for Ti/w2 (500 ms) + */ + float PX_SIP_Tiw2 := 0.5; + + /** @desc NameAddr default value for From field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_From := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := {host := "ims.net", portField :=omit}, + urlParameters := omit, + headers := omit} + } + /** @desc NameAddr default value for PAsserted(with sip scheme) field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_PAsserted := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := {host := "ims.net", portField :=omit}, + urlParameters := omit, + headers := omit} + } + /** @desc NameAddr default value for PAsserted2(with tel scheme) field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_PAsserted2 := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_telScheme, // contains "tel" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := omit, + urlParameters := omit, + headers := omit} + } + } + +}// end module SipIsup_PIXITS \ No newline at end of file diff --git a/AtsCommon/SipIsup_SS_TCFunctions.ttcn b/AtsCommon/SipIsup_SS_TCFunctions.ttcn new file mode 100644 index 0000000..b442b33 --- /dev/null +++ b/AtsCommon/SipIsup_SS_TCFunctions.ttcn @@ -0,0 +1,46 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module provides the TC functions used by the test component + * for SIP side of the SUT. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + */ +module SipIsup_SS_TCFunctions { + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + //LibIms + import from LibIms_Templates all; + import from LibIms_Steps all; + import from LibIms_SIPTypesAndValues all; + import from LibIms_Interface all; + //IsupAts + import from SipIsup_ISUP_ModuleParams all; // for timer values e.g. PX: T7, T9 + import from SipIsup_PIXITS all; + import from SipIsup_ISUP_Constants all; + + //Type to adress the IUT to send it message + //type Address address; + type record address + { + //HostPort + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + }with { encode "SIPCodec" } + + +} // end module SipIsup_SIP_TCFunctions diff --git a/AtsCommon/SipIsup_TestConfiguration.ttcn b/AtsCommon/SipIsup_TestConfiguration.ttcn new file mode 100644 index 0000000..32e089e --- /dev/null +++ b/AtsCommon/SipIsup_TestConfiguration.ttcn @@ -0,0 +1,206 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module contains functions which implement the + * configuration of the SUT adapter and mapping of test + * components for establishing and tearing down different + * test configurations. + * + */ + module SipIsup_TestConfiguration { + + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all; + //AtsSipIsup + import from SipIsup_TestSystem all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Interface all; + //LibIms + import from LibIms_SIPTypesAndValues all; + import from LibIms_Interface all; + + group auxSipFunction { + + /* + ** @desc f_IncCSeq returns an input parameter incremented by 1000 + ** reason is to run the next testcase with a higher CSeq value + */ + function f_IncCSeq(inout CSeq p_cSeq) + runs on ServerSyncComp + { p_cSeq.seqNumber := p_cSeq.seqNumber + 1000; + return + }; + // end f_IncCSeq + + }//end group auxSipFunction + + group syncCommands { + const charstring c_syncSip_Isup := "syncSipIsup"; + }//end group syncCommands + + group cfUp { + + /** + * + * @desc Creates test configuration of Ims and Isup component + * @param p_imsComponen ims component + * @param p_isupBiccComponent isup component + */ + function f_cf_imsIsupUp( out ImsComponent p_imsComponent, + out IsupBiccComponent p_isupBiccComponent) + runs on ServerSyncComp { + //Variables + var FncRetCode v_ret := e_success; + //Create + p_imsComponent := ImsComponent.create ; + p_isupBiccComponent := IsupBiccComponent.create ; + //Connect + connect(p_imsComponent:syncPort, self:syncPort) ; + map(p_imsComponent:SIPP, system:IMSCN1); // Init test Configuration + // TODO check if opPort will be used + //if (PX_SIP_CheckConversation) + // {map(p_imsComponent:opPort, system:opPortS);} // Init test Configuration + connect(p_isupBiccComponent:syncPort, self:syncPort) ; + //Map + if (PX_IsupBicc_CheckConversation or PX_IsupBicc_CheckRinging) + {map(p_isupBiccComponent:opPort_IsupBicc, system:opPortS_IsupBicc);} // Init test Configuration +// note-axr: workaround to avoid enumerated PIXIT parameter +// if (PX_ISUP_IsupOrBicc == selectIsup) { + if (PX_ISUP_Isup) { + map(p_isupBiccComponent:IsupBiccP, system:atm); + } + else { + map(p_isupBiccComponent:IsupBiccP, system:atm); + } + //map(p_sipComponent:SIPP, system:UDP1); + + f_setVerdict(v_ret); + }//end f_cf_imsIsupUp + + }//end group cfUp + + group cfDown { + + /** + * + * @desc Deletes test configuration of Ims and Isup component + * @param p_imsComponen ims component + * @param p_isupBiccComponent isup component + */ + function f_cf_imsIsupDown( in ImsComponent p_imsComponent, + in IsupBiccComponent p_isupBiccComponent) + runs on ServerSyncComp { + var FncRetCode v_ret; + f_serverWaitForAllClientsToStop(); + //Variables + v_ret := e_success; + //Disconnect + disconnect(p_imsComponent:syncPort, self:syncPort) ; + disconnect(p_isupBiccComponent:syncPort, self:syncPort) ; + //Unmap +// note-axr: workaround to avoid enumerated PIXIT parameter +// if (PX_ISUP_IsupOrBicc == selectIsup) { + if (PX_ISUP_Isup) { + unmap(p_isupBiccComponent:IsupBiccP, system:atm ); // IsupP + } + else { + unmap(p_isupBiccComponent:IsupBiccP, system:atm); // BiccP + } + unmap(p_imsComponent:SIPP, system:IMSCN1); + // TODO check if opPort will be used + //if (PX_SIP_CheckConversation) + // {unmap(p_imsComponent:opPort, system:opPortS);} + if (PX_IsupBicc_CheckConversation or PX_IsupBicc_CheckRinging) + {unmap(p_isupBiccComponent:opPort_IsupBicc, system:opPortS_IsupBicc);} // Init test Configuration + + }//end f_cf_imsIsupDown + + group syncNoStop // Same functions as in LibCommon but without call of f_serverWaitForAllClientsToStop() + { + /* @desc Implements synchronization of client from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to client. + * Waits for PX_TSYNC_TIME_LIMIT to let client + * finish executing behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync1Client( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(1,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync2Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 3 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync3Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(3,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 4 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync4Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(4,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + } //end group syncNoStop + + } //end group cfDown + + + +} // end module SipIsup_TestConfiguration \ No newline at end of file diff --git a/AtsCommon/SipIsup_TestExecution.ttcn b/AtsCommon/SipIsup_TestExecution.ttcn new file mode 100644 index 0000000..0882afe --- /dev/null +++ b/AtsCommon/SipIsup_TestExecution.ttcn @@ -0,0 +1,1627 @@ +module SipIsup_TestExecution { + + //LobCommon + import from LibCommon_BasicTypesAndValues all; + //AtsCommon + import from SipIsup_PIXITS all; + import from SipIsup_Testcases all; + //SipAts + import from LibSip_SIPTypesAndValues all; + import from SipIsup_PICS all; + + control { + + //Variables + var UInt8 i, j := 0; + //var UInt8 j := 0; + var CSeq v_CSeq_s := { + fieldName := CSEQ_E, + seqNumber := 0, + method := "INVITE" + }; + + /* Mnemonic selection condition: PICS 4/5 and ( not PICS 4/4 ) */ + if (f_selection_102()) { + execute(TC_101_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_059()) { + execute(TC_101_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + if (f_selection_062()) { + execute(TC_101_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and ( not PICS 4/1 ) ) */ + if (f_selection_057()) { + execute(TC_101_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 ) and ( PICS 1/6 ) */ + if (f_selection_067()) { + execute(TC_101_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_060()) { + execute(TC_101_006(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_063()) { + execute(TC_101_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and ( not PICS 4/1 ) ) */ + if (f_selection_065()) { + execute(TC_101_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + if (f_selection_004()) { + execute(TC_101_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_059()) { + execute(TC_101_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_062()) { + execute(TC_101_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_058()) { + execute(TC_101_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + if (f_selection_001()) { + execute(TC_101_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_060()) { + execute(TC_101_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_063()) { + execute(TC_101_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and PICS 4/1 ) */ + if (f_selection_066()) { + execute(TC_101_016(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( ( not PICS 1/9 ) ) */ + if (f_selection_029()) { + execute(TC_101_017(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( PICS 1/9 ) and ( ( not PICS 4/23 ) ) */ + if (f_selection_030()) { + execute(TC_101_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 ) and ( ( not PICS 4/24 ) ) */ + if (f_selection_076()) { + execute(TC_101_019(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=8; i:=i+1) { + execute(TC_101_020(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=8; i:=i+1) { + execute(TC_101_021(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_101_022(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_101_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/7 ) ) */ + if (f_selection_043()) { + execute(TC_101_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_007()) { + execute(TC_101_026(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_028(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_029(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and PICS 4/19 */ + if (f_selection_085()) { + execute(TC_101_030(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and ( not PICS 4/19 ) */ + if (f_selection_084()) { + execute(TC_101_031(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( PICS 1/9 ) and ( PICS 4/23 ) */ + if (f_selection_005()) { + execute(TC_101_032(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + if (f_selection_061()) { + execute(TC_103_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_104_001(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_104_002(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_105_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_105_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_105_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_106_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/5 */ + if (f_selection_103()) { + execute(TC_106_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/5 ) */ + if (f_selection_019()) { + execute(TC_106_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_107_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/5 */ + if (f_selection_103()) { + execute(TC_107_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/5 ) */ + if (f_selection_019()) { + execute(TC_107_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=38; i:=i+1) { + execute(TC_108_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_005(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=38; i:=i+1) { + execute(TC_108_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_011(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_012(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/15 ) and PICS 4/21 */ + if (f_selection_011()) { + execute(TC_108_013(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/6 */ + if (f_selection_105()) { + execute(TC_108_101(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_108_102(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_010()) { + execute(TC_108_103(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/4 */ + if (f_selection_093()) { + execute(TC_108_104(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/4 */ + if (f_selection_093()) { + execute(TC_108_105(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_106(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_107(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_108(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_109(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_110(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_111(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_012()) { + execute(TC_109_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_012()) { + execute(TC_109_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_095()) { + execute(TC_109_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_095()) { + execute(TC_109_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_006(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_007(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_008(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_009(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_010(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_011(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_111_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/14 */ + if (f_selection_100()) { + execute(TC_111_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_112_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_006(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/150 ) */ + if (f_selection_017()) { + execute(TC_301_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_016(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_020(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_028(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_031(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_032(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_037(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_038(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_039(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_040(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_041(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_042(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_043(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_044(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_045(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_046(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_048(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_069()) { + execute(TC_301_049(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_051(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=9; i:=i+1) { + execute(TC_301_053(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_301_054(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/1 */ + if (f_selection_076()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_301_055(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_056(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_057(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_058(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_059(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_060(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/8 ) */ + if (f_selection_046()) { + execute(TC_301_061(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + if (f_selection_044()) { + execute(TC_301_062(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/8 ) */ + if (f_selection_046()) { + execute(TC_301_063(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + if (f_selection_044()) { + execute(TC_301_064(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_302_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 1/5 ) */ + if (f_selection_050()) { + execute(TC_302_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_055()) { + execute(TC_302_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_055()) { + execute(TC_302_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) ) */ + if (f_selection_052()) { + execute(TC_302_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_016(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_017(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 1/4 ) */ + if (f_selection_049()) { + execute(TC_302_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 3/8 ) */ + if (f_selection_048()) { + execute(TC_302_020(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 1/9 ) ) and ( PICS 4/9 ) */ + if (f_selection_034()) { + execute(TC_303_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_033()) { + execute(TC_303_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_033()) { + execute(TC_303_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + if (f_selection_077()) { + execute(TC_303_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/1 */ + if (f_selection_080()) { + execute(TC_303_008(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/2 */ + if (f_selection_082()) { + execute(TC_303_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_016(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + if (f_selection_077()) { + execute(TC_303_017(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/1 */ + if (f_selection_080()) { + execute(TC_303_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_020(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_021(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_022(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_026(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_028(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 ) */ + if (f_selection_025()) { + execute(TC_303_029(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + if (f_selection_037()) { + execute(TC_303_030(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + if (f_selection_042()) { + execute(TC_303_032(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_026()) { + execute(TC_303_033(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_038()) { + execute(TC_303_034(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_027()) { + execute(TC_303_035(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_039()) { + execute(TC_303_036(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_027()) { + execute(TC_303_037(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_039()) { + execute(TC_303_038(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_039(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_040(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_041(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_042(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_043(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_044(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) */ + if (f_selection_078()) { + execute(TC_303_045(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 ) */ + if (f_selection_081()) { + execute(TC_303_046(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 3/8) ) and ( PICS 4/2 ) */ + if (f_selection_041()) { + execute(TC_303_047(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_048(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_049(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_050(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_051(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_052(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_053(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_031()) { + execute(TC_303_054(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/2 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_106()) { + execute(TC_303_055(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_107()) { + execute(TC_303_056(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_108()) { + execute(TC_303_057(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_304_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_304_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_305_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 */ + if (f_selection_076()) { + execute(TC_306_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 */ + if (f_selection_079()) { + execute(TC_306_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_307_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_307_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_307_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=6; j:=j+1) { + execute(TC_307_009(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=6; j:=j+1) { + execute(TC_307_011(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/11 */ + if (f_selection_095()) { + execute(TC_308_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=25; i:=i+1) { + execute(TC_308_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_096()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_308_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_013()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_308_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=25; j:=j+1) { + execute(TC_308_013(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_308_014(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 4/10 */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=25; j:=j+1) { + execute(TC_308_017(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/17 ) */ + if (f_selection_018()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_308_018(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/17 */ + if (f_selection_101()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_308_019(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + execute(TC_308_020(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + execute(TC_308_021(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/2 */ + if (f_selection_092()) { + execute(TC_308_022(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 3/4 ) */ + if (f_selection_009()) { + execute(TC_308_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_026(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_309_001(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_002(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_003(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_005(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_006(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_007(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_008(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_009(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_011(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_012(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_013(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_309_014(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_015(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_016(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_017(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_018(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_019(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/9 */ + if (f_selection_114()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_004(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 and PICS 6/9 */ + if (f_selection_113()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_010(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_011(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_012(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_501_013(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_501_014(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_501_015(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_016(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_017(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_018(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_019(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_020(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/11 */ + if (f_selection_111()) { + execute(TC_501_021(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 */ + if (f_selection_083()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_022(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/1 and PICS 6/12 */ + if (f_selection_086()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_023(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/1 and PICS 6/3 and PICS 6/12 */ + if (f_selection_087()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_024(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_001(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_002(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_003(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_502_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_006(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_503_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 5/6 ) and ( PICS 4/14 ) */ + if (f_selection_070()) { + execute(TC_503_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: NOT PICS 5/10 */ + if (f_selection_075()) { + execute(TC_504_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_505_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_505_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/18 */ + if (f_selection_006()) { + execute(TC_505_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_506_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 9/1 */ + if (f_selection_120()) { + execute(TC_507_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 9/1 ) */ + if (f_selection_020()) { + execute(TC_507_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_508_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_510_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_510_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_511_001(v_CSeq_s)); + } + /* Mnemonic selection condition: not PICS 11/2 */ + if (f_selection_073()) { + execute(TC_511_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 12/1 */ + if (f_selection_090()) { + execute(TC_512_001(v_CSeq_s)); + } + /* Mnemonic selection condition: NOT PICS 12/1 */ + if (f_selection_074()) { + execute(TC_512_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_513_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_514_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 */ + if (f_selection_083()) { + execute(TC_515_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/12 */ + if (f_selection_088()) { + execute(TC_515_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_601_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/13 */ + if (f_selection_097()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) */ + if (f_selection_014()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_005(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and ( not PICS 4/20 ) */ + if (f_selection_098()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + if (f_selection_015()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and ( not PICS 4/20 ) */ + if (f_selection_098()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + if (f_selection_015()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_011(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_012(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_013(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_014(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_015(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_602_001(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_602_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_603_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_603_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/10 */ + if (f_selection_075()) { + execute(TC_604_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_605_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 8/1 PICS 5/5 and PICS 5/18 */ + if (f_selection_117()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_605_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/10 */ + if (f_selection_006()) { + execute(TC_605_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_606_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_607_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_608_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_608_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_609_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_610_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_004(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 11/1 )or ( not PICS 11/3 ) ) */ + if (f_selection_119()) { + execute(TC_610_015(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 12/1 */ + if (f_selection_090()) { + execute(TC_611_001(v_CSeq_s)); + } + /* Mnemonic selection condition: NOT PICS 12/1 */ + if (f_selection_074()) { + execute(TC_611_002(v_CSeq_s)); + } + + + + }//end control + +} // end module SipIsup_TestExecution \ No newline at end of file diff --git a/AtsCommon/SipIsup_TestSystem.ttcn b/AtsCommon/SipIsup_TestSystem.ttcn new file mode 100644 index 0000000..bc988b9 --- /dev/null +++ b/AtsCommon/SipIsup_TestSystem.ttcn @@ -0,0 +1,164 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc Specifies component types used by the IPv6 ATS. + * Definitions are based on component type definitions + * from IPv6, SCOP and common synchronization libraries. + * + */ + module SipIsup_TestSystem { + + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + //LibSip + import from LibSip_Interface all; + + //AtsIsup + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + + /* + ** @desc The test system interface + */ + type component TestAdapter { + port IsupBiccPort atm; + port SipPort IMSCN1, IMSCN2; + port operatorPort_IsupBicc opPortS_IsupBicc; + } + + + //type component SipComponent is defined in SipIsup_SIP_TypesAndConf + + group CMTypes + { + type charstring CM_Message; + } // end group CMTypes + + + group SystemConfiguration + { + group TestComponents + { + group TestSystemInterfaces + { + type component IsupBiccInterfaces + { + port IsupBiccPort IsupP; // Port on the test system used when ISUP signalling is used. + port IsupBiccPort BiccP; // Port on the test system used when BICC signalling is used. + } + } // end Group TestSystemInterfaces + + group TestAbstractComponents + { + + type component IsupBiccComponent + { + // general variables + // current address to send TCP/UDP messages + // var address sent_label := {host := PX_IUT_IPADDR, portField := PX_IUT_PORT}; + + // current address to send UDP multicast messages + + // general timers + timer TWait := PX_ISUP_TWAIT; + timer TAck := PX_ISUP_TAC; + timer TNoAc := PX_ISUP_TNOAC; + timer TSync := PX_ISUP_TSYNC; + + // Timers for delaying messages to be transmitted, to simulate realistic response times to the SUT + timer TDelay_ACM := PX_TDelay_ACM; + timer TDelay_ANM := PX_TDelay_ANM; + timer TDelay_APM := PX_TDelay_APM; + timer TDelay_CGB := PX_TDelay_CGB; + timer TDelay_CON := PX_TDelay_CON; + timer TDelay_COT := PX_TDelay_COT; + timer TDelay_CPG := PX_TDelay_CPG; + timer TDelay_FAC := PX_TDelay_FAC; + timer TDelay_FAR := PX_TDelay_FAR; + timer TDelay_GRS := PX_TDelay_GRS; + timer TDelay_IDR := PX_TDelay_IDR; + timer TDelay_INF := PX_TDelay_INF; + timer TDelay_LOP := PX_TDelay_LOP; + timer TDelay_REL := PX_TDelay_REL; + timer TDelay_RES := PX_TDelay_RES; + timer TDelay_RLC := PX_TDelay_RLC; + timer TDelay_RSC := PX_TDelay_RSC; + timer TDelay_SAM := PX_TDelay_SAM; + timer TDelay_SUS := PX_TDelay_SUS; + timer TDelay_UNKNOWN := PX_TDelay_UNKNOWN; + timer ProtocolTimer; + + port IsupBiccPort IsupBiccP; + port Coordination cpA; + port Coordination cpB; + + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack:= c_initStringStack; + var Bit12 v_CircuitIdentityCode1; + var CallInstanceCode v_CallInstanceCode1; + var Bit12 v_CircuitIdentityCode2; + var CallInstanceCode v_CallInstanceCode2; + var Bit12 v_CircuitIdentityCodeDef; + var CallInstanceCode v_CallInstanceCodeDef; + var Bit4 v_SLS; + var Bit4 v_SLS2; + + //bearer states associated with cic1 and cic2: 0: not setup; 1: setup reuested; + //2: release requested; 3: setup + var integer v_ISUP_BearerState1; //state associated with cic1 + var integer v_ISUP_BearerState2; //state associated with cic2 + var boolean v_ACM_expected1; // First IAM sent, ACM pending, if true + var boolean v_ACM_expected2; // Second IAM sent, ACM pending, if true + + var default v_Default;// Generic default variable, used for activation + + var ISUP_BICC_MSG_ind v_IAM_r; // to store received IAM message and extract values + var ISUP_BICC_MSG_ind v_ACM_r; // to store a received ACM message and extract values + var ISUP_BICC_MSG_ind v_ANY_r; // to store a received any message and extract values + + port SyncPort syncSendPort; + port SyncPort syncPort; + port operatorPort_IsupBicc opPort_IsupBicc; + timer tc_sync := PX_ISUP_TSYNC_TIME_LIMIT; + + }// component IsupBiccComponent + + }// end Group TestAbstractComponents + + }// end group TestComponents + + group Ports + { + //used for communication with the operator + + type port operatorPort_IsupBicc procedure {inout s_IsupBicc_conversation; inout s_IsupBicc_ringing}; + type port IsupBiccPort message + { + out ISUP_BICC_MSG_req; /* ASP used to send an ISUP/BICC message */ + in ISUP_BICC_MSG_ind; /* ASP used to receive an ISUP/BICC message */ + out InitializeIsupBicc_req; /* ASP used to Initialize the test system. */ + in InitializeIsupBicc_cnf; /* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ + out BearerSetup_req; /* For BICC: request TS to setup the bearer connection between TS and SUT. */ + in BearerSetup_acc; /* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ + in BearerSetup_ind; /* For BICC: Indication that the bearer connection between TS and SUT has been setup by the SUT. */ + out BearerRelease_req; /* For BICC: request to release the established bearer connection. */ + in BearerRelease_cnf; /* For BICC: confirmation that the requested bearer is released. */ + in BearerRelease_ind; /* Indication of whether the bearer is successfully released. */ + } + + type port Coordination message + { + inout CM_Message + }with {extension "internal" } + } // End Group Ports + + } //end group SystemConfiguration + signature s_IsupBicc_conversation (in charstring text, out boolean answer); + signature s_IsupBicc_ringing (in charstring text, out boolean answer); + +} // end module SipIsup_TestSystem diff --git a/AtsCommon/SipIsup_Testcases.ttcn b/AtsCommon/SipIsup_Testcases.ttcn new file mode 100644 index 0000000..a0f5b6b --- /dev/null +++ b/AtsCommon/SipIsup_Testcases.ttcn @@ -0,0 +1,67 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module contains test cases and their test case functions + * for the SIP-SIP and SIP-ISUP interworking. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + */ + module SipIsup_Testcases { + + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all; + //AtsCommon + import from SipIsup_TestConfiguration all; + //Ats Sip + import from SipIsup_TestSystem all; + //import from LibSip_SIPTypesAndValues all; + import from SipIsup_SS_TCFunctions all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Interface all; + //LibIms + import from LibIms_Interface all; + + import from SipIsup_PIXITS all; + + //Ats Isup + //import from SipIsup_ISUP_Configuration all; + import from SipIsup_ISUP_TCFunctions all; + import from SipIsup_ISUP_ModuleParams all; + +//TC_Reset_Circuits() + testcase TC_Reset_Circuits(inout CSeq p_CSeq_s) + runs on ServerSyncComp + system TestAdapter { + //Variables + var ImsComponent v_imsComponent ; + var IsupBiccComponent v_isupBiccComponent ; + f_cf_imsIsupUp(v_imsComponent, v_isupBiccComponent); + + v_isupBiccComponent.start(f_Reset_Circuits()); + + f_cf_imsIsupDown(v_imsComponent, v_isupBiccComponent); + + } // end TC_Reset_Circuits() + +//TC_Reset_Groups() + testcase TC_Reset_Groups(inout CSeq p_CSeq_s) + runs on ServerSyncComp + system TestAdapter { + //Variables + var ImsComponent v_imsComponent ; + var IsupBiccComponent v_isupBiccComponent ; + f_cf_imsIsupUp(v_imsComponent, v_isupBiccComponent); + + v_isupBiccComponent.start(f_Reset_Groups()); + + f_cf_imsIsupDown(v_imsComponent, v_isupBiccComponent); + + } // end TC_Reset_Groups() + +} // end module SipIsup_Testcases diff --git a/IsupAts/SipIsup_ISUP_Constants.ttcn b/IsupAts/SipIsup_ISUP_Constants.ttcn new file mode 100644 index 0000000..af3f08b --- /dev/null +++ b/IsupAts/SipIsup_ISUP_Constants.ttcn @@ -0,0 +1,1137 @@ +/* + * @author STF 36 + * @version $Id$ + * @desc This module provides ISUP/BICC-related constants used by the test component +*/ +module SipIsup_ISUP_Constants +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_ParamTypes all; + +group Constants { + +/* Value 'Connected' of bit field element 'action indicator' in IE 'Action indicator'. */ +const Bit1 c_AI_actInd_conn := '0'B; + +/* Value 'no indication' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_noInd := '00'B; + +/* Value 'ordinary subscriber' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_ordSub := '01'B; + +/* Value 'payphone' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_payPh := '10'B; + +/* Value 'connect when free (national use)' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_conWfree := '10'B; + +/* Value 'no indication' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_noInd := '00'B; + +/* Value 'subscriber free' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_subFree := '01'B; + +/* Value 'incoming echo control device included' of bit field element 'Echo control device indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_eCtrlDevInd_incl := '1'B; + +/* Value 'incoming echo control device not included' of bit field element 'Echo control device indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_eCtrlDevInd_notIncl := '0'B; + +/* Value 'interworking encountered' of bit field element 'Interworking indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_interwInd_Interw := '1'B; + +/* Value 'no interworking encountered (Signalling System No. 7 all the way)' of bit field element 'Interworking indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_interwInd_noInterw := '0'B; + +/* Value 'terminating access ISDN' of bit field element 'ISDN access indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnAccInd_ISDN := '1'B; + +/* Value 'terminating access non-ISDN' of bit field element 'ISDN access indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnAccInd_notISDN := '0'B; + +/* Value 'ISUP not used all the way' of bit field element 'ISDN user part indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnUpInd_NotUsed := '0'B; + +/* Value 'ISUP used all the way' of bit field element 'ISDN user part indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnUpInd_used := '1'B; + +/* Value '#16 Normal call clearing' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_16 := 16; + +/* Value '#31 Normal, unspecified' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_31 := 31; + +/* Value '#41 Temporary failure' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_41 := 41; + +/* Value '#47 Resource unavailable, unspecified' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_47 := 47; + +/* Value 'CCBS possible' of element 'Diagnostics' in IE 'Cause'. */ +const octetstring c_CAU_cDiagn_CCBSposs := '01'O; + +/* Value 'User-to-User parameter name' of element 'Diagnostics' in IE 'Cause'. */ +const octetstring c_CAU_cDiagn_uupName := '2A'O; + +/* Value 'Network beyond interworking point' of bit field element 'Location' in IE 'Cause'. */ +const Bit4 c_CAU_cLocation_ntwBeyond := '1010'B; + +/* Value 'CCNR possible' of bit field element 'CCNR possible indicator' in IE 'CCNR possible indicator'. */ +const Bit1 c_CCNPI_ccnrPosblInd_notPsbl := '1'B; + +/* Value 'CCNR not possible' of bit field element 'CCNR possible indicator' in IE 'CCNR possible indicator'. */ +const Bit1 c_CCNPI_ccnrPosblInd_psbl := '0'B; + +/* Value 'presentation allowed with redirection number' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_alwdWith := '010'B; + +/* Value 'presentation allowed without redirection number' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_alwdWithout := '011'B; + +/* Value 'presentation not allowed' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_notAlwd := '001'B; + +/* Value 'Unknown' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_unknown := '000'B; + +/* Value 'deflection during alerting' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_defAlert := '0100'B; + +/* Value 'deflection immediate response' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_defImRsp := '0101'B; + +/* Value 'no reply' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_noRepl := '0010'B; + +/* Value 'mobile subscriber not reachable' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_notReach := '0110'B; + +/* Value 'User busy' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_uBusy := '0001'B; + +/* Value 'unconditional' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_unCond := '0011'B; + +/* Value 'Unknown' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_unkn := '0000'B; + +/* Value 'hardware failure oriented' of bit field element 'Circuit Group Supervision Message Type Indicator' in IE 'Circuit Group Supervision Message Type'. */ +const Bit2 c_CGBMT_cgSupMtypeInd_hwOrtd := '01'B; + +/* Value 'maintenance oriented' of bit field element 'Circuit Group Supervision Message Type Indicator' in IE 'Circuit Group Supervision Message Type'. */ +const Bit2 c_CGBMT_cgSupMtypeInd_maint := '00'B; + +/* Value 'routing to internal network number allowed' of bit field element 'Internal network number indicator' in IE 'Called party number'. */ +const Bit1 c_CLD_intNtwNum_alwd := '0'B; + +/* Value 'routing to internal network number not allowed' of bit field element 'Internal network number indicator' in IE 'Called party number'. */ +const Bit1 c_CLD_intNtwNum_notAlwd := '1'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_telex := '100'B; + +/* Value 'unknown' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_unknown := '000'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_restrNtwk := '11'B; + +/* Value 'routing to internal network number allowed' of bit field element 'Internal network number indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_intNtwNum_alwd := '0'B; + +/* Value 'routing to internal network number not allowed' of bit field element 'Internal network number indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_intNtwNum_notAlwd := '1'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_unknown := '0000000'B; + +/* Value 'complete' of bit field element 'Number incomplete indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_numIncmplInd_cmpl := '0'B; + +/* Value 'incomplete' of bit field element 'Number incomplete indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_numIncmplInd_inCmpl := '1'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_telex := '100'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_screenInd_ntwProv := '11'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_screenInd_userProv := '01'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_telex := '100'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_screenInd_ntwProv := '11'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_screenInd_userProv := '01'B; + +/* Value 'notification required' of bit field element 'connect Type' in IE 'Connect Type'. */ +const Bit2 c_CNT_connType_notReq := '00'B; + +/* Value 'ordinary calling subscriber' of bit field element 'Calling party's category value' in IE 'Calling party's category'. */ +const Bit8 c_CPC_cPartyCat_ordSubs := '00001010'B; + +/* Value 'continuity check failed' of bit field element 'Continuity indicator' in IE 'Continuity indicators'. */ +const Bit1 c_CTI_contInd_failed := '0'B; + +/* Value 'continuity check successful' of bit field element 'Continuity indicator' in IE 'Continuity indicators'. */ +const Bit1 c_CTI_contInd_succ := '1'B; + +/* Value 'ALERTING' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_alert := '0000001'B; + +/* Value 'call forwarded on busy' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfb := '0000100'B; + +/* Value 'call forwarded on no reply (national use)' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfNoRepl := '0000101'B; + +/* Value 'call forwarded unconditional (national use)' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfu := '0000110'B; + +/* Value 'in-band information or an appropriate pattern is now available' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_inBand := '0000011'B; + +/* Value 'PROGRESS' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_progr := '0000010'B; + +/* Value 'end-to-end information available' of bit field element 'End-to-end information indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_eToEndInfoInd_EtoEinfo := '1'B; + +/* Value 'no end-to-end information available' of bit field element 'End-to-end information indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_eToEndInfoInd_noEtoEinfo := '0'B; + +/* Value 'no end-to-end method available (only link-by-link method available)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_noEmethod := '00'B; + +/* Value 'pass-along and SCCP methods available (national use)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_paSccp := '11'B; + +/* Value 'pass-along method available (national use)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_passAlong := '01'B; + +/* Value 'SCCP method available' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_sccp := '10'B; + +/* Value 'interworking encountered' of bit field element 'Interworking indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_interwInd_Interw := '0'B; + +/* Value 'no interworking encountered (Signalling System No. 7 all the way)' of bit field element 'Interworking indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_interwInd_noInterw := '1'B; + +/* Value 'originating access ISDN' of bit field element 'ISDN access indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnAccInd_ISDN := '1'B; + +/* Value 'originating access non-ISDN' of bit field element 'ISDN access indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnAccInd_notISDN := '0'B; + +/* Value 'ISUP not used all the way' of bit field element 'ISDN user part indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnUpInd_NotUsed := '0'B; + +/* Value 'ISUP used all the way' of bit field element 'ISDN user part indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnUpInd_used := '1'B; + +/* Value 'ISDN user part not required all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_notReq := '01'B; + +/* Value 'ISDN user part preferred all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_pref := '00'B; + +/* Value 'ISDN user part required all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_requi := '10'B; + +/* Value 'call to be treated as an international' of bit field element 'National/international call indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_nInatCallInd_internat := '1'B; + +/* Value 'call to be treated as a national call' of bit field element 'National/international call indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_nInatCallInd_nat := '0'B; + +/* Value 'connectionless and connection oriented methods available (national use)' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_both := '11'B; + +/* Value 'connectionless method available (national use' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_conLess := '01'B; + +/* Value 'connection oriented method available' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_conOrient := '10'B; + +/* Value 'no indication' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_noInd := '00'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_unknown := '0000010'B; + +/* Value 'complete' of bit field element 'Number incomplete indicator' in IE 'Generic number'. */ +const Bit1 c_GEN_numIncmplInd_cmpl := '0'B; + +/* Value 'incomplete' of bit field element 'Number incomplete indicator' in IE 'Generic number'. */ +const Bit1 c_GEN_numIncmplInd_inCmpl := '1'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_telex := '100'B; + +/* Value 'additional called number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_cldNum := '00000001'B; + +/* Value 'additional calling party number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_cliNum := '00000110'B; + +/* Value 'additional connected number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_connNum := '00000101'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_ntwProv := '11'B; + +/* Value 'user provided, not verified' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userNotVerif := '00'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userProv := '01'B; + +/* Value 'user provided, verified and failed' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userProvFailed := '10'B; + +/* Value 'conference disconnected' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_confDisc := '1000011'B; + +/* Value 'conference established' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_confEst := '1000010'B; + +/* Value 'call is diverting' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_diverting := '1111011'B; + +/* Value 'isolated' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_isolated := '1000101'B; + +/* Value 'reattached' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_reattached := '1000110'B; + +/* Value 'remote hold' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_remHold := '1111001'B; + +/* Value 'remote retrieval' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_remRetriv := '1111010'B; + +/* Value 'call is a waiting call' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_waitCall := '1100000'B; + +/* Value 'request' of bit field element 'type' in IE 'Loop prevention indicators'. */ +const Bit1 c_LPI_lopReqResp_req := '0'B; + +/* Value 'calling party address requested' of bit field element 'Calling party address request indicator' in IE 'Information request indicators'. */ +const Bit1 c_IRI_cliAddress_req := '1'B; + +/* Value 'calling party address included' of bit field element 'Calling party address response indicator' in IE 'Information indicators'. */ +const Bit2 c_IID_cliAddress_included := '11'B; + +/* Value 'response' of bit field element 'type' in IE 'Loop prevention indicators'. */ +const Bit1 c_LPI_lopReqResp_rsp := '1'B; + +/* Value 'insufficient information' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_insuff := '00'B; + +/* Value 'no loop exists' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_noLoop := '01'B; + +/* Value 'simultaneous transfer' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_simult := '10'B; + +/* Value 'discard message' of bit field element 'Discard message indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_discMsgInd_discard := '1'B; + +/* Value 'do not discard message' of bit field element 'Discard message indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_discMsgInd_noDiscard := '0'B; + +/* Value 'discard information' of bit field element 'Pass on not possible indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_ponpInd_discInfo := '1'B; + +/* Value 'release call' of bit field element 'Pass on not possible indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_ponpInd_release := '0'B; + +/* Value 'do not release call' of bit field element 'Release call indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_releaseCallInd_noRel := '0'B; + +/* Value 'release call' of bit field element 'Release call indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_releaseCallInd_release := '1'B; + +/* Value 'do not send notification' of bit field element 'Send notification indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_sendNotificInd_notSnotif := '0'B; + +/* Value 'send notification' of bit field element 'Send notification indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_sendNotificInd_sendNotif := '1'B; + +/* Value 'end node interpretation' of bit field element 'Transit at intermediate exchange indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_transIntmedExchInd_endToEnd := '1'B; + +/* Value 'transit interpretation' of bit field element 'Transit at intermediate exchange indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_transIntmedExchInd_transit := '0'B; + +/* Value 'MCID not requested' of bit field element 'MCID request indicator value' in IE 'MCID request indicators'. */ +const Bit1 c_MRQI_mcidRqInd_notReq := '0'B; + +/* Value 'MCID requested' of bit field element 'MCID request indicator value' in IE 'MCID request indicators'. */ +const Bit1 c_MRQI_mcidRqInd_req := '1'B; + +/* Value 'MCID included' of bit field element 'MCID response indicator value' in IE 'MCID response indicators'. */ +const Bit1 c_MRSI_mcidRsInd_incl := '1'B; + +/* Value 'MCID not included' of bit field element 'MCID response indicator value' in IE 'MCID response indicators'. */ +const Bit1 c_MRSI_mcidRsInd_notIncl := '0'B; + +/* Value 'continuity check not required' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_notReq := '00'B; + +/* Value 'continuity check performed on a previous circuit' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_performed := '10'B; + +/* Value 'continuity check required on this circuit' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_requi := '01'B; + +/* Value 'outgoing echo control device included' of bit field element 'Echo control device indicator' in IE 'Nature of connection indicators'. */ +const Bit1 c_NCI_eCtrlDevInd_included := '1'B; + +/* Value 'outgoing echo control device not included' of bit field element 'Echo control device indicator' in IE 'Nature of connection indicators'. */ +const Bit1 c_NCI_eCtrlDevInd_notIncl := '0'B; + +/* Value 'no satellite circuit in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_none := '00'B; + +/* Value 'one satellite circuit in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_one := '01'B; + +/* Value 'two satellite circuits in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_two := '10'B; + +/* Value 'call diversion may occur' of bit field element 'call diversion may occur indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_cDivMayOcc_mayOcc := '1'B; + +/* Value 'no indication' of bit field element 'call diversion may occur indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_cDivMayOcc_noInd := '0'B; + +/* Value 'in-band information or an appropriate pattern is now available' of bit field element 'in band information indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_inBandInfoInd_available := '1'B; + +/* Value 'no indication' of bit field element 'in band information indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_inBandInfoInd_noInd := '0'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_aNotAlwd := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_telex := '100'B; + +/* Value 'not requested' of bit field element 'Connected line identity request indicator' in IE 'Optional forward call indicators'. */ +const Bit1 c_OFCI_conLineIdRqInd_notReq := '0'B; + +/* Value 'requested' of bit field element 'Connected line identity request indicator' in IE 'Optional forward call indicators'. */ +const Bit1 c_OFCI_conLineIdRqInd_req := '1'B; + +/* Value 'non-CUG call' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_nonCug := '00'B; + +/* Value 'closed user group call, outgoing access allowed' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_outAllwd := '10'B; + +/* Value 'closed user group call, outgoing access not allowed' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_outNotAllwd := '11'B; + +/* releaseCallIndicator +Value 'Release call' of bit field element 'Release call indicator' in IE 'Parameter compatibility information/ParameterInstructionIndicator'. */ +const Bit1 c_PCI_relCall_ind_release := '0'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_telex := '100'B; + +/* Value 'no reply (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_noReply := '0010'B; + +/* Value 'user busy (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_uBusy := '0001'B; + +/* Value 'unconditional (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_uncond := '0011'B; + +/* Value 'unknown/not available' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_unknown := '0000'B; + +/* Value 'call diverted, all redirection information presentation restricted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_divAllRestr := '100'B; + +/* Value 'call diverted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_diverted := '011'B; + +/* Value 'call diversion, redirection number presentation restricted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_divNumRestr := '110'B; + +/* Value 'no redirection (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_noRedir := '000'B; + +/* Value 'call rerouted, all redirection information presentation restricted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouAllRestr := '010'B; + +/* Value 'call rerouted, redirection number presentation restricted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouNumRestr := '101'B; + +/* Value 'call rerouted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouted := '001'B; + +/* Value 'deflection during alerting' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_deflAlert := '0100'B; + +/* Value 'deflection immediate response' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_deflImm := '0101'B; + +/* Value 'mobile subscriber not reachable' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_mobSubsnReach := '0110'B; + +/* Value 'no reply' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_noReply := '0010'B; + +/* Value 'user busy' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_uBusy := '0001'B; + +/* Value 'unconditional' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_uncond := '0011'B; + +/* Value 'unknown/not available' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_unknown := '0000'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_restrNtwk := '11'B; + +/* Value 'international numbe' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_telex := '100'B; + +/* Value 'presentation allowed' of bit field element 'Presentation restricted indicator' in IE 'Redirection number restriction'. */ +const Bit2 c_RDNR_presRestrInd_allowed := '00'B; + +/* Value 'presentation restricted' of bit field element 'Presentation restricted indicator' in IE 'Redirection number restriction'. */ +const Bit2 c_RDNR_presRestrInd_restr := '01'B; + +/* Value 'network initiated' of bit field element 'Suspend resume indicator' in IE 'Suspend resume indicators'. */ +const Bit1 c_SRI_suspResInd_ntw := '1'B; + +/* Value 'ISDN subscriber initiated' of bit field element 'Suspend resume indicator' in IE 'Suspend resume indicators'. */ +const Bit1 c_SRI_suspResInd_user := '0'B; + +/* Value '3.1 kHz audio' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_31Audio := '00000011'B; + +/* Value 'speech' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_speech := '00000000'B; + +/* Value '64 kbit/s unrestricted' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_64Kbs := '00000010'B; + +/* Value '64 kbit/s preferred' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_64Kbs_pref := '00000110'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement' */ +const Bit8 c_TMR_tmrValue_tones := '00000101'B; + +/* Value '3.1 kHz audio' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_31Audio := '10000'B; + +/* Value 'Restricted digital information' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_restr := '01001'B; + +/* Value 'Speech' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_speech := '00000'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_tones := '10001'B; + +/* Value 'Unrestricted digital information' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_unrestr := '01000'B; + +/* Value 'Video' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_video := '11000'B; + +/* Value 'A-Law' of bit field element 'User Information Layer 1 Protocol Indicator' in IE 'User service information'. */ +const Bit5 c_USI_userInfoL1_ALaw := '00011'B; + +/* Value 'mu-Law' of bit field element 'User Information Layer 1 Protocol Indicator' in IE 'User service information'. */ +const Bit5 c_USI_userInfoL1_muLaw := '00010'B; + +/* Value 'Telephony' of bit field element 'High layer characteristics identification' in IE 'User service information'. */ +const Bit7 c_USI_hlc_telephony := '0000001'B; + +/* Value 'Facsimile Group 2/3 (Recommendation F.182' of bit field element 'High layer characteristics identification' in IE 'User service information'. */ +const Bit7 c_USI_hlc_fax2_3 := '0000100'B; + +/* Value 'user-to-user information discarded by the network' of bit field element 'Network discard indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_netwDiscInd_discarded := '1'B; + +/* Value 'no information' of bit field element 'Network discard indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_netwDiscInd_noInfo := '0'B; + +/* Value 'request' of bit field element 'service type indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_service_ind_req := '0'B; + +/* Value 'response' of bit field element 'service type indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_service_ind_rsp := '1'B; + +/* Value 'no information' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_noInfo := '00'B; + +/* Value 'request, not essential' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_notEss := '10'B; + +/* Value 'no information' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_noInfo := '00'B; + +/* Value 'not provided' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_notProv := '01'B; + +/* Value 'provided' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_prov := '10'B; + +/* Value 'request, essential' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_ess := '11'B; + +/* Value 'operator, language French' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorFrench := '00000001'B; + +/* Value 'operator, language English' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorEnglish := '00000010'B; + +/* Value 'operator, language German' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorGerman := '00000011'B; + +/* Value 'operator, language Russian' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorRussian := '00000100'B; + +/* Value 'operator, language Spanish' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorSpanish := '00000101'B; + +/* Value 'ordinary subscriber' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_ISUP_CGC_cliPCat_ord_subs := '00001010'B; + +/* Value 'test call' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_testcall := '00001101'B; + +/* Value 'payphone' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_payphone := '00001111'B; + +/* Value 'mobile terminal located in the home PLMN' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_mobiletermHome := '00010000'B; + +/* Value 'mobile terminal located in a visited PLMN' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_mobiletermVisited := '00010001'B; + +/* Value 'IEPS call marking for preferential call set up' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_IEPS := '00001110'B; + +/* Value '1 satellite' for element satelliteIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format. (TX side).*/ +const Bit2 c_ISUP_NCI_satInd_1sat := '01'B; + +/* Value 'included' for element echoControlDeviceIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_NCI_echoContrDevInd_incl := '1'B; + +/* Value 'Interworking encountered' for element interworkingIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_interwInd_enc := '1'B; + +/* Value 'ISDN user part/BICC not used all the way' for element iSDNUserPartIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_iSDNUserPartInd_notAlwUsed := '0'B; + +/* Value 'ISDN user part/BICC not required all the way' for element iSDNUserPartPrefIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit2 c_ISUP_FCI_iSDNUserPartPrefInd_notReq := '01'B; + +/* Value 'Originating access non-ISDN' for element iSDNAccessIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_iSDNAccessInd_nonISDN := '0'B; + +/* Value 'network provided' for element screeningIndicator inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit2 c_ISUP_CGN_screeningInd := '11'B; + +/* Value 'ISDN/Telephony (E.164)' for element numberingPlanIndicator inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit3 c_ISUP_CGN_numbPlanInd_E164 := '001'B; + +/* Value 'complete' for element iNN inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit1 c_ISUP_CGN_iNN_compl := '0'B; + +/* Value 'additional calling party number' for element numberQualifierIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit8 c_ISUP_GNU_numQualifierInd_add := '00000110'B; + +/* Value 'user provided, not verified' for element screeningIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit2 c_ISUP_GNU_screenInd_upnv := '00'B; + +/* Value 'E.164' for element numberingPlanIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit3 c_ISUP_GNU_numbPlanInd_E164 := '001'B; + +/* Value 'complete' for element iNN inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit1 c_ISUP_GNU_iNN_compl := '0'B; + +/* Value 'Speech' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_Speech := '00000'B; + +/* Value '3.1 kHz audio' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_3_1kHZ_Audio := '10000'B; + +/* Value 'Unrestricted digital information' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_UDI := '01000'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_UDI_TA := '10001'B; + +/* Value 'Telephony' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Telephony := '0000001'B; + +/* Value 'Facsimilie Group 2/3' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_FaxGroup2_3 := '0000100'B; + +/* Value 'Facsimilie Group 4 Class I' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_FaxGroup4 := '0100001'B; + +/* Value 'Teletex service, basic and mixed mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F230 := '0100100'B; + +/* Value 'Teletex service, basic and processable mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F220 := '0101000'B; + +/* Value 'Teletex service, basic mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F200 := '0110001'B; + +/* Value 'Syntax based Videotex' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_SyntaxBasedVideotex := '0110010'B; + +/* Value 'International Videotex interworking via gateways or interworking units' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_IntVideotex := '0110011'B; + +/* Value 'Telex service' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_TelexService := '0110101'B; + +/* Value 'Message Handling Systems' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_MHS := '0111000'B; + +/* Value 'OSI applications' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_OSIapps := '1000001'B; + +/* Value 'Audio visual' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_AudioVisual := '1100010'B; + +/* Value 'Call is not end-to-end ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_1 := '0000001'B; + +/* Value 'Destination address is non-ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_2 := '0000010'B; + +/* Value 'Origination address is non-ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_3 := '0000011'B; + +/* Value 'Call has returned to ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_4 := '0000101'B; + +/* Value 'Interworking has occurred and has resulted in a telecommunication service change' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_5 := '0000101'B; + +/* Value 'originating access ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_6 := '0000110'B; + +/* Value 'Terminating access ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_7 := '0000111'B; + +/* Value 'In-band information or an appropriate pattern is now available' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_8 := '0001000'B; +} /* end group Constants */ + +group Functions { +/* Function f_char_to_BCD +* @desc: Returns BCD code in a hexstring converted from +* address digits (p_char) in charstring format +* Filler character '0'H is added where necessary +* End-of-Pulsing charater is added, if p_eop is TRUE +* Works for address lengths starting from 0 (i.e. empty string) +*/ + function f_char_to_BCD(in charstring p_char, in boolean p_eop) return octetstring { + var integer v_string_length := lengthof(p_char); + var charstring v_address_char := p_char; + var octetstring v_address_oct; + var hexstring v_address_hex_ASCII; + + var integer i; + var hexstring v_address_hex_NUM := ''H; + + if (p_eop) // End of Pulsing required + { + + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "O"; // instead of "?" + // add End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 1; + } + else // even number of digits + { + v_address_char := v_address_char & "O0"; // instead of "0?" + // add filler and End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "0"; + // add filler + v_string_length := v_string_length + 1; + } + } + + v_address_oct := (char2oct(v_address_char)); + v_address_hex_ASCII := oct2hex(v_address_oct); + /* Examples + "1234" -> '31323334'H + "12345O" -> '31323334353F' */ + +// var integer i; +// var hexstring v_address_hex_NUM := ''H; + + // fill hexstring with adequate number of hex digits + for (i := 0; i < v_string_length; i := i + 1) + { + v_address_hex_NUM := v_address_hex_NUM & '0'H; + } + // fill hexstring with address in BCD format + for (i := 0; i < v_string_length; i := i + 2) + { + v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; + v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; + } + + v_address_oct := hex2oct(v_address_hex_NUM); + return v_address_oct; + } // end function f_char_to_BCD + + /* Function f_calc_oddeven + * @desc: Returns the odd/even indicator of address digits in p_char + * in a bitstring[1] + * Filler and End-of-Pulsing charaters (if p_eop is TRUE) are taken into account + * Works for address lengths starting from 0 (i.e. empty string) + */ + function f_calc_oddeven(in charstring p_char, in boolean p_eop) return bitstring { + var integer v_string_length := lengthof(p_char); + var bitstring v_odd_even_ind; + + if (p_eop) // End of Pulsing required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_odd_even_ind := '0'B; + } + else // even number of digits + { + v_odd_even_ind := '1'B; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_odd_even_ind := '1'B; + } + else // even number of digits + { + v_odd_even_ind := '0'B; + } + } + + return v_odd_even_ind; + + } // end function f_calc_oddeven + + /* Function f_calc_paramLen + * @desc: Returns the parameter length of parameters carrying the address digits + * in p_char in a bitstring[8] + * Filler and End-of-Pulsing charaters (if p_eop is TRUE) are taken into account + * An offset (p_offset) is added dependant on the presence of octets 3 and 4 + */ + function f_calc_paramLen(in charstring p_char, in boolean p_eop, in integer p_offset) + return bitstring { + var integer v_string_length := lengthof(p_char); + var bitstring v_paramLen; + + if (p_eop) // End of Pulsing required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_string_length := (v_string_length + 1) / 2; + } + else // even number of digits + { + v_string_length := (v_string_length + 2) / 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_string_length := (v_string_length + 1) / 2; + } + else // even number of digits + { + v_string_length := v_string_length / 2; + } + } + + v_paramLen := int2bit((v_string_length + p_offset), 8); + return v_paramLen; + + } // end function f_calc_paramLen + +/* These functions are used to calculate the length of fields of type +octetstring with an offset added and deliver the result as Bitstring of size 8, +first parameter is the name of the structure, in which the octetstring, +whose length is calculated, resides +p_int is the offset, +i.e. when calculating the length of a CDN parameter, +p_oct carries the octets in field addressSignals +p_int carries the value 2 as offset for octet 3 and 4 */ + +/* Function to calculate length of CDN parameter */ +function f_calc_length_cdn (in template CDN_PAR_lv p_cdn, in integer p_int) +return Bit8 { + var CDN_PAR_lv v_cdn := valueof(p_cdn); + return int2bit((lengthof (v_cdn.addressSignals) + p_int), 8 ); +} + +/* Function to calculate length of RAS parameter */ +function f_calc_length_ras (in template RAS_PAR_lv p_ras, in integer p_int) +return Bit8 { + var RAS_PAR_lv v_ras := valueof(p_ras); + return int2bit((lengthof (v_ras.status) + p_int), 8 ); +} + +/* Function to calculate length of ATP parameter carrying one CGPS IE*/ +function f_calc_length_atp_cgps (in template ISDN_IEs p_ies, in integer p_int) +return Bit8 { + var ISDN_IEs v_ies := valueof(p_ies); + return int2bit((lengthof (v_ies.callingPartySubaddress.subaddressInformation) + p_int), 8 ); +} + +/* Function to calculate length of ATP parameter carrying one CODS IE*/ +function f_calc_length_atp_cods (in template ISDN_IEs p_ies, in integer p_int) +return Bit8 { + var ISDN_IEs v_ies := valueof(p_ies); + return int2bit((lengthof (v_ies.connectedSubaddress.subaddressInformation) + p_int), 8 ); +} + +} /* end group Functions */ + +} /* end module SipIsup_ISUP_Constants */ + + + + + + diff --git a/IsupAts/SipIsup_ISUP_ModuleParams.ttcn b/IsupAts/SipIsup_ISUP_ModuleParams.ttcn new file mode 100644 index 0000000..03183d9 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ModuleParams.ttcn @@ -0,0 +1,721 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Module Parameters. + * They are all mapped to PIXIT items in ETSI TS 186 009-1. +*/ +module SipIsup_ISUP_ModuleParams{ + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + import from SipIsup_ISUP_ParamTypes all; + + type enumerated SelectIsupOrBicc {selectIsup, selectBicc}; + +modulepar +{ +/* @desc Time to delay ACM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.7 +*/ +float PX_TDelay_ACM := 1.0; + +/* @desc Time to delay ANM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.8 +*/ +float PX_TDelay_ANM := 1.0; + +/* @desc Time to delay APM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.9 +*/ +float PX_TDelay_APM := 1.0; + +/* @desc Time to delay CGB message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.10 +*/ +float PX_TDelay_CGB := 1.0; + +/* @desc Time to delay CON message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.11 +*/ +float PX_TDelay_CON := 1.0; + +/* @desc Time to delay COTM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.12 +*/ +float PX_TDelay_COT := 1.0; + +/* @desc Time to delay CPG message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.13 +*/ +float PX_TDelay_CPG := 1.0; + +/* @desc Time to delay FAC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.14 +*/ +float PX_TDelay_FAC := 1.0; + +/* @desc Time to delay FAR message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.15 +*/ +float PX_TDelay_FAR := 1.0; + +/* @desc Time to delay GRS message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.16 +*/ +float PX_TDelay_GRS := 1.0; + +/* @desc Time to delay IDR message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.17 +*/ +float PX_TDelay_IDR := 1.0; + +/* @desc Time to delay INF message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.18 +*/ +float PX_TDelay_INF := 1.0; + +/* @desc Time to delay LOP message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.19 +*/ +float PX_TDelay_LOP := 1.0; + +/* @desc Time to delay REL message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.20 +*/ +float PX_TDelay_REL := 1.0; + +/* @desc Time to delay RES message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.21 +*/ +float PX_TDelay_RES := 1.0; + +/* @desc Time to delay RLC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.22 +*/ +float PX_TDelay_RLC := 1.0; + +/* @desc Time to delay RSC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.23 +*/ +float PX_TDelay_RSC := 1.0; + +/* @desc Time to delay SAM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.24 +*/ +float PX_TDelay_SAM := 1.0; + +/* @desc Time to delay SUS message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.28 +*/ +float PX_TDelay_SUS := 1.0; + +/* @desc Time to delay UNKNOWN message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.26 +*/ +float PX_TDelay_UNKNOWN := 1.0; + +/* @desc Nominal timeout value of ISUP protocol timer T2 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.27 +*/ +float PX_Timeout_T2 := 180.0; + +/* @desc Nominal timeout value of ISUP protocol timer T39 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.28 +*/ +float PX_Timeout_T39 := 120.0; + +/* @desc Nominal timeout value of ISUP protocol timer T6 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.29 +*/ +float PX_Timeout_T6 := 10.0; + +/* @desc Nominal timeout value of ISUP protocol timer T7 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.30 +*/ +float PX_Timeout_T7 := 25.0; + +/* @desc Nominal timeout value of ISUP protocol timer T +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.310 +*/ +float PX_Timeout_T8 := 12.0; + +/* @desc Nominal timeout value of ISUP protocol timer T9 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.32 +*/ +float PX_Timeout_T9 := 135.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW1 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.33 +*/ +float PX_Timeout_TOIW1 := 4.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW2 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.34 +*/ +float PX_Timeout_TOIW2 := 4.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW3 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.35 +*/ +float PX_Timeout_TOIW3 := 4.0; + + +/* @desc Time to control PTC.stop +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.5 +*/ +float PX_ISUP_TDONE := 15.0; + +/* @desc Time to control the reception of a message +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.1 + */ +float PX_ISUP_TAC := 5.0; + +/* @desc Time to control that IUT sends nothing +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.2 +*/ +float PX_ISUP_TNOAC := 5.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.6 +*/ +float PX_ISUP_TWAIT := 30.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.3 +*/ +float PX_ISUP_TSYNC := 10.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.4 +*/ +float PX_ISUP_TSYNC_TIME_LIMIT := 20.0; + +/* @desc Select whether ISUP or BICC testing is done. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.1 +*/ + SelectIsupOrBicc PX_ISUP_IsupOrBicc := selectIsup; +boolean PX_ISUP_Isup := true; +/* @desc Network indicator inside the Service Indicator octet (SIO). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.2 +*/ + Bit2 PX_ISUP_NW_IND := '10'B; + +/* @desc Point code of the TS (ISUP interface). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.5 +*/ + Bit14 PX_ISUP_PC_TS := '00000011001000'B; + +/* @desc Point code of the SUT (ISUP interface). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.4 +*/ + Bit14 PX_ISUP_PC_SUT := '00000001111100'B; + +/* @desc Signalling Link Selection (SLS) value of the ISUP link between TS and SUT. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.3 +*/ + Bit4 PX_ISUP_SLS := '0000'B; + +/* @desc Address (e.g. IP) of the TS (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.7 +*/ + octetstring PX_TS_ADRESS_ISUP_BICC; + +/* @desc Address (e.g. IP) of the SUT (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.6 +*/ + octetstring PX_SUT_ADRESS_ISUP_BICC; + +/* @desc Default Circuit Identity Code value for signalling connection 1). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.8 +*/ +Bit12 PX_ISUP_TX_CIC_cicv1 := '000000000001'B; + +/* @desc Default Circuit Identity Code value for signalling connection 2). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.9 +*/ +Bit12 PX_ISUP_TX_CIC_cicv2 := '000000000010'B; + +/* @desc Default Call Instance Code value for signalling connection 1). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.10 +*/ +CallInstanceCode PX_ISUP_TX_CIC_caicv1 := '00000001'O; + +/* @desc Default Call Instance Code value for signalling connection 2). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.11 +*/ +CallInstanceCode PX_ISUP_TX_CIC_caicv2 := '00000002'O; + +/* @desc 'Subaddress information' value sent in the 'Access transport/Connected sub-address' Parameter in the ANM message (default). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.1 +*/ +octetstring PX_ISUP_ANM_AT_connSub_val := 'A031323334'O; + +/* @desc 'component' value (accepted by the SUT without immediate response (PIXIT)) sent in the 'Facility' parameter in the FAC message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.2 +*/ +octetstring PX_ISUP_FAC_comp_txDef := 'A430050005800100'O; // Rejct component, unknown invID, generalProblem, unrecognizedComponent + +/* @desc Default 'address digits' value received in the 'Calling party number' parameter in the IAM message, when the Called party number is 'international'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.1 +*/ +charstring PX_ISUP_IAM_CLI_digits_rxInat := "38642909"; + +/* @desc Default 'address digits' value received in the 'Calling party number' parameter in the IAM message, when the Called party number is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.2 +*/ +charstring PX_ISUP_IAM_CLI_digits_rxNat := "42909"; + +/* @desc Default 'Number incomplete indicator' value received in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.4 +*/ +Bit1 PX_ISUP_IAM_CLI_numIncmplInd_rxDef := '0'B; + +/* @desc Default 'address digits' value sent in the 'Calling party number' parameter in the IAM message, when the Called party number is 'international'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.6.1 +*/ +charstring PX_ISUP_IAM_CLI_digits_txInat := "3864123"; + +/* @desc Default 'address digits' value sent in the 'Calling party number' parameter in the IAM message, when the Called party number is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.6.2 +*/ +charstring PX_ISUP_IAM_CLI_digits_txNat := "4123"; + +/* @desc 'address digits' value received in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.7.1 +*/ +charstring PX_ISUP_IAM_GEN_digits_rxInat := "38642909"; + +/* @desc 'address digits' value received in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.7.2 +*/ +charstring PX_ISUP_IAM_GEN_digits_rxNat := "42909"; + +/* @desc 'address digits' value sent in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.8.1 +*/ +charstring PX_ISUP_IAM_GEN_digits_txInat := "3864123"; + +/* @desc 'address digits' value sent in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.8.2 +*/ +charstring PX_ISUP_IAM_GEN_digits_txNat := "4123"; + +/* @desc Default 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the complete address and 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.7.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef :="2909"; + +/* @desc Default 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the complete address and 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.7.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_txDef := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by analysis of the number. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.2.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_analysis := "2909"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by analysis of the number. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.2.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_analysis := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by timeout. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.3.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_timeout := "2909"; + +/* @desc 'nature of address' value value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by timeout.. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.3.2 +*/ Bit7 PX_ISUP_TX_CLD_natAddr_timeout := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the maximum number of digits according to the national numbering plan, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.4.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_max := "29090000000000000000"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the maximum number of digits according to the national numbering plan, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.4.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_max := '0000001'B; + +/* @desc 'address digits' value (less than minimum number digits to route the call through to the SIP side) sent in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.14.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_less :="12"; + +/* @desc 'nature of addresss' value (number of digits less than minimum number digits to route the call through to the SIP side) sent in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.14.2 +*/ +Bit7 PX_ISUP_IAM_CLD_natAddr_less := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the minimum number of digits required for routing through to the SIP side, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.5.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_min :="2909"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the minimum number of digits required for routing through to the SIP side, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.5.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_min := '0000001'B; + +/* @desc Default 'complete address digits' value sent in the 'Called party number' parameter in the IAM message, when the nature of address is specified as 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.12 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef_inat :="38642909"; + +/* @desc Default 'complete address digits' value sent in the 'Called party number' parameter in the IAM message, when the nature of address is specified as 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.13 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef_nat :="42909"; + +/* @desc Default 'user-to-user information' value (Service 1 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.1 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S1 := '0449534B524154454C'O; + +/* @desc Default 'user-to-user information' value (Service 2 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.2 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S2 := '0449534B524154454C'O; + +/* @desc Default 'user-to-user information' value (Service 3 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.3 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S3 := '0449534B524154454C'O; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IW-U has received a BYE message from SIP. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.1 +*/ +integer PX_ISUP_REL_CAU_cVal_bye := 16; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IW-U has received a CANCEL message from SIP. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.2 +*/ +integer PX_ISUP_REL_CAU_cVal_cancel := 16; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IWU-O has autonomously released the call. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.3 +*/ +integer PX_ISUP_REL_CAU_cVal_autonomous := 31; + +/* @desc 'Cause value' value sent in the 'Cause' parameter in the REL message, when the diagnostics field indicates 'CCBS possible'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.4 +*/ +integer PX_ISUP_REL_CAU_CCBSposs := 17; + +/* @desc SIP/ISUP interworking, after SUT send IAM message there exist possibility to await COT message + * true - await COT message + * false - don't wait COT message +*/ +boolean PX_ISUP_COT_MSG_await := false; + + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in a SAM message, containing enough number digits to allow the routing to the SIP side, where the IAM contained less than the minimum digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.1 +*/ +charstring PX_ISUP_SAM_SQN_digits_txLess_AllowRoute := "05"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the SAM message, containing the second part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.2 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_2nd := "0"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the second SAM message, containing the third part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.3 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_3rd := "9"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the third SAM message, containing the fourth and final part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.4 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_4th := "9"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the third SAM message, containing the fourth and final part of the number with the amount of digits leading to the overall maximum of digits allowed according to the numbering plan, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.5 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_4th_max := "9"; + +/* @desc Default value for element chargeIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.1 +*/ +Bit2 PX_ISUP_TX_BCI_v_chargeInd := '10'B; + +/* @desc Default value for element calledPartysStatusIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.2 +*/ +Bit2 PX_ISUP_TX_BCI_v_cldPStatInd := '00'B; + +/* @desc Default value for element calledPartysCategoryIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.3 +*/ +Bit2 PX_ISUP_TX_BCI_v_cldPCatInd := '01'B; + +/* @desc Default value for element end_to_endMethodIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.4 +*/ +Bit2 PX_ISUP_TX_BCI_v_eTOeMethodInd := '00'B; + +/* @desc Default value for element interworkingIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.5 +*/ +Bit1 PX_ISUP_TX_BCI_v_interwInd := '1'B; + +/* @desc Default value for element end_to_endInformationIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.6 +*/ +Bit1 PX_ISUP_TX_BCI_v_eTOeInfoInd := '0'B; + +/* @desc Default value for element iSDNUserPartIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.7 +*/ +Bit1 PX_ISUP_TX_BCI_v_iSDNUserPartInd := '0'B; + +/* @desc Default value for element holdingIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.8 +*/ +Bit1 PX_ISUP_TX_BCI_v_holdingInd := '0'B; + +/* @desc Default value for element iSDNAccessIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.9 +*/ +Bit1 PX_ISUP_TX_BCI_v_iSDNAccessInd := '0'B; + +/* @desc Default value for element echoControlDeviceIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.10 +*/ +Bit1 PX_ISUP_TX_BCI_v_echoContrDevInd := '1'B; + +/* @desc Default value for element sCCPMethodIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.11 +*/ +Bit2 PX_ISUP_TX_BCI_v_sCCPMethodInd := '00'B; + +/* @desc Default value for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.13 +*/ +Bit8 PX_ISUP_TX_CGC_cliPCategory := '00001010'B; // ordinary calling subscriber + +/* @desc Default value for element natureOfaddressindicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.1 +*/ +Bit7 PX_ISUP_TX_CPN_natOfaddressind := '0000001'B; + +/* @desc Default value for element screeningIndicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.2 +*/ +Bit2 PX_ISUP_TX_CPN_screenInd := '01'B; + +/* @desc Default value for element addrPresRestrInd inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.3 +*/ +Bit2 PX_ISUP_TX_CPN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingplanIndicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.4 +*/ +Bit3 PX_ISUP_TX_CPN_numbplanInd := '001'B; + +/* @desc Default value for element addressSignals inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.5 +*/ +charstring PX_ISUP_TX_CPN_addrSignals := "2909"; + +/* @desc Default value for element natInternatCallIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.1 +*/ +Bit1 PX_ISUP_TX_FCI_natInternatCallInd := '0'B; + +/* @desc Default value for element endToEndMethodIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.2 +*/ +Bit2 PX_ISUP_TX_FCI_endToEndMethodInd := '00'B; + +/* @desc Default value for element interworkingIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.3 +*/ +Bit1 PX_ISUP_TX_FCI_interwInd := '1'B; + +/* @desc Default value for element endToEndInfoIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.4 +*/ +Bit1 PX_ISUP_TX_FCI_eTOeInfoIndic := '0'B; + +/* @desc Default value for element iSDNUserPartIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.5 +*/ +Bit1 PX_ISUP_TX_FCI_iSDNUserPartInd := '0'B; + +/* @desc Default value for element iSDNUserPartPrefIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.6 +*/ +Bit2 PX_ISUP_TX_FCI_iSDNUserPartPrefInd := '01'B; + +/* @desc Default value for element iSDNAccessIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.7 +*/ +Bit1 PX_ISUP_TX_FCI_iSDNAccessInd := '0'B; + +/* @desc Default value for element sCCPMethodIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.8 +*/ +Bit2 PX_ISUP_TX_FCI_sCCPMethodInd := '00'B; + +/* @desc Default value for element satelliteIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.1 +*/ +Bit2 PX_ISUP_TX_NCI_satelliteInd := '01'B; + +/* @desc Default value for element continuityCheckIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.2 +*/ +Bit2 PX_ISUP_TX_NCI_contCheckInd := '00'B; + +/* @desc Default value for element echoControlDeviceIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.3 +*/ +Bit1 PX_ISUP_TX_NCI_echoContrDevInd := '1'B; + +/* @desc Default value for element natureOfAddressIndicator inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.1 +*/ +Bit7 PX_ISUP_TX_OCN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element addrPresRestrInd inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.2 +*/ +Bit2 PX_ISUP_TX_OCN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingPlanIndicator inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.3 +*/ +Bit3 PX_ISUP_TX_OCN_numbPlanInd := '001'B; + +/* @desc Default value for element addressSignals inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.4 +*/ +charstring PX_ISUP_TX_OCN_addrSignals := "2909"; + +/* @desc Default value for element range inside Range and status parameter (RAS); Variable(V) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.18.1 +*/ +Bit8 PX_ISUP_TX_RAS_range := '00011110'B; // 30 + +/* @desc Default value for element status inside Range and status parameter (RAS); Variable(V) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.18.2 +*/ +octetstring PX_ISUP_TX_RAS_status := 'FE7FFF7F'O; // cic 1-15, 17-31; + +/* @desc Default value for element natureOfAddressIndicator inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.1 +*/ +Bit7 PX_ISUP_TX_RDN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element addrPresRestrInd inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.2 +*/ +Bit2 PX_ISUP_TX_RDN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingPlanIndicator inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.3 +*/ +Bit3 PX_ISUP_TX_RDN_numbPlanInd := '001'B; + +/* @desc Default value for element addressSignals inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.4 +*/ +charstring PX_ISUP_TX_RDN_addrSignals := "123"; + +/* @desc Default value for element natureOfAddressIndicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.1 +*/ +Bit7 PX_ISUP_TX_RNN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element numberingPlanIndicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.2 +*/ +Bit3 PX_ISUP_TX_RNN_numbPlanInd := '001'B; + +/* @desc Default value for element Internal Network Number indicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.3 +*/ +Bit1 PX_ISUP_TX_RNN_iNN := '0'B; + +/* @desc Default value for element addressSignals inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.4 +*/ +charstring PX_ISUP_TX_RNN_addrSignals := "2909"; + +/* @desc Default value for element presRestrIndicator inside Redirection number restriction parameter (RNS); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.21 +*/ +Bit2 PX_ISUP_TX_RNS_presRestrInd := '00'B; + +/* @desc Default value for element transmissionMediumRequirement inside Transmission medium requirement prime parameter (TMRP); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.22 +*/ +Bit8 PX_ISUP_TX_TMR_transmMedReq := '00000000'B; + +/* @desc Default value for element hopCounter inside Hop counter parameter (HPC); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.23 +*/ +Bit5 PX_ISUP_TX_HPC_hopCounter := '01000'B; + +/* @desc Default value for an unknown parameter type (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.24.1 +*/ +Bit8 PX_ISUP_TX_unknown_parameter_type := '10001111'B; + +/* @desc Default value for an unknown message type (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.24.2 +*/ +Bit8 PX_ISUP_TX_unknown_message_type := '01001010'B; + +/* @desc Default value for of bit field element 'User Information Layer 1 Protocol Indicator' in IE Bearer Cpability encapsulated in 'User service information' or 'Access transport' parameter (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.26 +*/ +Bit5 PX_userInfoLayer1 := '00011'B; + +/* @desc Default value for calling party subaddress information (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.1 +*/ +octetstring PX_ISUP_TX_cgps_information := '49534B524154454C'O; + +/* @desc Default value for calling party subaddress odd even indicator (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.2 +*/ +Bit1 PX_ISUP_TX_cgps_odd_even_indicator := '0'B; + +/* @desc Default value for calling party subaddress type of subaddress (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.3 +*/ +Bit3 PX_ISUP_TX_cgps_type_of_subaddress := '010'B; + +/* @desc Default value for connected subaddress type of subaddress (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.2 +*/ +Bit3 PX_ISUP_TX_connsub_type_of_subaddress := '010'B; + +/* @desc Default value for connected party subaddress odd even indicator (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.3 +*/ +Bit1 PX_ISUP_TX_connsub_odd_even_indicator := '0'B; + +/* @desc Default value for connected subaddress information (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.1 +*/ +octetstring PX_ISUP_TX_connsub_information := '49534B524154454C'O; + +/* true if conversation check is used +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A4, item 4.1 +*/ +boolean PX_IsupBicc_CheckConversation := false; + +/* true if ringing check is used +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A4, item 4.2 +*/ +boolean PX_IsupBicc_CheckRinging := false; + +} /* end modulepar */ +} /* end module SipIsup_ISUP_ModuleParams */ diff --git a/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn b/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn new file mode 100644 index 0000000..1b0fd11 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn @@ -0,0 +1,1189 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Message templates. +*/ +module SipIsup_ISUP_MsgTemplates +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTemplates all; + +group ISUP_BICC_Messages { +group ACM { +template ACM_MSG m_ACM_BCI(Bit2 p_cldPstatInd) := +/* TX template for Address complete message (ACM) with Called party status indicator (BCI) parameterized, and without optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := m_BCI_cpStatInd(p_cldPstatInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_BasicCall + (template BCI_PAR_v p_BCI, + template OBCI_PAR_tlv p_OBCI, + template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Address complete message (ACM) with default BCI, OBCI, ATP and TMU parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(p_OBCI, p_ATP, omit, p_TMU, omit, omit, omit, omit, omit, omit, omit), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_CDIV + (template BCI_PAR_v p_BCI, + template GNI_PAR_tlv p_GNI, + template RNN_PAR_tlv p_RNN, + template CDI_PAR_tlv p_CDI, + template RNS_PAR_tlv p_RNS) := +/* TX template for Address complete message (ACM) with default BCI, GNI, RNN, CDI and RNS parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(omit, omit, omit, p_GNI, omit, p_RNN, omit, p_CDI, p_RNS, omit, omit), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_OtherParameters + (template BCI_PAR_v p_BCI, + template UUIF_PAR_tlv p_UUIF, + template GNI_PAR_tlv p_GNI, + template PCI_PAR_tlv p_PCI, + template CCPI_PAR_tlv p_CCPI, + template UNKNOWN_PAR_tlv p_UNKNOWN) := +/* TX template for Address complete message (ACM) with BCI, GNI, UUI, CCPI, PCI and unknown parameter parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(omit, p_UUIF, omit, p_GNI, omit, omit, p_PCI, omit, omit, p_CCPI, p_UNKNOWN), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_MSG_Def := +/* RX template for Address complete message (ACM) with 'any'-values */ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI(Bit2 p_cldPstatInd) := +/* RX template for Address complete message (ACM) Called party status indicator (BCI) parameterized, and with 'any'-values */ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpStatInd(p_cldPstatInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + + +template ACM_MSG mw_ACM_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Address complete message (ACM) with default BCI, User-to-user indicators parameterized and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Address complete message (ACM) with Interworking indicator = 'interworking encountered', User-to-user indicators parameterized and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatnoInd := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd1, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + +template ACM_MSG mw_ACM_BCI_cpCat_3alt(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', with Interworking indicator, ISDN user part indicator and ISDN access indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpCat_3alt(p_interwInd, p_isdnUpInd, p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cpCat_3alt2(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpCat_3alt2(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatSubsFree(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', with Interworking indicator, ISDN access indicator, ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatSubsFree(p_interwInd, p_isdnUpInd, p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatSubsFree_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatSubsFree_tAccNonISDN(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatNoInd_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatNoInd_tAccNonISDN(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group ACM */ + +group ANM { +template ANM_MSG m_ANM_MSG_Def := +/* TX template for Answer message (ANM) without optional parameters except call history */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_BasicCall + (template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Answer message (ANM) with Access transport and Transmission medium used parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(omit, omit, p_ATP, omit, p_TMU, omit), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_COLP + (template CPN_PAR_tlv p_CPN, + template GNU_PAR_tlv p_GNU) := +/* TX template for Answer message (ANM) with Coonected number and Generic number parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(omit, p_CPN, omit, p_GNU, omit, omit), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_OtherParameters + (template UUIF_PAR_tlv p_UUIF, + template RNS_PAR_tlv p_RNS) := +/* TX template for Answer message (ANM) with User-to-user information and Redirection number restriction parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(p_UUIF, omit, omit, omit, omit, p_RNS), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG mw_ANM_MSG_Def := +/* RX template for Answer message (ANM) with 'any'-values */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ANM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG mw_ANM_MSG_anyOpt := +/* RX template for Answer message (ANS) with 'any'-optional parameters */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ANM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Answer message (ANS) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group ANM */ + +group APM { +template APM_MSG m_APM_AI_CNT(template UAI_PAR_tlv p_AI) := +//template APM_MSG m_APM_AI_CNT(template UAI_PAR_tlv p_AI, template CNT_PAR_tlv p_CNT) := +/* TX template for Application transport message (APM) without optional parameters +MG Note: unfinished*/ +{ + msgType := '01000001'B, /* Message Type '01000001'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Application transport message (APM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} +} /* end group APM */ + +group CGB { +template CGB_MSG m_CGB := +/* TX template for Circuit group blocking message (CGB) with default Circuit Group Supervision Message Type Indicator and Range and Status.*/ +{ + msgType := '00011000'B, /* Message Type '00011000'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=3-34 */ +} +} /* end group CGB */ + +group CGBA { +template CGBA_MSG mw_CGBA := +/* RX template for Circuit group blocking acknowledgement message (CGBA) with 'any'-optional parameters */ +{ + msgType := '00011010'B, /* Message Type '00011010'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group CGBA */ + +group CGU { +template CGU_MSG m_CGU := +/* TX template for Circuit group unblocking message (CGU. */ +{ + msgType := '00011001'B, /* Message Type '00011001'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=3-34 */ +} +} /* end group CGU */ + +group CGUA { +template CGUA_MSG mw_CGUA := +/* RX template for Circuit group unblocking acknowledgement message (CGUA). */ +{ + msgType := '00011011'B, /* Message Type '00011011'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group CGUA */ + +group CON { +template CON_MSG m_CON_MSG_Def := +/* TX template for Connect message (CON) with default BCI, and no optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := m_BCI_cpStatInd(c_BCI_cldPstatInd_noInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template CON_MSG m_CON_BasicCall(template ATP_PAR_tlv p_ATP, template TMU_PAR_tlv p_TMU) := +/* TX template for Connect message (CON) with default BCI, and no optional parameters except Call History Information.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := m_BCI_cpStatInd(c_BCI_cldPstatInd_noInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CON_USED_OPTIONAL_PARAMS(p_ATP,p_TMU), /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_MSG_anyOpt(template BCI_PAR_v p_BCI) := +/* RX template for Connect message (CON) with 'any'-optional parameters */ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_BCI3(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Connect message (CON) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, and with 'any' optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd2(p_interwInd,p_isdnUpInd,p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_BCI4 := +/* RX template for Connect message (CON) with Called party status indicator = 'no indication', Interworking indicator = 'interworking encountered', ISDN user part indicator = 'ISUP not used all the way', ISDN access indicator = 'terminating access non-ISDN', and with 'any' optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd3, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group CON */ + +group COT { +template COT_MSG m_COT_MSG(template Bit1 p_cti) := +/* TX template for Continuity message (COT) with Continuity indicators indicating continuity.*/ +{ + msgType := '00000101'B, /* Message Type '00000101'B */ + continuityIndicators := m_COI(p_cti) /* Continuity indicators, F, len=1 */ +} +} /* end group COT */ + +group CPG { +template CPG_MSG m_CPG_EIF(Bit7 p_eventInd) := +/* TX template for Call progress message (CPG) with event information parameterized and without optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_BasicCall + (template EIF_PAR_v p_EIF, + template BCI_PAR_tlv p_BCI, + template OBCI_PAR_tlv p_OBCI, + template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Call progress message (CPG) with Event information and with Backward call indicators, Optional backward call indicators, Access transport and Transmission medium used parameters*/ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := p_EIF, /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(p_BCI, p_OBCI, p_ATP, omit, omit, p_TMU, omit, omit), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_GNI(template GNI_PAR_tlv p_GNI) := +/* TX template for Call progress message (CPG) with event information = 'progress' and with Generic notification. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(c_EIF_eventInd_progr), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(omit, omit, omit, omit, p_GNI, omit, omit, omit), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_CDIV + (template RNN_PAR_tlv p_RNN, + template GNI_PAR_tlv p_GNI, + template CDI_PAR_tlv p_CDI, + template RNS_PAR_tlv p_RNS) := +/* TX template for Call progress message (CPG) with event information = 'progress' and with Redirection number, call diversion information, redirection number restriction and generic notification set to "Call is diverting"*/ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(c_EIF_eventInd_progr), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(omit, omit, omit, p_RNN, p_GNI, omit, p_CDI, p_RNS), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_MSG_Def := +/* RX template for Call progress message (CPG) with 'any'-optional parameters */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF_PAR_v_any, /* Event information, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_OPTIONAL_PARAMS_any, /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_EIF(Bit7 p_eventInd) := +/* RX template for Call progress message (CPG) with event information parameterized, and with 'any' optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_EIF_GNI(Bit7 p_eventInd, template GNI_PAR_tlv p_GNI) := +/* RX template for Call progress message (CPG) with event information and Generic notification indicator parameterized, and with 'any' other optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_USED_OPTIONAL_PARAMS(p_GNI), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group CPG */ + +group FAC { +template FAC_MSG m_FAC_comp(template ROP_PAR_tlv p_ROP) := +/* RX template for Facility message (FAC) with default remote operations and no other optional parameters.*/ +{ + msgType := '00110011'B, /* Message Type '00110011'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_FAC_USED_OPTIONAL_PARAMS(p_ROP), /* SET: optional parameters of Facility message (FAC) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group FAC */ + +group FAR { +template FAR_MSG mw_FAR_MSG_anyOpt(template FAI_PAR_v p_FAI) := +/* RX template for Facility request message (FRQ) with 'any'-optional parameters */ +{ + msgType := '00011111'B, /* Message Type '00011111'B */ + facilityIndicator := p_FAI, /* Facility indicator, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_FAR_OPTIONAL_PARAMS_any, /* SET: optional parameters of Facility request message (FRQ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template FAR_MSG m_FAR_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Facility request message (FAR) with User-to-user indicators parameterized. */ +{ + msgType := '00011111'B, /* Message Type '00011111'B */ + facilityIndicator := '00000010'B, /* Facility indicator, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_FAR_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Facility request message (FAR) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group FAR */ + +group FRJ { +template FRJ_MSG mw_FRJ_CAU(integer p_cauVal) := +/* RX template for Facility reject message (FRJ) with cause value parameterized, and with 'any' optional parameters */ +{ + msgType := '00100001'B, /* Message Type '00100001'B */ + facilityIndicator := ?, /* Facility indicator, F, len=1 */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAU(p_cauVal,?,*), /* Cause indicators, V, len=3-? */ + optionalParameters := mw_FRJ_OPTIONAL_PARAMS_any, /* SET: optional parameters of Facility reject message (FRJ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template FRJ_MSG mw_FRJ_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Facility reject message (FRJ) with User-to-user indicators parameterized.*/ +{ + msgType := '00100001'B, /* Message Type '00100001'B */ + facilityIndicator := ?, /* Facility indicator, F, len=1 */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAUI_PAR_lv_any, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_FRJ_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Facility reject message (FRJ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group FRJ */ + +group GRA { +template GRA_MSG mw_GRA := +/* RX template for Circuit group reset acknowledgement message (CGRA) with 'any'-optional parameters */ +{ + msgType := '00101001'B, /* Message Type '00101001'B */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group GRA */ + +group GRS { +template GRS_MSG m_GRS := +/* TX template for Circuit group reset message (GRS).*/ +{ + msgType := '00010111'B, /* Message Type '00010111'B */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=2 */ +} +} /* end group GRS */ + +group IAM { +template IAM_MSG m_IAM_MSG_Def := +/* TX template for Initial address message (IAM) without optional parameters except Calling Party Numberr.*/ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_BasicCall + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN, + template ATP_PAR_tlv p_ATP, + template USI_PAR_tlv p_USI, + template USIP_PAR_tlv p_USIP) := +/* TX template for Initial address message (IAM) with parametrized NCI, FCI, CGC, TMR, CDN, USI, USIP and ATP parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(p_CDN, 4), /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, omit, omit, + p_ATP, + p_USI, + omit, omit, + p_USIP, + omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CLI + (template CGN_PAR_tlv p_CGN, + template GNU_PAR_tlv p_GNU) := +/* TX template for Initial address message (IAM) with parametrized CGN and GNU parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(p_CGN, + omit, omit, omit, + omit, omit, omit, + omit, omit, omit, + p_GNU, + omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CUG + (template OFCI_PAR_tlv p_OFCI, + template CUGIC_PAR_tlv p_CUGIC) := +/* TX template for Initial address message (IAM) with parametrized OFCI and CUGIC parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + p_OFCI, + omit, omit, + p_CUGIC, + omit, omit, omit, + omit, omit, omit, + omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CDIV + (template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template OCN_PAR_tlv p_OCN) := +/* TX template for Initial address message (IAM) with parametrized RDN, RDI and OCN parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, + p_RDN, + p_RDI, + omit, + p_OCN, + omit, omit, omit, omit, + omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_UUS + (template UUIF_PAR_tlv p_UUIF, + template UUID_PAR_tlv p_UUID) := +/* TX template for Initial address message (IAM) with parametrized UUIF and UUID parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, omit, + p_UUIF, + omit, omit, + p_UUID, + omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_OtherParameters + (template UTSI_PAR_tlv p_UTSI, + template HPC_PAR_tlv p_HPC) := +/* TX template for Initial address message (IAM) with parametrized HPC and UTSI parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, + omit, omit, omit, omit, + omit, omit, omit, + p_UTSI, + p_HPC), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_Def := +/* RX template for Initial address message (IAM) with 'any'-values */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_anyOpt + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN) := +/* RX template for Initial address message (IAM) with 'any'-optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + +template IAM_MSG mw_IAM_MSG_BasicCall + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN, + template USI_PAR_tlv p_USI, + template USIP_PAR_tlv p_USIP, + template TMRP_PAR_tlv p_TMRP) := +/* RX template for Initial address message (IAM) with parametrized USI, USIP and TMRP parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + p_USI, /* User service information, O, len=4-13 */ + mw_GNU_PAR_tlv_any ifpresent, + p_USIP, /* User service information prime, O, len=4-13 */ + mw_UTSI_PAR_tlv_any ifpresent, + p_TMRP, /* Transmission medium requirement prime, O, len=3 */ + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_ATP(template ATP_PAR_tlv p_ATP) := +/* RX template for Initial address message (IAM) with parametrized ATP parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + p_ATP, /* Access transport, O, len=3-? */ + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_OIP_OIR + (template CGN_PAR_tlv p_CGN, + template GNU_PAR_tlv p_GNU) := +/* RX template for Initial address message (IAM) with parametrized CGN and GNU parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (p_CGN, /* Calling party number, O, len=4-? */ + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + p_GNU, /* Generic number, O, len=5-? */ + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_CDIV + (template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template OCN_PAR_tlv p_OCN) := +/* RX template for Initial address message (IAM) with parametrized RDN, RDI and OCN parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + p_RDN, /* Redirecting number, O, len=4-? */ + p_RDI, /* Redirection information, O, len=3-4 */ + mw_CUGIC_PAR_tlv_any ifpresent, + p_OCN, /* Original called number, O, len=4-? */ + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_CUG + (template OFCI_PAR_tlv p_OFCI, + template CUGIC_PAR_tlv p_CUGIC) := +/* RX template for Initial address message (IAM) with parametrized OFCI and CUGIC parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + p_OFCI, /* Optional forward call indicators, O, len=3 */ + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + p_CUGIC, /* Closed user group interlock code, O, len=6 */ + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_OtherParameters + (template UUIF_PAR_tlv p_UUIF, + template UTSI_PAR_tlv p_UTSI, + template HPC_PAR_tlv p_HPC) := +/* RX template for Initial address message (IAM) with parametrized UUIF, USTI and HPC parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + p_UUIF, /* User-to-user information, O, len=3-131 */ + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + p_UTSI, /* User teleservice information, O, len=4-5 */ + mw_TMRP_PAR_tlv_any ifpresent, + p_HPC /* Hop counter, O, len=3 */ + ), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +} /* end group IAM */ + +group IDR { +template IDR_MSG m_IDR_MRQI(template MCRI_PAR_tlv p_MRQI) := +/* TX template for Identification request message (IDR) with MCID request indicators parameterized, and with no other optional parameters */ +{ + msgType := '00110110'B, /* Message Type '00110110'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_IDR_USED_OPTIONAL_PARAMS(p_MRQI), /* SET: optional parameters of Identification request message (IDR) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group IDR */ + +group INF { +template INF_MSG m_INF := +/* TX template for Information message (INF) with Calling party number parameter, and with no other optional parameters */ +{ + msgType := '00000100'B, /* Message Type '00000100'B */ + informationIndicators := m_IID_PAR_v, /* Information indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_INF_USED_OPTIONAL_PARAMS, /* SET: optional parameters of Information message (INF) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group INF */ + +group INR { +template INR_MSG mw_INR := +/* RX template for Information request message (INR) with 'any' optional values */ +{ + msgType := '00000011'B, /* Message Type '00000011'B */ + informationRequestIndicators := mw_IRI_PAR_v, /* Information request indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_INR_OPTIONAL_PARAMS_any, /* SET: optional parameters of Inforation requeste message (INR) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group INR */ + +group IRS { +template IRS_MSG mw_IRS_MRSI(template MCRS_PAR_tlv p_MRSI) := +/* RX template for Identification response message (IRS) with MCID response indicators parameterized and with 'any' other values */ +{ + msgType := '00110111'B, /* Message Type '00110111'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_IRS_USED_OPTIONAL_PARAMS(p_MRSI), /* SET: optional parameters of Identification response message (IRS) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group IRS */ + +group LOP { +template LOP_MSG mw_LOP_LPI(template LPPI_PAR_tlv p_LPI) := +/* TX template for Loop prevention message (LOP) with Loop prevention indicators parameterized and with 'any' other optional parameters */ +{ + msgType := '01000000'B, /* Message Type '01000000'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_LOP_USED_OPTIONAL_PARAMS(p_LPI), /* SET: optional parameters of Loop prevention message (LOP) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template LOP_MSG m_LOP_LPI(template LPPI_PAR_tlv p_LPI) := +/* TX template for Loop prevention message (LOP) with Loop prevention indicators parameterized and with no other optional parameters */ +{ + msgType := '01000000'B, /* Message Type '01000000'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_LOP_USED_OPTIONAL_PARAMS(p_LPI), /* SET: optional parameters of Loop prevention message (LOP) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group LOP */ + +group REL { +template REL_MSG m_REL(integer p_cauVal) := +/* TX template for Release message (REL) with Cause Indicators parameterized, and without optional parameters */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + causeIndicators := m_CAU(p_cauVal), /* Cause indicators, V, len=3-? */ + optionalParameters := omit, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template REL_MSG mw_REL_MSG_Def := +/* RX template for Release message (REL) with 'any'-values */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAUI_PAR_lv_any, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_REL_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template REL_MSG mw_REL(template CAUI_PAR_lv p_CAU) := +/* RX template for Release message (REL) with Cause Indicators parameterized. */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := p_CAU, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_REL_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group REL */ + +group RLC { +template RLC_MSG m_RLC_MSG_Def := +/* TX template for Release complete message (RLC) without optional parameters */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template RLC_MSG m_RLC_MSG_noOpt := +/* TX template for Release complete message (RLC) without optional parameters */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /*SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template RLC_MSG mw_RLC := +/* RX template for Release complete message (RLC) with 'any'-values */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_RLC_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group RLC */ + +group RSC { +template RSC_MSG m_RSC := +/* TX template for Reset circuit message (RSC) */ +{ + msgType := '00010010'B /* Message Type '00010010'B */ +} +} /* end group RSC */ + +group SAM { +template SAM_MSG m_SAM_SQN(template SNN_PAR_lv p_SNN) := +/* TX template for Subsequent address message (SAM) with subsequent number parameterized and without optional parameters */ +{ + msgType := '00000010'B, /* Message Type '00000010'B */ + pSNN := '00000010'B, /* Pointer to parameter 'Subsequent number'. */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + subsequentNumber := p_SNN, /* Subsequent number, V, len=3-? */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} +} /* end group SAM */ + +template UNKNOWN_MSG m_UNKNOWN_MCPI(template MCI_PAR_tlv p_MCI) := +/* TX template for an unknown message, with Message compatibility information parameterized, and without other optional parameters.*/ +{ + msgType := PX_ISUP_TX_unknown_message_type, /* Unknown Message Type */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + messageCompatibilityInformation := p_MCI, /* Message compatibility information, O, len=4-? */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group ISUP_BICC_Messages */ + +group ISUP_ASPs { +template ISUP_BICC_MSG_req m_ISUP_MSG_req(Bit12 p_cic, template ISUP_BICC_MSG p_ISUP_BICC_MSG, Bit4 p_SLS) := +/* ASP template used to send an ISUP message */ +{ + serviceIndicatorOctet := m_SIO, /* contents only used if ISUP selected */ + routingLabel := m_RoutingLabel(PX_ISUP_PC_SUT, PX_ISUP_PC_TS, p_SLS), /* contents only evaluated if ISUP selected */ + circuitIdentityCode := m_CIC(p_cic), /* contents only evaluated if ISUP selected */ + callInstanceCode := omit, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template ISUP_BICC_MSG_ind mw_ISUP_MSG_ind(template Bit12 p_cic, template ISUP_BICC_MSG p_ISUP_BICC_MSG, template Bit4 p_SLS) := +/* ASP template used to receive an ISUP message */ +{ + serviceIndicatorOctet := m_SIO, /* contents only used if ISUP selected */ + routingLabel := m_RoutingLabel(PX_ISUP_PC_TS, PX_ISUP_PC_SUT,p_SLS), /* contents only evaluated if ISUP selected */ + circuitIdentityCode := m_CIC(p_cic), /* contents only evaluated if ISUP selected */ + callInstanceCode := omit, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} +} /* end group ISUP_ASPs */ + +group BICC_ASPs{ +template ISUP_BICC_MSG_req m_BICC_MSG_req(CallInstanceCode p_CallInstCode, template ISUP_BICC_MSG p_ISUP_BICC_MSG) := +/* ASP template used to send a BICC message */ +{ + serviceIndicatorOctet := omit, /* contents only used if ISUP selected */ + routingLabel := omit, /* contents only evaluated if ISUP selected */ + circuitIdentityCode := omit, /* contents only evaluated if ISUP selected */ + callInstanceCode := p_CallInstCode, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template ISUP_BICC_MSG_ind mw_BICC_MSG_ind(template CallInstanceCode p_CallInstCode, template ISUP_BICC_MSG p_ISUP_BICC_MSG) := +/* ASP template used to receive a BICC message */ +{ + serviceIndicatorOctet := omit, /* contents only used if ISUP selected */ + routingLabel := omit, /* contents only evaluated if ISUP selected */ + circuitIdentityCode := omit, /* contents only evaluated if ISUP selected */ + callInstanceCode := p_CallInstCode, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template InitializeIsupBicc_req m_InitializeIsup_req := +/* Used to Initialize the ISUP test system. */ +{ + ts_pointCode := PX_ISUP_PC_TS, /* Signalling point code of the TS (ISUP).*/ + sut_pointCode := PX_ISUP_PC_SUT, /*Signalling point code of the SUT (ISUP).*/ + ts_address_isup_bicc := omit, /* Address (e.g. IP) of the TS (ISUP/BICC side). */ + sut_address_isup_bicc := omit /* Address (e.g. IP) of the SUT (ISUP/BICC side). */ +} + +template InitializeIsupBicc_req m_InitializeBicc_req := +/* Used to Initialize the BICC test system. */ +{ + ts_pointCode := omit, /* Signalling point code of the TS (ISUP).*/ + sut_pointCode := omit, /*Signalling point code of the SUT (ISUP).*/ + ts_address_isup_bicc := PX_TS_ADRESS_ISUP_BICC, /* Address (e.g. IP) of the TS (ISUP/BICC side). */ + sut_address_isup_bicc := PX_SUT_ADRESS_ISUP_BICC /* Address (e.g. IP) of the SUT (ISUP/BICC side). */ +} +/* Additional comments: +This ASP is used at the beginning of each test case to initiate the necessary initialization of the +ISUP/BICC part of the test system, particularly the interfaces to the SUT. +If module parameter 'PX_ISUP_Isup' indicates 'falsec', the values of parameters 'ts_pointCode' and 'sut_pointCode' shall +be ignored by the SA. +If module parameter 'PX_ISUP_Isup' indicates 'true', the values of parameters 'ts_address_isup_bicc' and +'sut_address_isup_bicc' may be ignored, if they are not necessary. +Among the initializing actions there shall be: +a) Verification that the ISUP/BICC link is operable between SUT and TS. +b) Verification that the TS is ready to send and receive SIP messages. +Note: It is a matter of TS implementation whether the TS, upon this request, sets up and initializes lower layer connections, if these are not setup. +Other initialization actions may be TS-specific. */ + +template InitializeIsupBicc_cnf mw_InitializeIsupBicc_cnf := +/* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ +{ + result := true /* Indicating success of the whole initialization. */ +} + + +template BearerSetup_req m_BearerSetup_req(CallInstanceCode p_cic) := +/* For BICC: request TS to setup the bearer connection between TS and SUT. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerSetup_acc mw_BearerSetup_acc(CallInstanceCode p_cic) := +/* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ +{ + cic := p_cic, /* Call Instance Code identifying the bearer connection. */ + result := true /* The answer is positive when the bearer connection setup was successful and negative when the bearer connection setup failed. */ +} + +template BearerRelease_req m_BearerRelease_req(CallInstanceCode p_cic) := +/* For BICC: request to release the established bearer connection. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerRelease_cnf m_BearerRelease_cnf(CallInstanceCode p_cic) := +/* For BICC: confirmation that the requested bearer is released. */ +{ + cic := p_cic, /* Call Instance Code identifying the bearer connection. */ + result := true /* Indication that the bearer is successfully released. */ +} + +template BearerSetup_ind mw_Setup_ind(CallInstanceCode p_cic) := +/* Indication that the bearer has been released. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerRelease_ind mw_BearerRelease_ind(CallInstanceCode p_cic) := +/* Indication that the bearer has been released. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} +} /* end group BICC_ASPs */ +} /* end module SipIsup_ISUP_MsgTemplates */ + + diff --git a/IsupAts/SipIsup_ISUP_MsgTypes.ttcn b/IsupAts/SipIsup_ISUP_MsgTypes.ttcn new file mode 100644 index 0000000..ea29010 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_MsgTypes.ttcn @@ -0,0 +1,971 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Message type declarations. +*/ +module SipIsup_ISUP_MsgTypes +{ +import from LibCommon_BasicTypesAndValues all; +import from LibCommon_DataStrings all; +import from LibCommon_TextStrings all; +import from SipIsup_ISUP_ParamTypes all; + +group ISUP_BICC_Messages { +// Union type for all possible ISUP/BICC messages +type union ISUP_BICC_MSG +{ + ACM_MSG aCM_MSG, /* Address complete message (ACM) */ + ANM_MSG aNM_MSG, /* Answer message (ANM) */ + APM_MSG aPM_MSG, /* Application transport message (APM) */ + BLA_MSG bLA_MSG, /* Blocking acknowledgement message (BLA) */ + BLO_MSG bLO_MSG, /* Blocking message (BLO) */ + CCR_MSG cCR_MSG, /* Continuity check request message (CCR) */ + CFN_MSG cFN_MSG, /* Confusion message (CFN) */ + CGB_MSG cGB_MSG, /* Circuit group blocking message (CGB) */ + CGBA_MSG cGBA_MSG, /* Circuit group blocking acknowledgement message (CGBA) */ + CGQ_MSG cGQ_MSG, /* Circuit group query message (CGQ) */ + CGQR_MSG cGQR_MSG, /* Circuit group query response message (CGQR) */ + GRS_MSG gRS_MSG, /* Circuit group reset message (GRS) */ + GRA_MSG gRA_MSG, /* Circuit group reset acknowledgement message (GRA) */ + CGU_MSG cGU_MSG, /* Circuit group unblocking message (CGU) */ + CGUA_MSG cGUA_MSG, /* Circuit group unblocking acknowledgement message (CGUA) */ + CON_MSG cON_MSG, /* Connect message (CON) */ + CPG_MSG cPG_MSG, /* Call progress message (CPG) */ + COT_MSG cOT_MSG, /* Continuity message (COT) */ + FAA_MSG fAA_MSG, /* Facility accepted message (FAA) */ + FAC_MSG fAC_MSG, /* Facility message (FAC) */ + FRJ_MSG fRJ_MSG, /* Facility reject message (FRJ) */ + FAR_MSG fAR_MSG, /* Facility request message (FAR) */ + FTR_MSG fTR_MSG, /* Forward transfer message (FTR) */ + IAM_MSG iAM_MSG, /* Initial address message (IAM) */ + INF_MSG iNF_MSG, /* Information message (INF) */ + INR_MSG iNR_MSG, /* Information request message (INR) */ + IDR_MSG iDR_MSG, /* Identification request message (IDR) */ + IRS_MSG iRS_MSG, /* Identification response message (IRS) */ + LBA_MSG lBA_MSG, /* Loop back acknowledgement message (LBA) */ + LOP_MSG lOP_MSG, /* Loop prevention message (LOP) */ + NRM_MSG nRM_MSG, /* Network resource management message (NRM) */ + OVL_MSG oVL_MSG, /* Overload message (OVL) */ + PRI_MSG pRI_MSG, /* Pre-release information message (PRI) */ + REL_MSG rEL_MSG, /* Release message (REL) */ + RES_MSG rES_MSG, /* Resume message (RES) */ + RLC_MSG rLC_MSG, /* Release complete message (RLC) */ + RSC_MSG rSC_MSG, /* Reset circuit message (RSC) */ + SAM_MSG sAM_MSG, /* Subsequent address message (SAM) */ + SDN_MSG sDN_MSG, /* Subsequent Directory Number message (SDN) */ + SEG_MSG sEG_MSG, /* Segmentation message (SEG) */ + SUS_MSG sUS_MSG, /* Suspend message (SUS) */ + UBA_MSG uBA_MSG, /* Unblocking acknowledgement message (UBA) */ + UBL_MSG uBL_MSG, /* Unblocking message (UBL) */ + UPA_MSG uPA_MSG, /* User Part available message (UPA) */ + UPT_MSG uPT_MSG, /* User Part test message (UPT) */ + UQC_MSG uQC_MSG, /* Unequipped CIC message (UQC) */ + UUI_MSG uUI_MSG, /* User-to-user information message (UUI) */ + UNKNOWN_MSG uNKNOWN_MSG /* Message with undefined message type*/ +} + +type record ACM_MSG /* Address complete message (ACM) */ +{ + Bit8 msgType ('00000110'B), /* Message Type '00000110'B */ + BCI_PAR_v backwardCallIndicators, /* Backward call indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + ACM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Address complete message (ACM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x06)"; } + +type set ACM_OPTIONAL_PARAMS /* SET: optional parameters of Address complete message (ACM) */ +{ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CAUI_PAR_tlv causeIndicators optional, /* Cause indicators, O, len=4-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CDI_PAR_tlv callDiversionInformation optional, /* Call diversion information, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + UAI_PAR_tlv uIDActionIndicators optional, /* UID action indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + CCPI_PAR_tlv cCNRPossibleIndicator optional, /* CCNR possible indicator, O, len=3 */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + UNKNOWN_PAR_tlv unknownParameter optional /* Unknown parameter */ +} + +type record ANM_MSG /* Answer message (ANM) */ +{ + Bit8 msgType('00001001'B), /* Message Type '00001001'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + ANM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Answer message (ANM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +//with { encode "present=bytes(1,0x09)"; } + +type set ANM_OPTIONAL_PARAMS /* SET: optional parameters of Answer message (ANM) */ +{ + BCI_PAR_tlv backwardCallIndicators optional, /* Backward call indicators, O, len=4 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + DIF_PAR_tlv displayInformation optional, /* Display information, O, len=3-? */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=1-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3 */ +} + +type record APM_MSG /* Application transport message (APM) */ +{ + Bit8 msgType('01000001'B), /* Message Type '01000001'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + APM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Application transport message (APM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x41)"; } + +type set APM_OPTIONAL_PARAMS /* SET: optional parameters of Application transport message (APM) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional /* Application transport parameter2, O, len=5-? */ +} + +type record BLA_MSG /* Blocking acknowledgement message (BLA) */ +{ + Bit8 msgType ('00010101'B) /* Message Type '00010101'B */ +} +//with { encode "present=bytes(1,0x15)"; } + +type record BLO_MSG /* Blocking message (BLO) */ +{ + Bit8 msgType ('00010011'B) /* Message Type '00010011'B */ +} +//with { encode "present=bytes(1,0x13)"; } + +type record CCR_MSG /* Continuity check request message (CCR) */ +{ + Bit8 msgType ('00010001'B) /* Message Type '00010001'B */ +} +//with { encode "present=bytes(1,0x11)"; } + +type record CFN_MSG /* Confusion message (CFN) */ +{ + Bit8 msgType ('00101111'B), /* Message Type '00101111'B */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2F)"; } + +type record CGB_MSG /* Circuit group blocking message (CGB) */ +{ + Bit8 msgType ('00011000'B), /* Message Type '00011000'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x18)"; } + +type record CGBA_MSG /* Circuit group blocking acknowledgement message (CGBA) */ +{ + Bit8 msgType ('00011010'B), /* Message Type '00011010'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x1A)"; } + +type record CGQ_MSG /* Circuit group query message (CGQ) */ +{ + Bit8 msgType ('00101010'B), /* Message Type '00101010'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=2 */ +} +with { encode "present=bytes(1,0x2A)"; } + +type record CGQR_MSG /* Circuit group query response message (CGQR) */ +{ + Bit8 msgType ('00101011'B), /* Message Type '00101011'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + Bit8 pCSI, /* Pointer to parameter 'Circuit state indicator'. */ + RAS_PAR_lv rangeAndStatus, /* Range and status, V, len=2 */ + CSI_PAR_lv circuitStateIndicator /* Circuit state indicator, V, len=2-33 */ +} +with { encode "present=bytes(1,0x2B)"; } + +type record CGU_MSG /* Circuit group unblocking message (CGU) */ +{ + Bit8 msgType ('00011001'B), /* Message Type '00011001'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x19)"; } + +type record CGUA_MSG /* Circuit group unblocking acknowledgement message (CGUA) */ +{ + Bit8 msgType ('00011011'B), /* Message Type '00011011'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x1B)"; } + +type record CON_MSG /* Connect message (CON) */ +{ + Bit8 msgType ('00000111'B), /* Message Type '00000111'B */ + BCI_PAR_v backwardCallIndicators, /* Backward call indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CON_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Connect message (CON) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x07)"; } + +type set CON_OPTIONAL_PARAMS /* SET: optional parameters of Connect message (CON) */ +{ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3 */ +} + +type record COT_MSG /* Continuity message (COT) */ +{ + Bit8 msgType ('00000101'B), /* Message Type '00000101'B */ + COI_PAR_v continuityIndicators /* Continuity indicators, F, len=1 */ +} +with { encode "present=bytes(1,0x05)"; } + +type record CPG_MSG /* Call progress message (CPG) */ +{ + Bit8 msgType ('00101100'B), /* Message Type '00101100'B */ + EIF_PAR_v eventInformation, /* Event information, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CPG_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Call progress message (CPG) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2C)"; } + +type set CPG_OPTIONAL_PARAMS /* SET: optional parameters of Call progress message (CPG) */ +{ + CAUI_PAR_tlv causeIndicators optional, /* Cause indicators, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + BCI_PAR_tlv backwardCallIndicators optional, /* Backward call indicators, O, len=4 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CDI_PAR_tlv callDiversionInformation optional, /* Call diversion information, O, len=3 */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTN_PAR_tlv callTransferNumber optional, /* Call transfer number, O, len=4-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + UAI_PAR_tlv uIDActionIndicators optional, /* UID action indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + CCPI_PAR_tlv cCNRPossibleIndicator optional, /* CCNR possible indicator, O, len=3 */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + UNKNOWN_PAR_tlv unknownParameter optional /* Unknown parameter */ +} + +type record CPG_MSG_unknown_parameter /* Call progress message (CPG) with one unknown optional parameters */ +{ + Bit8 msgType ('00101100'B), /* Message Type '00101100'B */ + EIF_PAR_v eventInformation, /* Event information, F, len=1 */ + Bit8 pOptional ('00000001'B), /* Pointer to optional parameters. */ + UNKNOWN_PAR_tlv unknownParameter, /* Unknown parameter */ + EOP endOfOptionalParameters ('00000000'B) /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2C)"; } + +type record FAA_MSG /* Facility accepted message (FAA) */ +{ + Bit8 msgType ('00100000'B), /* Message Type '00100000'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAA_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility accepted message (FAA) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x20)"; } + +type set FAA_OPTIONAL_PARAMS /* SET: optional parameters of Facility accepted message (FAA) */ +{ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record FAC_MSG /* Facility message (FAC) */ +{ + Bit8 msgType('00110011'B), /* Message Type '00110011'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAC_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility message (FAC) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x33)"; } + +type set FAC_OPTIONAL_PARAMS /* SET: optional parameters of Facility message (FAC) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + CTN_PAR_tlv callTransferNumber optional, /* Call transfer number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=4-? */ + PRI_PAR_tlv pivotRoutingIndicators optional, /* Pivot routing indicators, O, len=3 */ + PST_PAR_tlv pivotStatus optional, /* Pivot status, O, len=3 */ + PICN_PAR_tlv pivotCounter optional, /* Pivot counter, O, len=3 */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3-? */ +} + +type record FAR_MSG /* Facility request message (FAR) */ +{ + Bit8 msgType ('00011111'B), /* Message Type '00011111'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility request message (FAR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x1F)"; } + +type set FAR_OPTIONAL_PARAMS /* SET: optional parameters of Facility request message (FAR) */ +{ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record FRJ_MSG /* Facility reject message (FRJ) */ +{ + Bit8 msgType('00100001'B), /* Message Type '00100001'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + FRJ_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility reject message (FRJ) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x21)"; } + +type set FRJ_OPTIONAL_PARAMS /* SET: optional parameters of Facility reject message (FRJ) */ +{ + UUID_PAR_tlv userToUserIndicators optional /* User-to-user indicators, O, len=3 */ +} + +type record FTR_MSG /* Forward transfer message (FTR) */ +{ + Bit8 msgType('00001000'B), /* Message Type '00001000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FTR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Forward transfer message (FTR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x08)"; } + +type set FTR_OPTIONAL_PARAMS /* SET: optional parameters of Forward transfer message (FTR) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record GRA_MSG /* Circuit group reset acknowledgement message (GRA) */ +{ + Bit8 msgType ('00101001'B), /* Message Type '00101001'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x29)"; } + +type record GRS_MSG /* Circuit group reset message (GRS) */ +{ + Bit8 msgType ('00010111'B), /* Message Type '00010111'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=2 */ +} +with { encode "present=bytes(1,0x17)"; } + +type record IAM_MSG /* Initial address message (IAM) */ +{ + Bit8 msgType ('00000001'B), /* Message Type '00000001'B */ + NCI_PAR_v natureOfConnectionIndicators, /* Nature of connection indicators, F, len=1 */ + FCI_PAR_v forwardCallIndicators, /* Forward call indicators, F, len=2 */ + CGC_PAR_v callingPartysCategory, /* Calling party's category, F, len=1 */ + TMR_PAR_v transmissionMediumRequirement, /* Transmission medium requirement, F, len=1 */ + Bit8 pCDN, /* Pointer to parameter 'Called party number'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CDN_PAR_lv calledPartyNumber, /* Called party number, V, len=4-? */ + IAM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Initial address message (IAM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x01)"; } + +type set IAM_OPTIONAL_PARAMS /* SET: optional parameters of Initial address message (IAM) */ +{ + TNS_PAR_tlv transitNetworkSelection optional, /* Transit network selection, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + OFCI_PAR_tlv optionalForwardCallIndicators optional, /* Optional forward call indicators, O, len=3 */ + RDN_PAR_tlv redirectingNumber optional, /* Redirecting number, O, len=4-? */ + RDI_PAR_tlv redirectionInformation optional, /* Redirection information, O, len=3-4 */ + CUGIC_PAR_tlv closedUserGroupInterlockCode optional, /* Closed user group interlock code, O, len=6 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + OCN_PAR_tlv originalCalledNumber optional, /* Original called number, O, len=4-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + USI_PAR_tlv userServiceInformation optional, /* User service information, O, len=4-13 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + PDC_PAR_tlv propagationDelayCounter optional, /* Propagation delay counter, O, len=4 */ + USIP_PAR_tlv userServiceInformationPrime optional, /* User service information prime, O, len=4-13 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + GDG_PAR_tlv genericDigits1 optional, /* Generic digits1, O, len=4-? */ + GDG_PAR_tlv genericDigits2 optional, /* Generic digits2, O, len=4-? */ + OIPC_PAR_tlv originationISCPointCode optional, /* Origination ISC point code, O, len=4 */ + UTSI_PAR_tlv userTeleserviceInformation optional, /* User teleservice information, O, len=4-5 */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + MLPP_PAR_tlv mLPPPrecedence optional, /* MLPP precedence, O, len=8 */ + TMRP_PAR_tlv transmissionMediumRequirementPrime optional, /* Transmission medium requirement prime, O, len=3 */ + LON_PAR_tlv locationNumber optional, /* Location number, O, len=4-? */ + FGVNS_PAR_tlv forwardGVNS optional, /* Forward GVNS, O, len=5-26 */ + CCSS_PAR_tlv cCSS optional, /* CCSS, O, len=3-? */ + NMC_PAR_tlv networkManagementControls optional, /* Network management controls, O, len=3-? */ + CAM_PAR_tlv circuitAssignmentMap optional, /* Circuit assignment map, O, len=6-7 */ + CRI_PAR_tlv correlationId optional, /* Correlation id, O, len=3-? */ + CDTI_PAR_tlv callDiversionTreatmentIndicators optional, /* Call diversion treatment indicators, O, len=3-? */ + CIN_PAR_tlv calledINNumber optional, /* Called IN number, O, len=4-? */ + COTI_PAR_tlv callOfferingTreatmentIndicators optional, /* Call offering treatment indicators, O, len=3-? */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + SCFI_PAR_tlv sCFId optional, /* SCF id, O, len=3-? */ + UCI_PAR_tlv uIDCapabilityIndicators optional, /* UID capability indicators, O, len=3-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + HPC_PAR_tlv hopCounter optional, /* Hop counter, O, len=3 */ + CCRQ_PAR_tlv collectCallRequest optional, /* Collect call request, O, len=3 */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + PICP_PAR_tlv pivotCapability optional, /* Pivot capability, O, len=3 */ + CDIN_PAR_tlv calledDirectoryNumber optional, /* Called directory number, O, len=5-? */ + OCI_PAR_tlv originalCalledINNumber optional, /* Original called IN number, O, len=4-? */ + CGL_PAR_tlv callingGeodeticLocation optional, /* Calling geodetic location, O, len=3-? */ + NRN_PAR_tlv networkRoutingNumber optional, /* Network routing number, O, len=4-? */ + QRC_PAR_tlv queryOnReleaseCapability optional, /* Query on release capability, O, len=3 */ + PICN_PAR_tlv pivotCounter optional, /* Pivot counter, O, len=3 */ + PRFI_PAR_tlv pivotRoutingForwardInformation optional, /* Pivot routing forward information, O, len=3-? */ + RCP_PAR_tlv redirectCapability optional, /* Redirect capability, O, len=3 */ + RCN_PAR_tlv redirectCounter optional, /* Redirect counter, O, len=3 */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + RFI_PAR_tlv redirectForwardInformation optional, /* Redirect forward information, O, len=3-? */ + NPFI_PAR_tlv numberPortabilityForwardInformation optional, /* Number portability forward information, O, len=1-? */ + ARR_PAR_tlv automaticReRouting optional /* Automatic re-routing, O, len=4-? */ +} + +type record IDR_MSG /* Identification request message (IDR) */ +{ + Bit8 msgType('00110110'B), /* Message Type '00110110'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + IDR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Identification request message (IDR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x36)"; } + +type set IDR_OPTIONAL_PARAMS /* SET: optional parameters of Identification request message (IDR) */ +{ + MCRI_PAR_tlv mCIDRequestIndicators optional, /* MCID request indicators, O, len=3 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record INF_MSG /* Information message (INF) */ +{ + Bit8 msgType ('00000100'B), /* Message Type '00000100'B */ + IID_PAR_v informationIndicators, /* Information indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + INF_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Information message (INF) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x04)"; } + +type set INF_OPTIONAL_PARAMS /* SET: optional parameters of Information message (INF) */ +{ + CGC_PAR_tlv callingPartysCategory optional, /* Calling party's category, O, len=3 */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + NSF_PAR_tlv networkSpecificFacility optional /* Network specific facility, O, len=4-? */ +} + +type record INR_MSG /* Information request message (INR) */ +{ + Bit8 msgType ('00000011'B), /* Message Type '00000011'B */ + IRI_PAR_v informationRequestIndicators, /* Information request indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + INR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Information request message (INR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x03)"; } + +type set INR_OPTIONAL_PARAMS /* SET: optional parameters of Information request message (INR) */ +{ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record IRS_MSG /* Identification response message (IRS) */ +{ + Bit8 msgType('00110111'B), /* Message Type '00110111'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + IRS_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Identification response message (IRS) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x37)"; } + +type set IRS_OPTIONAL_PARAMS /* SET: optional parameters of Identification response message (IRS) */ +{ + MCRS_PAR_tlv mCIDResponseIndicators optional, /* MCID response indicators, O, len=3 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional /* Generic number2, O, len=5-? */ +} + +type record LBA_MSG /* Loop back acknowledgement message (LBA) */ +{ + Bit8 msgType ('00100100'B) /* Message Type '00100100'B */ +} +//with { encode "present=bytes(1,0x24)"; } + +type record LOP_MSG /* Loop prevention message (LOP) */ +{ + Bit8 msgType('01000000'B), /* Message Type '01000000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + LOP_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Loop prevention message (LOP) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x40)"; } + +type set LOP_OPTIONAL_PARAMS /* SET: optional parameters of Loop prevention message (LOP) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CTR_PAR_tlv callTransferReference optional, /* Call transfer reference, O, len=3 */ + LPPI_PAR_tlv loopPreventionIndicators optional /* Loop prevention indicators, O, len=3 */ +} + +type record NRM_MSG /* Network resource management message (NRM) */ +{ + Bit8 msgType('00110010'B), /* Message Type '00110010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + NRM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Network resource management message (NRM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x32)"; } + +type set NRM_OPTIONAL_PARAMS /* SET: optional parameters of Network resource management message (NRM) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + ECI_PAR_tlv echoControlInformation optional /* Echo control information, O, len=3 */ +} + +type record OVL_MSG /* Overload message (OVL) */ +{ + Bit8 msgType ('00110000'B) /* Message Type '00110000'B */ +} +//with { encode "present=bytes(1,0x30)"; } + +type record PRI_MSG /* Pre-release information message (PRI) */ +{ + Bit8 msgType('01000010'B), /* Message Type '01000010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + PRI_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Pre-release information message (PRI) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x42)"; } + +type set PRI_OPTIONAL_PARAMS /* SET: optional parameters of Pre-release information message (PRI) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + OFCI_PAR_tlv optionalForwardCallIndicators optional, /* Optional forward call indicators, O, len=3 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional /* Application transport parameter2, O, len=5-? */ +} + +type record REL_MSG /* Release message (REL) */ +{ + Bit8 msgType ('00001100'B), /* Message Type '00001100'B */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + REL_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Release message (REL) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0C)"; } + +type set REL_OPTIONAL_PARAMS /* SET: optional parameters of Release message (REL) */ +{ + RDI_PAR_tlv redirectionInformation optional, /* Redirection information, O, len=3-4 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + SPC_PAR_tlv signallingPointCode optional, /* Signalling point code, O, len=4 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ACL_PAR_tlv automaticCongestionLevel optional, /* Automatic congestion level, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + DIF_PAR_tlv displayInformation optional, /* Display information, O, len=3-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + RCN_PAR_tlv redirectCounter optional, /* Redirect counter, O, len=3 */ + RBI_PAR_tlv redirectBackwardInformation optional /* Redirect backward information, O, len=3-? */ +} + +type record RES_MSG /* Resume message (RES) */ +{ + Bit8 msgType ('00001110'B), /* Message Type '00001110'B */ + SRI_PAR_v suspendResumeIndicators, /* Suspend Resume indicators, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + RES_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Resume message (RES) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0E)"; } + +type set RES_OPTIONAL_PARAMS /* SET: optional parameters of Resume message (RES) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record RLC_MSG /* Release complete message (RLC) */ +{ + Bit8 msgType('00010000'B), /* Message Type '00010000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + RLC_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Release complete message (RLC) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +//with { encode "present=bytes(1,0x010)"; } + +type set RLC_OPTIONAL_PARAMS /* SET: optional parameters of Release complete message (RLC) */ +{ + CAUI_PAR_tlv causeIndicators optional /* Cause indicators, O, len=5-6 */ +} + +type record RSC_MSG /* Reset circuit message (RSC) */ +{ + Bit8 msgType ('00010010'B) /* Message Type '00010010'B */ +} +//with { encode "present=bytes(1,0x12)"; } + +type record SAM_MSG /* Subsequent address message (SAM) */ +{ + Bit8 msgType ('00000010'B), /* Message Type '00000010'B */ + Bit8 pSNN, /* Pointer to parameter 'Subsequent number'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SNN_PAR_lv subsequentNumber, /* Subsequent number, V, len=3-? */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +}with { encode "present=bytes(1,0x02)"; } + +type record SDN_MSG /* Subsequent Directory Number message (SDN) */ +{ + Bit8 msgType('01000011'B), /* Message Type '01000011'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SDN_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Subsequent Directory Number message (SDN) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x43)"; } + + +type set SDN_OPTIONAL_PARAMS /* SET: optional parameters of Subsequent Directory Number message (SDN) */ +{ + SNN_PAR_tlv subsequentNumber optional, /* Subsequent number, O, len=4-? */ + MCI_PAR_tlv messageCompatibilityInformation optional /* Message compatibility information, O, len=4-? */ +} + +type record SEG_MSG /* Segmentation message (SEG) */ +{ + Bit8 msgType('00111000'B), /* Message Type '00111000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SEG_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Segmentation message (SEG) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x38)"; } + +type set SEG_OPTIONAL_PARAMS /* SET: optional parameters of Segmentation message (SEG) */ +{ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + GDG_PAR_tlv genericDigits1 optional, /* Generic digits1, O, len=4-? */ + GDG_PAR_tlv genericDigits2 optional, /* Generic digits2, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional /* Generic number2, O, len=5-? */ +} + +type record SUS_MSG /* Suspend message (SUS) */ +{ + Bit8 msgType ('00001101'B), /* Message Type '00001101'B */ + SRI_PAR_v suspendResumeIndicators, /* Suspend Resume indicators, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SUS_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Suspend message (SUS) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0D)"; } + +type set SUS_OPTIONAL_PARAMS /* SET: optional parameters of Suspend message (SUS) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record UBA_MSG /* Unblocking acknowledgement message (UBA) */ +{ + Bit8 msgType ('00010110'B) /* Message Type '00010110'B */ +} +//with { encode "present=bytes(1,0x16)"; } + +type record UBL_MSG /* Unblocking message (UBL) */ +{ + Bit8 msgType ('00010100'B) /* Message Type '00010100'B */ +} +//with { encode "present=bytes(1,0x14)"; } + +type record UPA_MSG /* User Part available message (UPA) */ +{ + Bit8 msgType('00110101'B), /* Message Type '00110101'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UPA_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User Part available message (UPA) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x35)"; } + +type set UPA_OPTIONAL_PARAMS /* SET: optional parameters of User Part available message (UPA) */ +{ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record UPT_MSG /* User Part test message (UPT) */ +{ + Bit8 msgType('00110100'B), /* Message Type '00110100'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UPT_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User Part test message (UPT) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x34)"; } + +type set UPT_OPTIONAL_PARAMS /* SET: optional parameters of User Part test message (UPT) */ +{ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record UQC_MSG /* Unequipped CIC message (UQC) */ +{ + Bit8 msgType ('00101110'B) /* Message Type '00101110'B */ +} +//with { encode "present=bytes(1,0x2E)"; } + +type record UUI_MSG /* User-to-user information message (UUI) */ +{ + Bit8 msgType ('00101101'B), /* Message Type '00101101'B */ + Bit8 pUUIF, /* Pointer to parameter 'User-to-user information'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UUIF_PAR_lv userToUserInformation, /* User-to-user information, V, len=2-130 */ + UUI_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User-to-user information message (UUI) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2D)"; } + +type set UUI_OPTIONAL_PARAMS /* SET: optional parameters of User-to-user information message (UUI) */ +{ + ATP_PAR_tlv accessTransport optional /* Access transport, O, len=3-? */ +} + +type record UNKNOWN_MSG /* Message with unknown message type */ +{ + Bit8 msgType, /* Unknown Message Type, e.g. '01001010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + MCI_PAR_tlv messageCompatibilityInformation, /* Message compatibility information, O, len=4-? */ + EOP endOfOptionalParameters /* End of optional parameters, O, len=1 */ +} +} /* end group ISUP_BICC_Messages */ + +group ISUP_BICC_ASPs { +type record ISUP_BICC_MSG_req /* ASP used to send an ISUP/BICC message */ +{ + ServiceIndicatorOctet serviceIndicatorOctet optional, /* contents only evaluated if ISUP selected */ + RoutingLabel routingLabel optional, /* contents only evaluated if ISUP selected */ + CircuitIdentityCode circuitIdentityCode optional, /* contents only evaluated if ISUP selected */ + CallInstanceCode callInstanceCode optional, /* contents only evaluated if BICC selected */ + ISUP_BICC_MSG iSUP_BICC_MSG optional /* common part of ISUP/BICC message */ +} with { encode "ISUPCodec" } + +/* Additional comments: +The SA takes from the ASP, depending on the value of module parameter 'PX_ISUP_Isup', either the +ordered combination of 'serviceIndicatorOctet', 'routingLabel' and 'circuitIdentityCode' (ISUP), +or 'callInstanceCode' (BICC'), puts it in front of encoded parameter 'iSUP_BICC_MSG', and sends the +so constructed message at the ISUP or BICC interface respectively.*/ + + +type record ISUP_BICC_MSG_ind /* ASP used to receive an ISUP/BICC message */ +{ + ServiceIndicatorOctet serviceIndicatorOctet optional, /* contents only evaluated if ISUP selected */ + RoutingLabel routingLabel optional, /* contents only evaluated if ISUP selected */ + CircuitIdentityCode circuitIdentityCode optional, /* contents only evaluated if ISUP selected */ + CallInstanceCode callInstanceCode optional, /* contents only evaluated if BICC selected */ + ISUP_BICC_MSG iSUP_BICC_MSG optional /* common part of ISUP/BICC message */ +} with { encode "ISUPCodec" } +/* Additional comments: +The SA takes from the received message, depending on the value of module parameter 'PX_ISUP_Isup', +either the ordered combination of 'serviceIndicatorOctet', 'routingLabel' and +'circuitIdentityCode' (ISUP), or 'callInstanceCode' (BICC'), and puts it into the associated ASP +parameters. The complementary ASP parameters 'callInstanceCode' (ISUP) and combination of +'serviceIndicatorOctet', 'routingLabel' and 'circuitIdentityCode' (BICC) are filled by the SA with '0' bits +according to the lengths of their types. +The TE does not evaluate the contents of the complementary parameters (but needs the coorect lengths +to identify the start of 'iSUP_BICC_MSG'. +The received message (body) is put by the SA into parameter 'iSUP_BICC_MSG' and is matched in the ATS with an according receive template.*/ +} /* end group ISUP_BICC_ASPs */ + +group BICC_ASPs { +type record InitializeIsupBicc_req /* ASP used to Initialize the ISUP/BICC part of the test system. */ +{ + Bit14 ts_pointCode optional, /* Signalling point code of the TS (ISUP). */ + Bit14 sut_pointCode optional, /* Signalling point code of the SUT (ISUP). */ + octetstring ts_address_isup_bicc optional, /* Address (e.g. IP) of the TS (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. */ + octetstring sut_address_isup_bicc optional /* Address (e.g. IP) of the SUT (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. */ +} +/* Additional comments: +This ASP is used at the beginning of each test case to initiate the necessary initialization of the +ISUP/BICC part of the test system, particularly the interfaces to the SUT. +If module parameter 'PX_ISUP_Isup' indicates 'false', the values of parameters 'ts_pointCode' and 'sut_pointCode' shall +be ignored by the SA. +If module parameter 'PX_ISUP_Isup' indicates 'true', the values of parameters 'ts_address_isup_bicc' and +'sut_address_isup_bicc' may be ignored, if they are not necessary. +Among the initializing actions there shall be: +a) Verification that the ISUP/BICC link is operable between SUT and TS. +b) Verification that the TS is ready to send and receive SIP messages. +Note: It is a matter of TS implementation whether the TS, upon this request, sets up and initializes lower layer connections, if these are not setup. +Other initialization actions may be TS-specific. */ + +type record InitializeIsupBicc_cnf /* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ +{ + boolean result /* Indicating success or non-success of the whole initialization. */ +} + +type record BearerSetup_req /* For BICC: request TS to setup the bearer connection between TS and SUT. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerSetup_acc /* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ +{ + CallInstanceCode cic, /* Call Instance Code identifying the bearer connection. */ + boolean result /* The answer is positive when the bearer connection setup was successful and negative when the bearer connection setup failed. */ +} + +type record BearerRelease_req /* For BICC: request to release the established bearer connection. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerRelease_cnf /* For BICC: confirmation that the requested bearer is released. */ +{ + CallInstanceCode cic, /* Call Instance Code identifying the bearer connection. */ + boolean result /* Indication of whether the bearer is successfully released. */ +} + +type record BearerSetup_ind /* Indication of that the bearer has been setup. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerRelease_ind /* Indication of whether the bearer is successfully released. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} +} /* end group BICC_ASPs */ +} /* end module SipIsup_ISUP_MsgTypes */ diff --git a/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn b/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn new file mode 100644 index 0000000..7d657ca --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn @@ -0,0 +1,3672 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-parameter templates. +*/ +module SipIsup_ISUP_ParamTemplates +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTypes all; + +group MessageHeader { +template CircuitIdentityCode m_CIC(template Bit12 p_Cicv) := +/* template for the CIC parameter */ +{ + cicv := p_Cicv, /* cic value */ + spare := '0000'B /* spare */ +} + +template CircuitIndicator mw_CircuitIndicator_any := +/* Default RX template for type CircuitIndicator with wildcards for simple types */ +{ + maintenanceBlockingState := ?, /* bits BA: Maintenance blocking state */ + callProcessingState := ?, /* bits DC: Call processing state */ + hardwareBlockingState := ?, /* bits F E: Hardware blocking state (Note) */ + spare := '00'B /* bits H-G: spare */ +} + +template RoutingLabel m_RoutingLabel(template Bit14 p_Dpc, template Bit14 p_Opc,template Bit4 p_Sls) := +/* template for the routing label */ +{ + dpc := p_Dpc, /* destination point code */ + opc := p_Opc, /* origination point code */ + sls := p_Sls /* sls */ +} + +template ServiceIndicatorOctet m_SIO := +/* Default TX template for type ServiceIndicatorOctet with parametrization for non-ext/spare-fields */ +{ + userPartIdentification := '0101'B, /* User part identification, '5'H for ISUP */ + spare := '00'B, /* Spare */ + networkIndicator := PX_ISUP_NW_IND /* Network indicator */ +} +} /* end group MessageHeader */ + +group Parameter { +group ATP { +template ATP_PAR_tlv m_ATP_BCAP(BearerCapability p_bcap, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Bearer capability. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := {p_bcap}, /* Q.931 information element Bearer capability */ + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_BCAP_PI(BearerCapability p_bcap, ProgressIndicator p_pi, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Bearer capability and Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := {p_bcap}, /* Q.931 information element Bearer capability */ + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_CLSU := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Calling sub-address (default value). */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := f_calc_length_atp_cgps({bearerCapability := omit, highLayerCompatibility := omit, lowLayerCompatibility := omit, progressIndicator := omit, calledPartySubaddress := omit, callingPartySubaddress := m_cgps, connectedSubaddress := omit},3), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := m_cgps, /* Q.931 Calling sub-address */ + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_CNSU := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Connected sub-address (default value). */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := f_calc_length_atp_cods({bearerCapability := omit, highLayerCompatibility := omit, lowLayerCompatibility := omit, progressIndicator := omit, calledPartySubaddress := omit, callingPartySubaddress := omit, connectedSubaddress := m_cons},3), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := m_cons /* Q.931 information element Connected sub-address */ + } + } +} + +template ATP_PAR_tlv m_ATP_HLC(HighLayerCompatibilities p_hlc, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information elements High layer compatibility. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability :=omit, + highLayerCompatibility := p_hlc, /* Q.931 information element High layer compatibility */ + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_HLC_PI(HighLayerCompatibility p_hlc, ProgressIndicator p_pi) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information elements High layer compatibility and Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := '00001000'B, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := {p_hlc}, /* Q.931 information element High layer compatibility */ + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_LLC(LowLayerCompatibility p_llc, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Low Layer Compatibility. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := p_llc, /* Q.931 information element Low Layer Compatibility */ + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_PI(ProgressIndicator p_pi) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := '00000100'B, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability :=omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv mw_ATP_PAR_tlv_any := +/* Default RX template for type ATP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := { anyInformationElements := ? } /* Any Q.931 information elements */ +} + +template ATP_PAR_tlv mw_ATP_HLC(template HighLayerCompatibility p_hlc) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element hlc, highLayerCharacteristicsIdentification parameterized and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := p_hlc, /* Q.931 High layer compatibility */ + lowLayerCompatibility := *, + progressIndicator := *, + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template ATP_PAR_tlv mw_ATP_LLC(template LowLayerCompatibility p_llc) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element llc and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := *, + lowLayerCompatibility := p_llc, /* Q.931 Low layer compatibility */ + progressIndicator := *, + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template ATP_PAR_tlv mw_ATP_PI(template ProgressIndicator p_pi) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element pi, progressDescription parameterized and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := *, + lowLayerCompatibility := *, + progressIndicator := p_pi, /* Q.931 Progress Indicator */ + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template BearerCapability m_bcap_InfoTrfCap(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* TX template for Q.931 Bearer Capability information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='00000100'B, /* Information Element Type '00000100'B */ + iELen :='00000101'B, /* Information Element Length field */ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + +template BearerCapability m_bcap_Std(Bit5 p_InfoTrfCap) := +/* TX template for Q.931 Bearer Capability information element, with Information transfer capabilty and User information layer 1 protocol parameterized.*/ +{ + iEType :='00000100'B, /* Information Element Type '00000100'B */ + iELen :='00000010'B, /* Information Element Length field */ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := omit, + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + +template BCAP_octet3 m_BCAP_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default TX template for type BCAP_octet3 with Information transfer capability parameterized and default values otherwise.*/ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := '00'B, /* Coding standard = CCITT standardized coding */ + ext := '1'B /* Extension */ +} + +template BCAP_octet4 m_BCAP_octet4_Std := +/* Default TX template for type BCAP_octet4 with default values.*/ +{ + informationTransferRate := '10000'B, /* Information transfer rate = 64 kbit/s */ + transferMode := '00'B, /* Transfer mode = circuit mode*/ + ext := '1'B, /* Extension */ + rateMultiplier := omit /* Rate multiplier */ +} + +template BCAP_octet5 m_BCAP_octet5_Std(Bit5 p_UserInfoL1) := +/* Default TX template for type BCAP_octet5 with User information Layer 1 protocol parameterized and default values otherwise.*/ +{ + userInformationLayer1Protocol := p_UserInfoL1, /* User information Layer 1 protocol */ + layerIdentification := '01'B, /* Layer identification = Recommendation G.711 A-law */ + ext := '1'B, /* Extension */ + bCAP_octet5a := omit, + bCAP_octet5b1 := omit, + bCAP_octet5b2 := omit, + bCAP_octet5c := omit, + bCAP_octet5d := omit +} + +template BCAP_octet6 m_BCAP_octet6_Std := +/* Default TX template for type BCAP_octet6 with Module parameters for non-ext/spare-fields */ +{ + userInformationLayer2Protocol := '00010'B, /* User information Layer 2 protocol = Recommendation Q.921 */ + layerIdentification := '10'B, /* Layer identification = Layer 2 */ + ext := '1'B /* Extension */ +} + +template BCAP_octet7 m_BCAP_octet7_Std := +/* Default TX template for type BCAP_octet7 with Module parameters for non-ext/spare-fields */ +{ + userInformationLayer3Protocol := '00010'B, /* User information Layer 3 protocol = Recommendation Q.931 */ + layerIdentification := '11'B, /* Layer identification = Layer 3*/ + ext := '1'B /* Extension */ +} + +template BCAP_octet3 mw_BCAP_octet3_any := +/* Default RX template for type BCAP_octet3 with wildcards for simple types */ +{ + informationTransferCapability := ?, /* Information transfer capability */ + codingStandard := ?, /* Coding standard */ + ext := ? /* Extension */ +} + +template BCAP_octet4 mw_BCAP_octet4_any := +/* Default RX template for type BCAP_octet4 with wildcards for simple types */ +{ + informationTransferRate := ?, /* Information transfer rate */ + transferMode := ?, /* Transfer mode */ + ext := ?, /* Extension */ + rateMultiplier := * /* Rate multiplier */ +} + +template BCAP_octet5 mw_BCAP_octet5_any := +/* Default RX template for type BCAP_octet5 with 'any' template values for structured types, and wildcards for simple types */ +{ + userInformationLayer1Protocol := ?, /* User information Layer 1 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ?, /* Extension */ + bCAP_octet5a := mw_BCAP_octet5a_any ifpresent, + bCAP_octet5b1 := mw_BCAP_octet5b1_any ifpresent, + bCAP_octet5b2 := mw_BCAP_octet5b2_any ifpresent, + bCAP_octet5c := mw_BCAP_octet5c_any ifpresent, + bCAP_octet5d := mw_BCAP_octet5d_any ifpresent +} + +template BCAP_octet5a mw_BCAP_octet5a_any := +/* Default RX template for type BCAP_octet5a with wildcards for simple types */ +{ + userRate := ?, /* User rate */ + negot := ?, /* Negotiation */ + synch_asynch := ?, /* Synchronous/asynchronous */ + ext := ? /* Extension */ +} + +template BCAP_octet5b1 mw_BCAP_octet5b1_any := +/* Default RX template for type BCAP_octet5b1 with wildcards for simple types */ +{ + spare := '0'B, /* Spare */ + flowControlOnRx := ?, /* Flow control on reception (Rx) */ + flowControlOnTx := ?, /* Flow control on transmission (Tx) */ + nICOnRx := ?, /* Network independent Clock (NIC) on reception (Rx) */ + nICOnTx := ?, /* Network independent Clock (NIC) on transmission (Tx) */ + intermediateRate := ?, /* Intermediate rate */ + ext := ? /* Extension */ +} + +template BCAP_octet5b2 mw_BCAP_octet5b2_any := +/* Default RX template for type BCAP_octet5b2 with wildcards for simple types */ +{ + spare := '0'B, /* Spare */ + inbandOutbandNegotiation := ?, /* In-band/out-band negotiation */ + assignorAssignee := ?, /* Assignor/assignee */ + lLINegotiation := ?, /* Logical link identifier negotiation */ + mode := ?, /* Mode of operation */ + multiFrameSupport := ?, /* Multiple frame establishment support in data link */ + hdrNoHdr := ?, /* rate addaption header/no header */ + ext := ? /* Extension */ +} + +template BCAP_octet5c mw_BCAP_octet5c_any := +/* Default RX template for type BCAP_octet5c with wildcards for simple types */ +{ + parity := ?, /* Parity information */ + numberOfDataBits := ?, /* Number of data bits excluding parity bit if present*/ + numberOfStopBits := ?, /* Number of stop bits */ + ext := ? /* Extension */ +} + +template BCAP_octet5d mw_BCAP_octet5d_any := +/* Default RX template for type BCAP_octet5d with wildcards for simple types */ +{ + modemType := ?, /* Modem type */ + duplexMode := ?, /* Duplex mode*/ + ext := ? /* Extension */ +} + +template BCAP_octet6 mw_BCAP_octet6_any := +/* Default RX template for type BCAP_octet6 with wildcards for simple types */ +{ + userInformationLayer2Protocol := ?, /* User information Layer 2 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ? /* Extension */ +} + +template BCAP_octet7 mw_BCAP_octet7_any := +/* Default RX template for type BCAP_octet7 with wildcards for simple types */ +{ + userInformationLayer3Protocol := ?, /* User information Layer 3 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ? /* Extension */ +} + +template BCAP_octet3 mw_BCAP_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default RX template for type BCAP_octet3 with wildcards for simple types */ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := ?, /* Coding standard */ + ext := ? /* Extension */ +} + +template BCAP_octet5 mw_BCAP_octet5_Std(Bit5 p_UserInfoL1) := +/* Default RX template for type BCAP_octet5 with 'any' template values for structured types, and wildcards for simple types */ +{ + userInformationLayer1Protocol := p_UserInfoL1, /* User information Layer 1 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ?, /* Extension */ + bCAP_octet5a := mw_BCAP_octet5a_any ifpresent, + bCAP_octet5b1 := mw_BCAP_octet5b1_any ifpresent, + bCAP_octet5b2 := mw_BCAP_octet5b2_any ifpresent, + bCAP_octet5c := mw_BCAP_octet5c_any ifpresent, + bCAP_octet5d := mw_BCAP_octet5d_any ifpresent +} + +template CallingPartySubaddress m_cgps := +/* TX template for Q.931 Calling party subaddress information element, with all default values */ +{ + iEType := '01101101'B, /* Information Element Type '01101101'B */ + iELen := int2bit((lengthof (PX_ISUP_TX_cgps_information) + 1), 8 ), /* Information Element Length field */ + spare := '000'B, /* Spare */ + oddEven := PX_ISUP_TX_cgps_odd_even_indicator, /* OE */ + typeOfSubaddress := PX_ISUP_TX_cgps_type_of_subaddress, /* Type of Subaddress */ + ext := '1'B, /* Extension */ + subaddressInformation := PX_ISUP_TX_cgps_information /* Subaddress Information */ +} + +template ConnectedSubaddress m_cons := +/* TX template for Q.931 information element Connected sub-address (default value). */ +{ + iEType := '01001101'B, /* Information Element Type '01001101'B */ + iELen := int2bit((lengthof(PX_ISUP_TX_connsub_information) + 1), 8), /* Information Element Length field */ + spare := '000'B, /* Spare */ + oddEven := PX_ISUP_TX_connsub_odd_even_indicator, /* OE */ + typeOfSubaddress := PX_ISUP_TX_connsub_type_of_subaddress, /* Type of Subaddress */ + ext := '1'B, /* Extension */ + subaddressInformation := PX_ISUP_TX_connsub_information /* Subaddress Information */ +} + +template LowLayerCompatibility m_llc_InfoTrfCap(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* TX template for Q.931 Low Layer Compatibility information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='01111100'B, /* Information Element Type '01111100'B */ + iELen :='00000010'B, /* Information Element Length field */ + lLC_octet3 := m_LLC_octet3_Std(p_InfoTrfCap), + lLC_octet4 := m_BCAP_octet4_Std, + lLC_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + lLC_octet6 := omit, + lLC_octet7 := omit +} + +template LowLayerCompatibility m_llc_Std(Bit5 p_InfoTrfCap) := +/* TX template for Q.931 Low Layer Compatibility information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='01111100'B, /* Information Element Type '01111100'B */ + iELen :='00000010'B, /* Information Element Length field */ + lLC_octet3 := m_LLC_octet3_Std(p_InfoTrfCap), + lLC_octet4 := m_BCAP_octet4_Std, + lLC_octet5 := omit, + lLC_octet6 := omit, + lLC_octet7 := omit +} + +template LLC_octet3 m_LLC_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default TX template for type LLC_octet3 with Information transfer capability parameterized and default values otherwise.*/ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := '00'B, /* Coding standard = CCITT standardized coding */ + extension_3 := '1'B, /* Extension */ + spare6 := omit, /* Spare */ + negotiationIndicator := omit, /* Negotiation indicator */ + extension_3a := omit /* Extension */ +} + +template HighLayerCompatibility m_hlc(Bit7 p_hlcId) := +/* TX template for Q.931 High Layer Compatibility information element, with highLayerCharacteristicsIdentification parameterized.*/ +{ + iEType := '01111101'B, /* Information Element Type '01111101'B */ + iELen := '00000010'B, /* Information Element Length field */ + presentation := '01'B, /* High layer protocol profile */ + interpretation := '100'B, /* First (primary or only) high layer characteristics */ + codingStandard := '00'B, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlcId, /* High Layer Characteristics Identification */ + ext2 := '1'B, /* Extension */ + extendedHighLayerCharacteristicsIdentification := omit, /* Extended high layer characteristics identification */ + ext3 := omit, /* Extension */ + extendedVideotelephonyCharacteristicsIdentification := omit, /* Extended videotelephony characteristics identification */ + ext4 := omit /* Extension */ +} + +template ProgressIndicator m_pi(Bit7 p_progInd) := +/* RX template for Q.931 Progress Indicator information element, with progressDescription parameterized and any-values otherwise.*/ +{ + iEType := '00011110'B, /* Information Element Type '00011110'B */ + iELen := '00000010'B, /* Information Element Length field */ + location := '0000'B, /* Location */ + spare := '0'B, /* Spare */ + codingStandard := '00'B, /* Coding Standard */ + ext1 := '1'B, /* Extension */ + progressDescription := p_progInd, /* Progress Description */ + ext2 := '1'B /* Extension */ +} + +template HighLayerCompatibility mw_hlc(Bit7 p_hlcId) := +/* RX template for Q.931 High Layer Compatibility information element, with highLayerCharacteristicsIdentification parameterized and any-values otherwise.*/ +{ + iEType := '01111101'B, /* Information Element Type '01111101'B */ + iELen := ?, /* Information Element Length field */ + presentation := ?, /* High layer protocol profile */ + interpretation := ?, /* First (primary or only) high layer characteristics */ + codingStandard := ?, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlcId, /* Facsimile Group 2/3 */ + ext2 := '1'B, /* Extension */ + extendedHighLayerCharacteristicsIdentification := *, /* Extended high layer characteristics identification */ + ext3 := *, /* Extension */ + extendedVideotelephonyCharacteristicsIdentification := *, /* Extended videotelephony characteristics identification */ + ext4 := * /* Extension */ +} + +template ProgressIndicator mw_pi(Bit7 p_progInd) := +/* RX template for Q.931 Progress Indicator information element, with progressDescription parameterized and any-values otherwise.*/ +{ + iEType := '00011110'B, /* Information Element Type '00011110'B */ + iELen := '00000010'B, /* Information Element Length field */ + location := ?, /* Location */ + spare := '0'B, /* Spare */ + codingStandard := ?, /* Coding Standard */ + ext1 := '1'B, /* Extension */ + progressDescription := p_progInd, /* Progress Description */ + ext2 := '1'B /* Extension */ +} +} /* end group ATP */ + +group BCI { +template BCI_PAR_v m_BCI_cpStatInd(Bit2 p_cldPstatInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator parameterized and default values otherwise. */ +{ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_BCI_v_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := PX_ISUP_TX_BCI_v_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := PX_ISUP_TX_BCI_v_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v m_BCI(Bit2 p_cldPstatInd, + Bit1 p_interwInd, + Bit1 p_iSDNUserPartInd, + Bit1 p_iSDNAccessInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator, Interworking indicator, ISDN User Part indicator and ISDN Access indicator parameterized and default values otherwise. */ +{ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_tlv m_BCI_tlv(Bit2 p_cldPstatInd, + Bit1 p_interwInd, + Bit1 p_iSDNUserPartInd, + Bit1 p_iSDNAccessInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator, Interworking indicator, ISDN User Part indicator and ISDN Access indicator parameterized and default values otherwise. */ +{ + paramType := '00010001'B, /* Parameter Type '00010001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_PAR_v_any := +/* Default RX template for type BCI_PAR_v with wildcards for simple types */ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_tlv mw_BCI_PAR_tlv_any := +/* Default RX template for type BCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010001'B, /* Parameter Type '00010001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpStatInd(Bit2 p_cldPstatInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_iwEnc := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator = 'interworking encountered' and any-values otherwise*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd1 := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Called party status indicator = 'no indication' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd2(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd3 := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Called party status indicator = 'no indication', Interworking indicator = 'interworking encountered', ISDN user part indicator = 'ISUP not used all the way' and ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := c_BCI_isdnUpInd_NotUsed, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpCat_3alt(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpCat_3alt2(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatSubsFree(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_subFree, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatSubsFree_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_subFree, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatNoInd_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} +} /* end group BCI */ + +group CAU { +template CAUI_PAR_lv m_CAU(integer p_cauVal) := +/* Default TX template for Cause indicators parameter (CAUI); Mandatory Variable (V) format. */ +{ + paramLen := '00000010'B, /* Parameter Length field */ + location := '0000'B, /* location */ + spare := '0'B, /* spare */ + codingStandard := '00'B, /* codingStandard */ + ext1 := '1'B, /* Extension */ + causeValue := int2bit(p_cauVal, 7), /* Cause value */ + ext2 := '1'B, /* Extension */ + diagnostics := omit /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_lv mw_CAUI_PAR_lv_any := +/* Default RX template for type CAUI_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + location := ?, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := ?, /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := * /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_tlv mw_CAUI_PAR_tlv_any := +/* Default RX template for type CAUI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010010'B, /* Parameter Type '00010010'B */ + paramLen := ?, /* Parameter Length field */ + location := ?, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := ?, /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := * /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_lv mw_CAU(template integer p_cauVal, + template Bit4 p_location, + template octetstring p_diagnostics) := +/* TX template for Cause indicators parameter (CAUI); Mandatory Variable (V) format, with cause value parameterized and diagnostics = '2A'O. */ +{ + paramLen := '00000011'B, /* Parameter Length field */ + location := p_location, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := int2bit(p_cauVal, 7), /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := p_diagnostics /* Diagnostic(s) */ +} +} /* end group CAU */ + +group CCPI { +template CCPI_PAR_tlv m_CCPI_Def := +/* TX template for CCNR possible indicator parameter (CCPI); Optional(O) format, with all default values. */ +{ + paramType := '01111010'B, /* Parameter Type '01111010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCNRPossibleIndicator := '1'B, /* bit A: CCNR possible indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CCPI_PAR_tlv mw_CCPI_PAR_tlv_any := +/* Default RX template for type CCPI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111010'B, /* Parameter Type '01111010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCNRPossibleIndicator := ?, /* bit A: CCNR possible indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group CCPI */ + +group CDI { +template CDI_PAR_tlv m_CDI_Def := +/*TX template for Call diversion information parameter (CDI); Optional(O) format, with all default values. */ +{ + paramType := '00110110'B, /* Parameter Type '00110110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationSubscriptionOptions := '000'B, /* bits CBA: Notification subscription options */ + redirectingReason := '0011'B, /* bits GFED: Redirecting reason */ + spare := '0'B /* bit H: spare */ +} + +template CDI_PAR_tlv mw_CDI_PAR_tlv_any := +/* Default RX template for type CDI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110110'B, /* Parameter Type '00110110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationSubscriptionOptions := ?, /* bits CBA: Notification subscription options */ + redirectingReason := ?, /* bits GFED: Redirecting reason */ + spare := '0'B /* bit H: spare */ +} +} /* end group CDI */ + +group CDN { +template CDN_PAR_lv m_CDN_PAR_Def := +/* Default TX template for Called party number parameter (CDN); Variable(V) format. */ +{ + paramLen := f_calc_paramLen(PX_ISUP_IAM_CLD_digits_txDef, true, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_CLD_natAddr_txDef, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_IAM_CLD_digits_txDef, true), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + iNN := c_CLD_intNtwNum_alwd, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_IAM_CLD_digits_txDef, true) /* address signals */ +} + +template CDN_PAR_lv m_CDN(Bit7 p_natAddrInd, + charstring p_digits, + boolean p_sendCmpl) := +/* TX template for Called party number parameter (CDN); Optional (O) format, with Nature of address indicator and address digits parameterized, sending complete sent, and default values otherwise. */ +{ + paramLen := f_calc_paramLen(p_digits, p_sendCmpl, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, p_sendCmpl), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + iNN := c_CLD_intNtwNum_alwd, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(p_digits, p_sendCmpl) /* address signals */ +} + +template CDN_PAR_lv mw_CDN_PAR_lv_any := +/* Default RX template for type CDN_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} + +template CDN_PAR_lv mw_CDN(template Bit7 p_natAddrInd, + template Bit3 p_numPlanInd, + template Bit1 p_intNtwNum) := +/* RX template for Called party number parameter (CDN); Mandatory Variable(MV) format, with Internal network number indicator, Numbering plan indicator and Nature of Address parameterized. */ +{ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := p_numPlanInd, /* Numbering plan indicator */ + iNN := p_intNtwNum, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} +} /* end group CDN */ + +group CGN { +template CGN_PAR_tlv m_CGN_PAR_Def := +/* TX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address = 'National number', Screening indicator = 'network provided', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed', number digits = default number. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(PX_ISUP_IAM_CLI_digits_txNat, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := c_CLI_natAddrInd_natSig, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_IAM_CLI_digits_txNat, false), /* O/E */ + screeningIndicator:= c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd := c_CLI_aprInd_alwd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := c_CLI_numIncmplInd_cmpl, /* Number Incomplete Indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_IAM_CLI_digits_txNat, false) /* address signals */ +} + +template CGN_PAR_tlv m_CGN(Bit7 p_natAddrInd, + Bit2 p_screenInd, + Bit2 p_addrPresRestrInd, + charstring p_digits) := +/* TX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address, Screening indicator, Address presentation restricted indicator and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator:= p_screenInd, /* Screening indicator */ + addrPresRestrInd := p_addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := c_CLI_numIncmplInd_cmpl, /* Number Incomplete Indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_PAR_tlv_any := +/* Default RX template for type CGN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=?, /* Screening indicator */ + addrPresRestrInd :=?, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + nII := ?, /* Number Incomplete Indicator */ + addressSignals := * /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restr := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Address presentation restricted indicator = 'presentation restricted by the network' and any-values otherwise. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=?, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restrNtwk, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + nII := ?, /* Number Incomplete Indicator */ + addressSignals := * /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_noDigits := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with address digits = 'absent', Screening indicator = 'network provided', Number incomplete indicator = '0', Numbering plan indicator = '000', Address presentation restricted indicator = 'Address not available', Nature of address indicator = '0000000'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := '00000010'B, /* Parameter Length field */ + natureOfAddressIndicator := '0000000'B, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_aNotAv, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := '000'B, /* Numbering plan indicator */ + nII := '0'B, /* Number incomplete indicator */ + addressSignals := omit /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_allowed(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_alwd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restrP(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restr, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restr_anyNOA(charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator = 'any', address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restr, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restrN(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted by the network'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restrNtwk, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} +} /* end group CGN */ + +group CGSM { +template CGSM_PAR_v m_CGSM_Def := +/* TX template for Circuit Group Supervision Message Type parameter (CGSM); Optional(O) format, with Circuit Group Supervision Message Type Indicator value = 'hardware failure oriented'. */ +{ + cgSupervMTypeIndicator := c_CGBMT_cgSupMtypeInd_hwOrtd, /* bits BA: Circuit group supervision message type indicator */ + spare := '000000'B /* bits H-C: spare */ +} + +template CGSM_PAR_v mw_CGSM_PAR_v_any := +/* Default RX template for type CGSM_PAR_v with wildcards for simple types */ +{ + cgSupervMTypeIndicator := ?, /* bits BA: Circuit group supervision message type indicator */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group CGSM */ + +group COI { +template COI_PAR_v m_COI(template Bit1 p_cti) := +/* TX template for Continuity indicators (COI); Fixed (F) format, with Continuity indicator = 'continuity check successful' (resp. 'continuity'). */ +{ + continuityIndicator := p_cti, /* bit A: Continuity indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template COI_PAR_v mw_COI_PAR_v_any := +/* Default RX template for type COI_PAR_v with wildcards for simple types */ +{ + continuityIndicator := ?, /* bit A: Continuity indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group COI */ + +group CPN { +template CPN_PAR_tlv m_CPN_Def := +/* TX template for Connected number parameter (CPN); Optional(O) format, with default values. */ +{ + paramType := '00100001'B, /* Parameter Type '00100001'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_CPN_addrSignals, false, 2), /* Parameter Length field */ + natureOfaddressindicator := PX_ISUP_TX_CPN_natOfaddressind, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_CPN_addrSignals, false), /* O/E */ + screeningIndicator := PX_ISUP_TX_CPN_screenInd, /* Screening indicator */ + addrPresRestrInd := PX_ISUP_TX_CPN_addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + numberingplanIndicator := PX_ISUP_TX_CPN_numbplanInd, /* Numberingplan indicator */ + spare := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_CPN_addrSignals, false) /* address signals */ +} + +template CPN_PAR_tlv mw_CPN_PAR_tlv_any := +/* Default RX template for type CPN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100001'B, /* Parameter Type '00100001'B */ + paramLen := ?, /* Parameter Length field */ + natureOfaddressindicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE) */ + numberingplanIndicator := ?, /* Numberingplan indicator */ + spare := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group CPN */ + +group CUGIC { +template CUGIC_PAR_tlv mw_CUGIC_PAR_tlv_any := +/* Default RX template for type CUGIC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00011010'B, /* Parameter Type '00011010'B */ + paramLen := '00000100'B, /* Parameter Length field */ + networkIdentity := ?, /* a) Network Identity (NI) (octets 1 and 2) */ + binaryCode := ? /* Binary code */ +} +} /* end group CUGIC */ + +group EIF { +template EIF_PAR_v m_EIF(Bit7 p_eventInd) := +/* TX template for type EIF_PAR_v (Event information) with eventIndicator parameterized and default values otherwise */ +{ + eventIndicator := p_eventInd, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := '0'B /* bit H: Event presentation restricted indicator (national use) */ +} +template EIF_PAR_v mw_EIF_PAR_v_any := +/* Default RX template for type EIF_PAR_v with wildcards for simple types */ +{ + eventIndicator := ?, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := ? /* bit H: Event presentation restricted indicator (national use) */ +} + +template EIF_PAR_v mw_EIF(Bit7 p_eventInd) := +/* RX template for type EIF_PAR_v (Event information) with eventIndicator parameterized and wildcards otherwise */ +{ + eventIndicator := p_eventInd, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := ? /* bit H: Event presentation restricted indicator (national use) */ +} +} /* end group EIF */ + +group FCI { +template FCI_PAR_v m_FCI_Def := +/* Default TX template for Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + natInternatCallIndicator := PX_ISUP_TX_FCI_natInternatCallInd, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := PX_ISUP_TX_FCI_endToEndMethodInd, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_FCI_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := PX_ISUP_TX_FCI_eTOeInfoIndic, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := PX_ISUP_TX_FCI_iSDNUserPartInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := PX_ISUP_TX_FCI_iSDNUserPartPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := PX_ISUP_TX_FCI_iSDNAccessInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := PX_ISUP_TX_FCI_sCCPMethodInd, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := '0000'B /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v m_FCI(template Bit1 p_isdnUpInd, + template Bit1 p_isdnAccInd) := + +/* Default TX template for Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + natInternatCallIndicator := PX_ISUP_TX_FCI_natInternatCallInd, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := PX_ISUP_TX_FCI_endToEndMethodInd, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_FCI_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := PX_ISUP_TX_FCI_eTOeInfoIndic, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := PX_ISUP_TX_FCI_iSDNUserPartPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := p_isdnAccInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := PX_ISUP_TX_FCI_sCCPMethodInd, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := '0000'B /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v mw_FCI_PAR_v_any := +/* Default RX template for type FCI_PAR_v with wildcards for simple types */ +{ + natInternatCallIndicator := ?, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := ?, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := ?, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := ?, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := ?, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := ?, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := ? /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v mw_FCI(template Bit1 p_interwInd, + template Bit1 p_isdnUpInd, + template Bit2 p_isdnUpPrefInd, + template Bit1 p_isdnAccInd) := +/* RX template for Forward call Indicators (FCI); Fixed (F) format, with parametrized and default values. */ +{ + natInternatCallIndicator := ?, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := ?, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := ?, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := p_isdnUpPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := p_isdnAccInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := ?, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := ? /* bits P-M: reserved for national use */ +} +} /* end group FCI */ + +group GNI { +template GNI_PAR_tlv m_GNI(Bit7 p_gNotInd) := +/* TX template for type GNI_PAR_tlv (Generic notification indicator) with notificationIndicator parameterized. */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := p_gNotInd, /* Notification indicator */ + ext := '1'B /* Extension */ +} + +template GNI_PAR_tlv mw_GenNotifInd(Bit7 p_gNotInd) := +/* RX template for type GNI_PAR_tlv (Generic notification indicator) with notificationIndicator parameterized. */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := p_gNotInd, /* Notification indicator */ + ext := '1'B /* Extension */ +} + +template GNI_PAR_tlv mw_GNI_PAR_tlv_any := +/* Default RX template for type GNI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := ?, /* Notification indicator */ + ext := ? /* Extension */ +} +} /* end group GNI */ + +group GNU { +template GNU_PAR_tlv m_GNU_allowed(Bit7 p_natAddrInd, charstring p_digits) := +/* TX template for Generic number parameter (GNU); Optional (O) format, with Nature of address and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed', Number qualifier indicator = 'additional calling party number', and default values otherwise. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := c_GEN_numQualInd_cliNum, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := '01'B, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv m_GNU_restr(Bit7 p_natAddrInd, charstring p_digits) := +/* TX template for Generic number parameter (GNU); Optional (O) format, with Nature of address and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted', Number qualifier indicator = 'additional calling party number', and default values otherwise. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := c_GEN_numQualInd_cliNum, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := '01'B, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_restr, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_PAR_tlv_any := +/* Default RX template for type GNU_PAR_tlv with wildcards for simple types */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := ?, /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := ?, /* Nature of address indicator (NOTE 1) */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := ?, /* Numbering plan indicator (NOTE 2) */ + nI := ?, /* Number incomplete indicator */ + addressSignals := * /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_allowed_up(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user provided', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userProv, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_allowed_upNot(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user-provided/not verified', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userNotVerif, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_restr_upNot(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user-provided/not verified', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userNotVerif, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_restr, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} +} /* end group GNU */ + +group HPC { +template HPC_PAR_tlv m_HPC_Def := +/* TX template for Hop counter (HPC); Optional (O) format, with hop counter value = default. */ +{ + paramType := '00111101'B, /* Parameter Type '00111101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + hopCounter := PX_ISUP_TX_HPC_hopCounter, /* bits EDCBA: Hop counter */ + spare := '000'B /* bits HGF: spare */ +} + +template HPC_PAR_tlv mw_HPC_PAR_tlv_any := +/* Default RX template for type HPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111101'B, /* Parameter Type '00111101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + hopCounter := ?, /* bits EDCBA: Hop counter */ + spare := '000'B /* bits HGF: spare */ +} +} /* end group HPC */ + +group IID { +template IID_PAR_v m_IID_PAR_v := +/* Default RX template for type IID_PAR_v with default values for simple types */ +{ + cliAddrResponseIndicator := c_IID_cliAddress_included, /* bits BA: Calling party address response indicator */ + holdProvidedIndicator := '0'B, /* bit C: Hold provided indicator */ + spare1 := '00'B, /* bits ED: spare */ + cliCatRespIndicator := '0'B, /* bit F: Calling party's category response indicator */ + chargeInfoRespIndicator := '0'B, /* bit G: Charge information response indicator */ + solicitedInfoIndicator := '0'B, /* bit H: Solicited information indicator */ + spare2 := '0000'B, /* bits L-I: spare */ + reserved := '0000'B /* bits P-M: reserved */ +} + +template IID_PAR_v mw_IID_PAR_v_any := +/* Default RX template for type IID_PAR_v with wildcards for simple types */ +{ + cliAddrResponseIndicator := ?, /* bits BA: Calling party address response indicator */ + holdProvidedIndicator := ?, /* bit C: Hold provided indicator */ + spare1 := '00'B, /* bits ED: spare */ + cliCatRespIndicator := ?, /* bit F: Calling party's category response indicator */ + chargeInfoRespIndicator := ?, /* bit G: Charge information response indicator */ + solicitedInfoIndicator := ?, /* bit H: Solicited information indicator */ + spare2 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} +} /* end group IRI */ + +group IRI { +template IRI_PAR_v mw_IRI_PAR_v := +/* Default RX template for type IRI_PAR_v with fixed Calling party address request indicator and wildcards for simple types */ +{ + cliAddrRequestIndicator := c_IRI_cliAddress_req, /* bit A: Calling party address request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator */ + spare1 := '0'B, /* bit C: spare */ + cliCatRequestIndicator := ?, /* bit D: Calling party's category request indicator */ + chargeInfoRequestIndicator := ?, /* bit E: Charge information request indicator */ + spare2 := '00'B, /* bits GF: spare */ + maliciousCidReqIndicator := ?, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + spare3 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} + +template IRI_PAR_v mw_IRI_PAR_v_any := +/* Default RX template for type IRI_PAR_v with wildcards for simple types */ +{ + cliAddrRequestIndicator := ?, /* bit A: Calling party address request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator */ + spare1 := '0'B, /* bit C: spare */ + cliCatRequestIndicator := ?, /* bit D: Calling party's category request indicator */ + chargeInfoRequestIndicator := ?, /* bit E: Charge information request indicator */ + spare2 := '00'B, /* bits GF: spare */ + maliciousCidReqIndicator := ?, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + spare3 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} +} /* end group IRI */ + +group LPPI { +template LPPI_PAR_tlv mw_LPPI_PAR_tlv_any := +/* Default RX template for type LPPI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + responseIndicator := ?, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} +template LPPI_PAR_tlv mw_LPPI_rsp_insuff := +/* RX template for Loop prevention indicators parameter (LPPI); Optional (O) format, with response indicator value = 'insufficient information'. */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '1'B, /* bit A: Type */ + responseIndicator := c_LPI_lopResponse_insuff, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} + +template LPPI_PAR_tlv mw_LPPI_req_Def := +/* TX template for Loop prevention indicators parameter (LPPI); Optional (O) format, containing 'request'. */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: Type */ + responseIndicator := '00'B, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} +} /* end group LPPI */ + +group MCI { +template MCI_PAR_tlv m_MCI_RelCall := +/* TX template for Message compatibility information parameter (MCI); Optional(O) format, with Instruction Indicators indicating 'release call'. */ +{ + paramType := '00111000'B, /* Parameter Type '00111000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + instructionIndicators := {m_InstructionIndicator_RelCall} +} + +template InstructionIndicator m_InstructionIndicator_RelCall := +/* Default TX template for type InstructionIndicator with Message compatibility information parameters indicating 'release call' */ +{ + transitAtIntermExchIndicator := '1'B, /* bit A: Transit at intermediate exchange indicator */ + releaseCallIndicator := '1'B, /* bit B: Release call indicator */ + sendNotificationIndicator := '0'B, /* bit C: Send notification indicator */ + discardMessageIndicator := '1'B, /* bit D: Discard message indicator */ + passOnNotPossibleIndicator := '0'B, /* bit E: Pass on not possible indicator */ + broadNarrowBandInterwIndicator := '10'B, /* bits G F: Broadband/narrowband interworking indicator */ + ext := '1'B /* extension bit */ +} + +template MCI_PAR_tlv mw_MCI_PAR_tlv_any := +/* Default RX template for type MCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111000'B, /* Parameter Type '00111000'B */ + paramLen := ?, /* Parameter Length field */ + instructionIndicators := ? +} +} /* end group MCI */ + +group MCRI { +template MCRI_PAR_tlv m_MCRI_req := +/* TX template for MCID request indicators parameter (MCRI); Optional (O) format, with MCID request indicator value = 'MCID requested'. */ +{ + paramType := '00111011'B, /* Parameter Type '00111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDRequestIndicator := c_MRQI_mcidRqInd_req, /* bit A: MCID request indicator */ + holdingIndicator := '0'B, /* bit B: Holding indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} + +template MCRI_PAR_tlv mw_MCRI_PAR_tlv_any := +/* Default RX template for type MCRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111011'B, /* Parameter Type '00111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDRequestIndicator := ?, /* bit A: MCID request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group MCRI */ + +group MCRS { +template MCRS_PAR_tlv m_MCRS_notIncl := +/* TX template for MCID response indicators parameter (MCRS); Optional (O) format, with MCID response indicator value = 'MCID not included'. */ +{ + paramType := '00111100'B, /* Parameter Type '00111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDResponseIndicator := c_MRSI_mcidRsInd_notIncl, /* bit A: MCID response indicator */ + holdProvidedIndicator := ?, /* bit B: Hold provided indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} + +template MCRS_PAR_tlv mw_MCRS_PAR_tlv_any := +/* Default RX template for type MCRS_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111100'B, /* Parameter Type '00111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDResponseIndicator := ?, /* bit A: MCID response indicator */ + holdProvidedIndicator := ?, /* bit B: Hold provided indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group MCRS */ + +group NCI { +template NCI_PAR_v m_NCI_Def := +/* Default TX template for Nature of connection indicators parameter (NCI); Fixed(F) format. */ +{ + satelliteIndicator := PX_ISUP_TX_NCI_satelliteInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := PX_ISUP_TX_NCI_contCheckInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_NCI_echoContrDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v m_NCI(template Bit2 p_cotChkInd) := +/* TX template for Nature of connection indicators (NCI); Fixed (F) format, with parametrized Continuity check indicator and all other values = default. */ +{ + satelliteIndicator := PX_ISUP_TX_NCI_satelliteInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := p_cotChkInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_NCI_echoContrDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v mw_NCI_PAR_v_any := +/* Default RX template for type NCI_PAR_v with wildcards for simple types */ +{ + satelliteIndicator := ?, /* bits BA: Satellite indicator */ + continuityCheckIndicator := ?, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := ?, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v mw_NCI(template Bit2 p_satInd, + template Bit2 p_cotChkInd, + template Bit1 p_eCtrlDevInd) := +/* RX template for Nature of connection indicators (NCI); Fixed (F) format, with Continuity check indicator parameterized and any-values otherwise. */ +{ + satelliteIndicator := p_satInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := p_cotChkInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := p_eCtrlDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} +} /* end group NCI */ + +group OBCI { +template OBCI_PAR_tlv m_OBCI_cDivMay := +/* TX template for Optional backward call indicators parameter (OBCI), with Call diversion may occur indicator = 'call diversion may occur' and default values otherwise.*/ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := '0'B, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := c_OBCI_cDivMayOcc_mayOcc, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := '0'B, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := '0'B, /* bit D: MLPP user indicator */ + reserved := '0000'B /* bits H-E: reserved for national use */ +} + +template OBCI_PAR_tlv m_OBCI_iBandInd(Bit1 p_inBandInfoInd) := +/* TX template for Optional backward call indicators parameter (OBCI), with In-band information indicator parameterized and default values otherwise. */ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := p_inBandInfoInd, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := '0'B, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := '0'B, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := '0'B, /* bit D: MLPP user indicator */ + reserved := '0000'B /* bits H-E: reserved for national use */ +} + +template OBCI_PAR_tlv mw_OBCI_PAR_tlv_any := +/* Default RX template for type OBCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := ?, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := ?, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := ?, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := ?, /* bit D: MLPP user indicator */ + reserved := ? /* bits H-E: reserved for national use */ +} +} /* end group OBCI */ + +group OCN { +template OCN_PAR_tlv m_OCN_Def := +/* TX template for Original called number parameter (OCN); Optional (O) format, with all default values. */ +{ + paramType := '00101000'B, /* Parameter Type '00101000'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_OCN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_OCN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_OCN_addrSignals, false), /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := PX_ISUP_TX_OCN_addrPresRestrInd, /* Address presentation restricted indicator */ + numberingPlanIndicator := PX_ISUP_TX_OCN_numbPlanInd, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_OCN_addrSignals, false) /* address signals */ +} + +template OCN_PAR_tlv mw_OCN_PAR_tlv_any := +/* Default RX template for type OCN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101000'B, /* Parameter Type '00101000'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group OCN */ + +group OFCI { +template OFCI_PAR_tlv m_OFCI_CLIR := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Connected line identity request indicator = 'requested' and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cUGCallIndicator := '00'B, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := '0'B, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := c_OFCI_conLineIdRqInd_req /* bit H: Connected line identity request indicator */ +} + +template OFCI_PAR_tlv m_OFCI_CUG(Bit2 p_cugCallInd) := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Closed user group call indicator parameterized and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cUGCallIndicator := p_cugCallInd, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := '0'B, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := '0'B /* bit H: Connected line identity request indicator */ +} + +template OFCI_PAR_tlv mw_OFCI_PAR_tlv_any := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Closed user group call indicator parameterized and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := ?, /* Parameter Length field */ + cUGCallIndicator := ?, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := ?, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := ? /* bit H: Connected line identity request indicator */ +} +} /* end group OFCI */ + +group PCI { +template PCI_PAR_tlv m_PCI_RelCall := +/* Default TX template for Parameter compatibility information parameter (PCI); Optional(O) format. */ +{ + paramType := '00111001'B, /* Parameter Type '00111001'B */ + paramLen := '00000011'B, /* Parameter Length field */ + parameterInstructionIndicators := {m_ParameterInstructionIndicator_RelCall} +} + +template ParameterInstructionIndicator m_ParameterInstructionIndicator_RelCall := +{ + upgradedParameter := PX_ISUP_TX_unknown_parameter_type, /* upgraded parameter name */ + transitAtIntermExchIndicator := '1'B, /* bit A: Transit at intermediate exchange indicator */ + releaseCallIndicator := '1'B, /* bit B: Release call indicator */ + sendNotificationIndicator := '0'B, /* bit C: Send notification indicator */ + discardMessageIndicator := '1'B, /* bit D: Discard message indicator */ + discardParameterIndicator := '1'B, /* bit E: Discard parameter indicator */ + passOnNotPossibleIndicator := '00'B, /* bits G F: Pass on not possible indicator */ + ext1 := '1'B, /* bit H: Extension indicator (ext.) */ + broadNarrowBandInterwIndicator := '10'B, /* bits J I: Broadband/narrowband interworking indicator */ + spare := '00000'B, /* bits O-K: spare */ + ext2 := '1'B, /* bit P: Extension indicator (ext.) */ + moreInstructionIndicators := omit /* to be defined when required */ +} + +template PCI_PAR_tlv mw_PCI_PAR_tlv_any := +/* Default RX template for type PCI_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00111001'B, /* Parameter Type '00111001'B */ + paramLen := ?, /* Parameter Length field */ + parameterInstructionIndicators := ? +} +} /* end group PCI */ + +group RAS{ +template RAS_PAR_lv m_RAS_Def := +/* Default TX template for Range and status parameter (RAS); Variable(V) format. */ +{ + paramLen := int2bit((lengthof(PX_ISUP_TX_RAS_status) + 1), 8), /* Parameter Length field */ + range := PX_ISUP_TX_RAS_range, /* Range */ + status := PX_ISUP_TX_RAS_status /* Status */ +} + +template RAS_PAR_lv mw_RAS_PAR_lv_any := +/* Default RX template for type RAS_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + range := ?, /* Range */ + status := ? /* Status */ +} +} /* end group RAS */ + +group RDI { +template RDI_PAR_tlv m_RDI_Def := +/* TX template for Redirection information parameter (RDI); Optional (O) format, with all default values. */ +{ + paramType := '00010011'B, /* Parameter Type '00010011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + redirectingIndicator := '011'B, /* bits CBA: Redirecting indicator */ + spare := '0'B, /* Bit D: spare */ + originalRedirectionReason := '0011'B, /* bits H G F E: Original redirection reason */ + redirectionCounter := '001'B, /* bits K J I: Redirection counter */ + reserved := '0'B, /* bit L: reserved for national use */ + redirectingReason := '0011'B /* bits PONM: Redirecting reason */ +} + +template RDI_PAR_tlv mw_RDI_PAR_tlv_any := +/* Default RX template for type RDI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010011'B, /* Parameter Type '00010011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + redirectingIndicator := ?, /* bits CBA: Redirecting indicator */ + spare := '0'B, /* Bit D: spare */ + originalRedirectionReason := ?, /* bits H G F E: Original redirection reason */ + redirectionCounter := ?, /* bits K J I: Redirection counter */ + reserved := ?, /* bit L: reserved for national use */ + redirectingReason := ? /* bits PONM: Redirecting reason */ +} +} /* end group RDI */ + +group RDN { +template RDN_PAR_tlv m_RDN_Def := +/* TX template for Redirecting number parameter (RDN); Optional (O) format, with all default values. */ +{ + paramType := '00001011'B, /* Parameter Type '00001011'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_RDN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_RDN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_RDN_addrSignals, false), /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := PX_ISUP_TX_RDN_addrPresRestrInd, /* Address presentation restricted indicator */ + numberingPlanIndicator := PX_ISUP_TX_RDN_numbPlanInd, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_RDN_addrSignals, false) /* address signals */ +} + +template RDN_PAR_tlv mw_RDN_PAR_tlv_any := +/* Default RX template for type RDN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001011'B, /* Parameter Type '00001011'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group RDN */ + +group RNN { +template RNN_PAR_tlv m_RNN_Def := +/* TX template for type RNN_PAR_tlv (Redirection number parameter) with all default values */ +{ + paramType := '00001100'B, /* Parameter Type '00001100'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_RNN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_RNN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_RNN_addrSignals, false), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := PX_ISUP_TX_RNN_numbPlanInd, /* Numbering plan indicator */ + iNN := PX_ISUP_TX_RNN_iNN, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_RNN_addrSignals, false) /* address signals */ +} + +template RNN_PAR_tlv mw_RNN_PAR_tlv_any := +/* Default RX template for type RNN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001100'B, /* Parameter Type '00001100'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := * /* address signals */ +} +} /* end group RNN */ + +group RNS { +template RNS_PAR_tlv m_RNS_Def := +/* TX template for Redirection number restriction parameter (RNS), Optional(O) format, with all default values. */ +{ + paramType := '01000000'B, /* Parameter Type '01000000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + presRestrIndicator := PX_ISUP_TX_RNS_presRestrInd, /* bits BA: Presentation restricted indicator */ + spare := '000000'B /* bits H-C: spare */ +} + +template RNS_PAR_tlv mw_RNS_PAR_tlv_any := +/* Default RX template for type RNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000000'B, /* Parameter Type '01000000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + presRestrIndicator := ?, /* bits BA: Presentation restricted indicator */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group RNS */ + +group ROP { +template ROP_PAR_tlv m_ROP_comp := +/* TX template for Remote operations parameter (ROP); Optional(O) format. */ +{ + paramType := '00110010'B, /* Parameter Type '00100001'B */ + paramLen := int2bit((lengthof(PX_ISUP_FAC_comp_txDef)+1), 8), /* Parameter Length field */ + protocolProfile := '10001'B, /* Remote operations*/ + spare := '00'B, /* Spare */ + ext := '1'B, /* Extension */ + components := PX_ISUP_FAC_comp_txDef /* Remote operations components */ +} + +template ROP_PAR_tlv mw_ROP_PAR_tlv_any := +/* Default RX template for type ROP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110010'B, /* Parameter Type '00110010'B */ + paramLen := ?, /* Parameter Length field */ + protocolProfile := ?, /* Protocol profile */ + spare := '00'B, /* spare */ + ext := ?, /* Extension */ + components := ? /* ASN.1 components */ +} +} /* end group ROP */ + +group SNN{ +template SNN_PAR_lv m_SNN(charstring p_digits, + boolean p_sendCmpl) := +/* TX template for Subsequent number parameter (SNN); Mandatory Variable (V) format, with address digits and sending complete parameterized, and default values otherwise. */ +{ + paramLen := f_calc_paramLen(p_digits, p_sendCmpl, 1), /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := f_calc_oddeven(p_digits, p_sendCmpl), /* O/E */ + addressSignals := f_char_to_BCD(p_digits, p_sendCmpl) /* address signals */ +} + +template SNN_PAR_lv mw_SNN_PAR_lv_any := +/* Default RX template for type Subsequent number with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} + +template SNN_PAR_tlv mw_SNN_PAR_tlv_any := +/* Default RX template for type SNN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000101'B, /* Parameter Type '00000101'B */ + paramLen := ?, /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} +} /* end group SNN */ + +group SRI { +template SRI_PAR_v m_SRI(Bit1 p_suspResInd) := +/* TX template for Suspend Resume indicators parameter (SRI); Fixed(F) format, with Suspend resume indicator parameterized. */ +{ + suspendResumeIndicator := p_suspResInd, /* bit A: Suspend/resume indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template SRI_PAR_v mw_SRI_PAR_v_any := +/* Default RX template for type SRI_PAR_v with wildcards for simple types */ +{ + suspendResumeIndicator := ?, /* bit A: Suspend/resume indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group SRI */ + +group TMRP { +template TMRP_PAR_tlv mw_TMRP_PAR_tlv_any := +/* Default RX template for type TMRP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111110'B, /* Parameter Type '00111110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumRequirement := ? /* Transmission medium requirement */ +} + +template TMRP_PAR_tlv mw_TMRP_PAR_tlv(Bit8 p_TMR) := +/* Default RX template for type TMRP_PAR_tlv with parametrized Transmission medium requirement */ +{ + paramType := '00111110'B, /* Parameter Type '00111110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumRequirement := p_TMR /* Transmission medium requirement */ +} +} /* end group TMRP */ + +group TMU { +template TMU_PAR_tlv m_TMU(Bit8 p_TMU) := +/* Default RX template for type TMU_PAR_tlv with parametrized Transmission medium used */ +{ + paramType := '00110101'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumUsed := p_TMU /* Transmission medium used */ +} + +template TMU_PAR_tlv mw_TMU_PAR_tlv_any := +/* Default RX template for type TMU_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110101'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumUsed := ? /* Transmission medium used */ +} +} /* end group TMU */ + +group UAI { +template UAI_PAR_tlv m_UAI_connected := +/* TX template for Action indicator (UAI); Optional (O) format, with throughConnInstructionIndicator = 'connected'. */ +{ + paramType := '01110100'B, /* Parameter Type '01110100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + throughConnInstructionIndicator := c_AI_actInd_conn, /* bit A: Through-connection instruction indicator */ + t9TimerInstructionIndicator := '0'B, /* bit B: T9 timer instruction indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := '1'B /* bit H: Extension indicator */ +} + +template UAI_PAR_tlv mw_UAI_PAR_tlv_any := +/* Default RX template for type UAI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110100'B, /* Parameter Type '01110100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + throughConnInstructionIndicator := ?, /* bit A: Through-connection instruction indicator */ + t9TimerInstructionIndicator := ?, /* bit B: T9 timer instruction indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} +} /* end group UAI */ + +group USI { +template USI_PAR_tlv m_USI(template USIContents p_uSIContents, integer p_length) := +/* Default TX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIContents m_USIContents_Std(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* Default TX template for type USIContents with Information transfer capability and User information Layer 1 protocol parameterized, and with default values otherwise (extension octets are omitted).*/ +{ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := m_BCAP_octet6_Std, + bCAP_octet7 := m_BCAP_octet7_Std +} + +template USIContents m_USIContents_InfoTrfCap(Bit5 p_InfoTrfCap) := +/* TX template for type USIContents with Information transfer capability parameterized, and with default values otherwise (octets 5, 6 and 7 and extension octets are omitted).*/ +{ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := omit, + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + + + +template USI_PAR_tlv mw_USI_PAR_tlv_any := +/* Default RX template for type USI_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := mw_USIContents_any +} + +template USIContents mw_USIContents_any := +/* Default RX template for type USIContents with 'any' template values for structured types, and wildcards for simple types */ +{ + bCAP_octet3 := mw_BCAP_octet3_any, + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_any ifpresent, + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} + +template USI_PAR_tlv mw_USI_Std(USIContents p_uSIContents) := +/* Default RX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIContents mw_USIContents_Std(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* Default RX template for type USIContents with Information transfer capability and User information Layer 1 protocol parameterized, and with 'any' template values for other structured types, and wildcards for simple types.*/ +{ + bCAP_octet3 := mw_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} + +template USIContents mw_USIContents_InfoTrfCap(Bit5 p_InfoTrfCap) := +/* RX template for type USIContents with Information transfer capability parameterized, and with 'any' template values for other structured types, and wildcards for simple types.*/ +{ + bCAP_octet3 := mw_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_any ifpresent, + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} +} /* end group USI */ + +group USIP { +template USIP_PAR_tlv m_USIP(template USIContents p_uSIContents, integer p_length) := +/* Default TX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIP_PAR_tlv mw_USIP_PAR_tlv_any := +/* Default RX template for type USIP_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := mw_USIContents_any +} + +template USIP_PAR_tlv mw_USIP_PAR_tlv(USIContents p_uSIContents) := +/* Default RX template for type USIP_PAR_tlv with parametrized Information Transfer Capability, 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := p_uSIContents +} +} /* end group USIP */ + +group UTSI { +template UTSI_PAR_tlv m_UTSI(Bit7 p_hlci) := +/* TX template for type UTSI_PAR_tlv with parametrized High Layer Characteristics Identification */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := '00000010'B, /* Parameter Length field */ + presentation := '01'B, /* High layer protocol profile */ + interpretation := '100'B, /* First (primary or only) high layer characteristics */ + codingStandard := '00'B, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlci, /* High Layer Characteristics Identification */ + ext2 := '1'B, /* Extension */ + extendedLayerCharacteristicsIdentification := omit, /* Extended high layer characteristics identification */ + ext3 := omit /* Extension */ +} + +template UTSI_PAR_tlv mw_UTSI_PAR_tlv_any := +/* Default RX template for type UTSI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := ?, /* Parameter Length field */ + presentation := ?, /* Presentation */ + interpretation := ?, /* Interpretation */ + codingStandard := ?, /* Coding standard */ + ext1 := ?, /* Extension */ + highLayerCharacteristicsIdentification := ?, /* High layer characteristics identification */ + ext2 := ?, /* Extension */ + extendedLayerCharacteristicsIdentification := *, /* Extended layer characteristics identification */ + ext3 := * /* Extension */ +} + +template UTSI_PAR_tlv mw_UTSI(Bit7 p_hlci) := +/* Default RX template for type UTSI_PAR_tlv with parametrized High Layer Characteristics Identification */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := ?, /* Parameter Length field */ + presentation := ?, /* Presentation */ + interpretation := ?, /* Interpretation */ + codingStandard := ?, /* Coding standard */ + ext1 := ?, /* Extension */ + highLayerCharacteristicsIdentification := p_hlci, /* High layer characteristics identification */ + ext2 := ?, /* Extension */ + extendedLayerCharacteristicsIdentification := *, /* Extended layer characteristics identification */ + ext3 := * /* Extension */ +} +} /* end group UTSI */ + +group UUID { +template UUID_PAR_tlv m_UUID_req_S1(Bit2 p_serv1) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 1 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := p_serv1, /* bits C B: Service 1 */ + service2 := '00'B, /* bits E D: Service 2 no information */ + service3 := '00'B, /* bits G F: Service 3 no information */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv m_UUID_req_S2(Bit2 p_serv2) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := '00'B, /* bits C B: Service 1 no information */ + service2 := p_serv2, /* bits E D: Service 2*/ + service3 := '00'B, /* bits G F: Service 3 no information */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv m_UUID_req_S3(Bit2 p_serv3) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := '00'B, /* bits C B: Service 1 no information */ + service2 := '00'B, /* bits E D: Service 2 no information*/ + service3 := p_serv3, /* bits G F: Service 3 */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_PAR_tlv_any := +/* Default RX template for type UUID_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S2Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 = 'not provided'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := c_UUI_service_rsp_notProv, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S1Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 1 = 'not provided' and networkDiscardIndicator = 'UUI discarded by the network'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := c_UUI_service_rsp_notProv, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := c_UUI_netwDiscInd_discarded /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S3Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 3 = 'not provided'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := c_UUI_service_rsp_notProv, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} +} /* end group UUID */ + +group UUIF { +template UUIF_PAR_tlv m_UUIF_ServDat(octetstring p_serviceData) := +/* TX template for User-to-user information parameter (UUIF); Optional (O) format, with user-to-user information value parameterized. */ +{ + paramType := '00100000'B, /* Parameter Type '00100000'B */ + paramLen := int2bit(lengthof(p_serviceData),8), /* Parameter Length field */ + userToUserInformation := p_serviceData /* User-to-user information */ +} + +template UUIF_PAR_lv mw_UUIF_PAR_lv_any := +/* Default RX template for type UUIF_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + userToUserInformation := ? /* User-to-user information */ +} + +template UUIF_PAR_tlv mw_UUIF_PAR_tlv_any := +/* Default RX template for type UUIF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100000'B, /* Parameter Type '00100000'B */ + paramLen := ?, /* Parameter Length field */ + userToUserInformation := ? /* User-to-user information */ +} +} /* end group UUIF */ + +template UNKNOWN_PAR_tlv m_UnknownPar := +/* TX template for unknown parameter (UNKNOWN); Optional (O) format, with Unknown parameter type given by Module Parameter, and arbitrary parameter contents. */ +{ + paramType := PX_ISUP_TX_unknown_parameter_type, /* Unknown Parameter Type e.g. '10001111'B */ + paramLen := '00000010'B, /* Parameter Length field */ + contents := '3A95'O /* Parameter contents */ +} + +group OptionalParameterListUsed { +template ACM_OPTIONAL_PARAMS m_ACM_USED_OPTIONAL_PARAMS(template OBCI_PAR_tlv p_OBCI, template UUIF_PAR_tlv p_UUIF, template ATP_PAR_tlv p_ATP, template GNI_PAR_tlv p_GNI, template TMU_PAR_tlv p_TMU, template RNN_PAR_tlv p_RNN, template PCI_PAR_tlv p_PCI, template CDI_PAR_tlv p_CDI, template RNS_PAR_tlv p_RNS, template CCPI_PAR_tlv p_CCPI, template UNKNOWN_PAR_tlv p_UNKNOWN) := +/* TX template for SET: optional parameters of Address complete message (ACM) with optional parameters Optional backward call indicators, User-to-user information, Access Trasnport, Generic notification indicator, Transmission Medium Used, Redirection number, Parameter compatibility information, Call diversion information, Redirection number restriction and CCNR possible indicator parameterized.*/ +{ + optionalBackwardCallIndicators := p_OBCI, /* Optional backward call indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + causeIndicators := omit, /* Cause indicators, O, len=4-? */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + redirectionNumber := p_RNN, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := p_PCI,/* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := p_CDI, /* Call diversion information, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := omit, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := p_CCPI, /* CCNR possible indicator, O, len=3 */ + hTRInformation := omit, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit, /* O, len=3 */ + unknownParameter := p_UNKNOWN +} + +template ANM_OPTIONAL_PARAMS m_ANM_USED_OPTIONAL_PARAMS(template UUIF_PAR_tlv p_UUIF, template CPN_PAR_tlv p_CPN, template ATP_PAR_tlv p_ATP, template GNU_PAR_tlv p_GNU, template TMU_PAR_tlv p_TMU, template RNS_PAR_tlv p_RNS) := +/* TX template for SET: optional parameters of Answer message (ANM) with optional parameters User-to-user information, Connected number, Access transport, Generic number, Transmission medium used and Redirection number restriction parameterized.*/ +{ + backwardCallIndicators := omit, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := omit, /* Optional backward call indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + connectedNumber := p_CPN, /* Connected number, O, len=4-? */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + redirectionNumber := omit, /* Redirection number, O, len=5-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + displayInformation := omit, /* Display information, O, len=3-? */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=1-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3 */ +} + +template CON_OPTIONAL_PARAMS m_CON_USED_OPTIONAL_PARAMS(template ATP_PAR_tlv p_ATP, template TMU_PAR_tlv p_TMU) := +/* TX template for SET: optional parameters of Connect message (CON) with optional parameter with optional parameters Access transport and Transmission medium used parameterized */ +{ + optionalBackwardCallIndicators := omit, /* Optional backward call indicators, O, len=3 */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + connectedNumber := omit, /* Connected number, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := omit, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + genericNumber1 := omit, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + redirectionNumberRestriction := omit, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + hTRInformation := omit, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3 */ +} + +template CPG_OPTIONAL_PARAMS m_CPG_USED_OPTIONAL_PARAMS(template BCI_PAR_tlv p_BCI, template OBCI_PAR_tlv p_OBCI, template ATP_PAR_tlv p_ATP, template RNN_PAR_tlv p_RNN, template GNI_PAR_tlv p_GNI, template TMU_PAR_tlv p_TMU, template CDI_PAR_tlv p_CDI, template RNS_PAR_tlv p_RNS) := +/* TX template for SET: optional parameters of Call progress message (CPG) with optional parameters Backward call indicators, Optional backward call indicators, Access transport, Redirection number, Generic notification, Transmission medium used, Call diversion information and Redirection numberindicator restriction.*/ +{ + causeIndicators := omit, /* Cause indicators, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + backwardCallIndicators := p_BCI, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := p_OBCI, /* Optional backward call indicators, O, len=3 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + redirectionNumber := p_RNN, /* Redirection number, O, len=5-? */ + userToUserInformation := omit, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := p_CDI, /* Call diversion information, O, len=3 */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + callTransferNumber := omit, /* Call transfer number, O, len=4-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + connectedNumber := omit, /* Connected number, O, len=4-? */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + genericNumber1 := omit, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := omit, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := omit, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown parameters */ +} + +template FAC_OPTIONAL_PARAMS m_FAC_USED_OPTIONAL_PARAMS(template ROP_PAR_tlv p_ROP):= +/* TX template for SET: optional parameters of Facility message (FAC) with remote operations parameterized and no other optional parameters.*/ +{ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + remoteOperations := p_ROP, /* Remote operations, O, len=8-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + callTransferNumber := omit, /* Call transfer number, O, len=4-? */ + accessTransport := omit, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + redirectionNumber := omit, /* Redirection number, O, len=4-? */ + pivotRoutingIndicators := omit, /* Pivot routing indicators, O, len=3 */ + pivotStatus := omit, /* Pivot status, O, len=3 */ + pivotCounter := omit, /* Pivot counter, O, len=3 */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3-? */ +} + +template FAR_OPTIONAL_PARAMS m_FAR_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUI) := +/* TX template for SET: optional parameters of Facility request message (FAR) with User-to-user indicators parameterized and no other optional parameters */ +{ + userToUserIndicators := p_UUI, /* User-to-user indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := omit /* Parameter compatibility information, O, len=4-? */ +} + +template IAM_OPTIONAL_PARAMS m_IAM_USED_OPTIONAL_PARAMS(template CGN_PAR_tlv p_CGN, template OFCI_PAR_tlv p_OFCI, template RDN_PAR_tlv p_RDN, template RDI_PAR_tlv p_RDI, template CUGIC_PAR_tlv p_CUGIC, template OCN_PAR_tlv p_OCN, template UUIF_PAR_tlv p_UUIF, template ATP_PAR_tlv p_ATP, template USI_PAR_tlv p_USI, template UUID_PAR_tlv p_UUID, template GNU_PAR_tlv p_GNU, template USIP_PAR_tlv p_USIP, template UTSI_PAR_tlv p_UTSI, template HPC_PAR_tlv p_HPC) := +/* TX template for SET: optional parameters of Initial address message (IAM) with all used optional parameters parameterized*/ +{ + transitNetworkSelection := omit, /* Transit network selection, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + callingPartyNumber := p_CGN, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := p_OFCI, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := p_RDN, /* Redirecting number, O, len=4-? */ + redirectionInformation := p_RDI, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := p_CUGIC, /* Closed user group interlock code, O, len=6 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + originalCalledNumber := p_OCN, /* Original called number, O, len=4-? */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userServiceInformation := p_USI, /* User service information, O, len=4-13 */ + userToUserIndicators := p_UUID, /* User-to-user indicators, O, len=3 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + propagationDelayCounter := omit, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := p_USIP, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + genericDigits1 := omit, /* Generic digits1, O, len=4-? */ + genericDigits2 := omit, /* Generic digits2, O, len=4-? */ + originationISCPointCode := omit, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := p_UTSI, /* User teleservice information, O, len=4-5 */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + mLPPPrecedence := omit, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := omit, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := omit, /* Location number, O, len=4-? */ + forwardGVNS := omit, /* Forward GVNS, O, len=5-26 */ + cCSS := omit, /* CCSS, O, len=3-? */ + networkManagementControls := omit, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := omit, /* Circuit assignment map, O, len=6-7 */ + correlationId := omit, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := omit, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := omit, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := omit, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + sCFId := omit, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := omit, /* UID capability indicators, O, len=3-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + hopCounter := p_HPC, /* Hop counter, O, len=3 */ + collectCallRequest := omit, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + pivotCapability := omit, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := omit, /* Called directory number, O, len=5-? */ + originalCalledINNumber := omit, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := omit, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := omit, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := omit, /* Query on release capability, O, len=3 */ + pivotCounter := omit, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := omit, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := omit, /* Redirect capability, O, len=3 */ + redirectCounter := omit, /* Redirect counter, O, len=3 */ + redirectStatus := omit, /* Redirect status, O, len=3 */ + redirectForwardInformation := omit, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := omit, /* Number portability forward information, O, len=1-? */ + automaticReRouting := omit /* Automatic re-routing, O, len=4-? */ +} + +template IDR_OPTIONAL_PARAMS m_IDR_USED_OPTIONAL_PARAMS(template MCRI_PAR_tlv p_MRQI) := +/* TX template for SET: optional parameters of Identification request message (IDR) with MCID request indicators parameterized and no other optional parameters */ +{ + mCIDRequestIndicators := p_MRQI, /* MCID request indicators, O, len=3 */ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit /* Parameter compatibility information, O, len=4-? */ +} + +template INF_OPTIONAL_PARAMS m_INF_USED_OPTIONAL_PARAMS := +/* TX template for SET: optional parameters of Information message (INF) with Calling party number and with no other optional parameters */ +{ + callingPartysCategory := omit, /* Calling party's category, O, len=3 */ + callingPartyNumber := m_CGN_PAR_Def, /* Calling party number, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + networkSpecificFacility := omit /* Network specific facility, O, len=4-? */ +} + +template LOP_OPTIONAL_PARAMS m_LOP_USED_OPTIONAL_PARAMS(template LPPI_PAR_tlv p_LPI) := +/* TX template for SET: optional parameters of Loop prevention message (LOP) with Loop prevention indicators parameterized and with no other optional parameters */ +{ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := omit, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := p_LPI /* Loop prevention indicators, O, len=3 */ +} + +template ACM_OPTIONAL_PARAMS mw_ACM_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUID) := +/* TX template for SET: optional parameters of Address complete message (ACM) with optional parameters Optional backward call indicators, Generic notification indicator, Redirection number, Call diversion information, Redirection number restriction and CCNR possible indicator parameterized.*/ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + userToUserIndicators := p_UUID, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter :=omit +} + +template CPG_OPTIONAL_PARAMS mw_CPG_USED_OPTIONAL_PARAMS(template GNI_PAR_tlv p_GNI) := +/* RX template for SET: optional parameters of Call progress message (CPG) with optional parameters Generic notification indicator parameterized.*/ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown parameters */ +} + +template FRJ_OPTIONAL_PARAMS mw_FRJ_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUI) := +/* RX template for SET: optional parameters of Facility reject message (FRJ) with 'User-to-user indicators parameterized */ +{ + userToUserIndicators := p_UUI /* User-to-user indicators, O, len=3 */ +} + +template IAM_OPTIONAL_PARAMS mw_IAM_USED_OPTIONAL_PARAMS + (template CGN_PAR_tlv p_CGN, + template OFCI_PAR_tlv p_OFCI, + template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template CUGIC_PAR_tlv p_CUGIC, + template OCN_PAR_tlv p_OCN, + template UUIF_PAR_tlv p_UUIF, + template ATP_PAR_tlv p_ATP, + template USI_PAR_tlv p_USI, + template GNU_PAR_tlv p_GNU, + template USIP_PAR_tlv p_USIP, + template UTSI_PAR_tlv p_UTSI, + template TMRP_PAR_tlv p_TMRP, + template HPC_PAR_tlv p_HPC) := +/* RX template for SET: optional parameters of Initial address message (IAM) with CGN, OFCI, RDN, RDI, CUGIC, OCN, UUIF, ATP, USI, GNU, USIP, UTSI, TMRP, HPC parameterized and 'any' other optional parameters.*/ +{ + transitNetworkSelection := mw_TNS_PAR_tlv_any ifpresent, /* Transit network selection, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + callingPartyNumber := p_CGN, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := p_OFCI, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := p_RDN, /* Redirecting number, O, len=4-? */ + redirectionInformation := p_RDI, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := p_CUGIC, /* Closed user group interlock code, O, len=6 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + originalCalledNumber := p_OCN, /* Original called number, O, len=4-? */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userServiceInformation := p_USI, /* User service information, O, len=4-13 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + propagationDelayCounter := mw_PDC_PAR_tlv_any ifpresent, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := p_USIP, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + originationISCPointCode := mw_OIPC_PAR_tlv_any ifpresent, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := p_UTSI, /* User teleservice information, O, len=4-5 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + mLPPPrecedence := mw_MLPP_PAR_tlv_any ifpresent, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := p_TMRP, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := mw_LON_PAR_tlv_any ifpresent, /* Location number, O, len=4-? */ + forwardGVNS := mw_FGVNS_PAR_tlv_any ifpresent, /* Forward GVNS, O, len=5-26 */ + cCSS := mw_CCSS_PAR_tlv_any ifpresent, /* CCSS, O, len=3-? */ + networkManagementControls := mw_NMC_PAR_tlv_any ifpresent, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := mw_CAM_PAR_tlv_any ifpresent, /* Circuit assignment map, O, len=6-7 */ + correlationId := mw_CRI_PAR_tlv_any ifpresent, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := mw_CDTI_PAR_tlv_any ifpresent, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := mw_CIN_PAR_tlv_any ifpresent, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := mw_COTI_PAR_tlv_any ifpresent, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + sCFId := mw_SCFI_PAR_tlv_any ifpresent, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := mw_UCI_PAR_tlv_any ifpresent, /* UID capability indicators, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + hopCounter := p_HPC, /* Hop counter, O, len=3 */ + collectCallRequest := mw_CCRQ_PAR_tlv_any ifpresent, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotCapability := mw_PICP_PAR_tlv_any ifpresent, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := mw_CDIN_PAR_tlv_any ifpresent, /* Called directory number, O, len=5-? */ + originalCalledINNumber := mw_OCI_PAR_tlv_any ifpresent, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := mw_CGL_PAR_tlv_any ifpresent, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := mw_NRN_PAR_tlv_any ifpresent, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := mw_QRC_PAR_tlv_any ifpresent, /* Query on release capability, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := mw_PRFI_PAR_tlv_any ifpresent, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := mw_RCP_PAR_tlv_any ifpresent, /* Redirect capability, O, len=3 */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + redirectForwardInformation := mw_RFI_PAR_tlv_any ifpresent, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := mw_NPFI_PAR_tlv_any ifpresent, /* Number portability forward information, O, len=1-? */ + automaticReRouting := mw_ARR_PAR_tlv_any ifpresent /* Automatic re-routing, O, len=4-? */ +} + +template IRS_OPTIONAL_PARAMS mw_IRS_USED_OPTIONAL_PARAMS(template MCRS_PAR_tlv p_MCRS) := +/* RX template for SET: optional parameters of Identification response message (IRS) with MCID response indicators parameterized, and with 'any' other optional parameters */ +{ + mCIDResponseIndicators := p_MCRS, /* MCID response indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} + +template LOP_OPTIONAL_PARAMS mw_LOP_USED_OPTIONAL_PARAMS(template LPPI_PAR_tlv p_LPI) := +/* RX template for SET: optional parameters of Loop prevention message (LOP) with Loop prevention indicators parameterized and with 'any' other optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := mw_CTR_PAR_tlv_any ifpresent, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := p_LPI /* Loop prevention indicators, O, len=3 */ +} +} /* end group OptionalParameterListUsed */ + +group OptionalParameterListAny{ +template ACM_OPTIONAL_PARAMS mw_ACM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Address complete message (ACM) with 'any'-optional parameters */ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter :=omit +} ifpresent; + +template ANM_OPTIONAL_PARAMS mw_ANM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Answer message (ANM) with 'any'-optional parameters */ +{ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + displayInformation := mw_DIF_PAR_tlv_any ifpresent, /* Display information, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=1-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3 */ +} ifpresent; + +template APM_OPTIONAL_PARAMS mw_APM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Application transport message (APM) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent /* Application transport parameter2, O, len=5-? */ +} ifpresent; + +template CON_OPTIONAL_PARAMS mw_CON_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Connect message (CON) with 'any'-optional parameters */ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3 */ +} ifpresent; + +template CPG_OPTIONAL_PARAMS mw_CPG_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Call progress message (CPG) with 'any'-optional parameters */ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown Parameter */ +} ifpresent; + +template FAA_OPTIONAL_PARAMS mw_FAA_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility accepted message (FAA) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template FAC_OPTIONAL_PARAMS mw_FAC_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility message (FAC) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=4-? */ + pivotRoutingIndicators := mw_PRI_PAR_tlv_any ifpresent, /* Pivot routing indicators, O, len=3 */ + pivotStatus := mw_PST_PAR_tlv_any ifpresent, /* Pivot status, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3-? */ +} ifpresent; + +template FAR_OPTIONAL_PARAMS mw_FAR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility request message (FAR) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template FRJ_OPTIONAL_PARAMS mw_FRJ_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility reject message (FRJ) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent /* User-to-user indicators, O, len=3 */ +} ifpresent; + +template FTR_OPTIONAL_PARAMS mw_FTR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Forward transfer message (FTR) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template IAM_OPTIONAL_PARAMS mw_IAM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Initial address message (IAM) with 'any'-optional parameters */ +{ + transitNetworkSelection := mw_TNS_PAR_tlv_any ifpresent, /* Transit network selection, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := mw_OFCI_PAR_tlv_any ifpresent, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := mw_RDN_PAR_tlv_any ifpresent, /* Redirecting number, O, len=4-? */ + redirectionInformation := mw_RDI_PAR_tlv_any ifpresent, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := mw_CUGIC_PAR_tlv_any ifpresent, /* Closed user group interlock code, O, len=6 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + originalCalledNumber := mw_OCN_PAR_tlv_any ifpresent, /* Original called number, O, len=4-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userServiceInformation := mw_USI_PAR_tlv_any ifpresent, /* User service information, O, len=4-13 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + propagationDelayCounter := mw_PDC_PAR_tlv_any ifpresent, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := mw_USIP_PAR_tlv_any ifpresent, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + originationISCPointCode := mw_OIPC_PAR_tlv_any ifpresent, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := mw_UTSI_PAR_tlv_any ifpresent, /* User teleservice information, O, len=4-5 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + mLPPPrecedence := mw_MLPP_PAR_tlv_any ifpresent, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := mw_TMRP_PAR_tlv_any ifpresent, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := mw_LON_PAR_tlv_any ifpresent, /* Location number, O, len=4-? */ + forwardGVNS := mw_FGVNS_PAR_tlv_any ifpresent, /* Forward GVNS, O, len=5-26 */ + cCSS := mw_CCSS_PAR_tlv_any ifpresent, /* CCSS, O, len=3-? */ + networkManagementControls := mw_NMC_PAR_tlv_any ifpresent, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := mw_CAM_PAR_tlv_any ifpresent, /* Circuit assignment map, O, len=6-7 */ + correlationId := mw_CRI_PAR_tlv_any ifpresent, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := mw_CDTI_PAR_tlv_any ifpresent, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := mw_CIN_PAR_tlv_any ifpresent, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := mw_COTI_PAR_tlv_any ifpresent, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + sCFId := mw_SCFI_PAR_tlv_any ifpresent, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := mw_UCI_PAR_tlv_any ifpresent, /* UID capability indicators, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + hopCounter := mw_HPC_PAR_tlv_any ifpresent, /* Hop counter, O, len=3 */ + collectCallRequest := mw_CCRQ_PAR_tlv_any ifpresent, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotCapability := mw_PICP_PAR_tlv_any ifpresent, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := mw_CDIN_PAR_tlv_any ifpresent, /* Called directory number, O, len=5-? */ + originalCalledINNumber := mw_OCI_PAR_tlv_any ifpresent, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := mw_CGL_PAR_tlv_any ifpresent, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := mw_NRN_PAR_tlv_any ifpresent, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := mw_QRC_PAR_tlv_any ifpresent, /* Query on release capability, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := mw_PRFI_PAR_tlv_any ifpresent, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := mw_RCP_PAR_tlv_any ifpresent, /* Redirect capability, O, len=3 */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + redirectForwardInformation := mw_RFI_PAR_tlv_any ifpresent, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := mw_NPFI_PAR_tlv_any ifpresent, /* Number portability forward information, O, len=1-? */ + automaticReRouting := mw_ARR_PAR_tlv_any ifpresent /* Automatic re-routing, O, len=4-? */ +} + +template IDR_OPTIONAL_PARAMS mw_IDR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Identification request message (IDR) with 'any'-optional parameters */ +{ + mCIDRequestIndicators := mw_MCRI_PAR_tlv_any ifpresent, /* MCID request indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template INF_OPTIONAL_PARAMS mw_INF_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Information message (INF) with 'any'-optional parameters */ +{ + callingPartysCategory := mw_CGC_PAR_tlv_any ifpresent, /* Calling party's category, O, len=3 */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent /* Network specific facility, O, len=4-? */ +} ifpresent; + +template INR_OPTIONAL_PARAMS mw_INR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Information request message (INR) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template IRS_OPTIONAL_PARAMS mw_IRS_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Identification response message (IRS) with 'any'-optional parameters */ +{ + mCIDResponseIndicators := mw_MCRS_PAR_tlv_any ifpresent, /* MCID response indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} ifpresent; + +template LOP_OPTIONAL_PARAMS mw_LOP_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Loop prevention message (LOP) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := mw_CTR_PAR_tlv_any ifpresent, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := mw_LPPI_PAR_tlv_any ifpresent /* Loop prevention indicators, O, len=3 */ +} ifpresent; + +template NRM_OPTIONAL_PARAMS mw_NRM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Network resource management message (NRM) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent /* Echo control information, O, len=3 */ +} ifpresent; + +template PRI_OPTIONAL_PARAMS mw_PRI_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Pre-release information message (PRI) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + optionalForwardCallIndicators := mw_OFCI_PAR_tlv_any ifpresent, /* Optional forward call indicators, O, len=3 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent /* Application transport parameter2, O, len=5-? */ +} ifpresent; + +template REL_OPTIONAL_PARAMS mw_REL_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Release message (REL) with 'any'-optional parameters */ +{ + redirectionInformation := mw_RDI_PAR_tlv_any ifpresent, /* Redirection information, O, len=3-4 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + signallingPointCode := mw_SPC_PAR_tlv_any ifpresent, /* Signalling point code, O, len=4 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + automaticCongestionLevel := mw_ACL_PAR_tlv_any ifpresent, /* Automatic congestion level, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + displayInformation := mw_DIF_PAR_tlv_any ifpresent, /* Display information, O, len=3-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectBackwardInformation := mw_RBI_PAR_tlv_any ifpresent /* Redirect backward information, O, len=3-? */ +} ifpresent; + +template RES_OPTIONAL_PARAMS mw_RES_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Resume message (RES) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template RLC_OPTIONAL_PARAMS mw_RLC_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Release complete message (RLC) with 'any'-optional parameters */ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent /* Cause indicators, O, len=5-6 */ +} ifpresent; + +template SDN_OPTIONAL_PARAMS mw_SDN_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Subsequent Directory Number message (SDN) with 'any'-optional parameters */ +{ + subsequentNumber := mw_SNN_PAR_tlv_any ifpresent, /* Subsequent number, O, len=4-? */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent /* Message compatibility information, O, len=4-? */ +} ifpresent; + +template SEG_OPTIONAL_PARAMS mw_SEG_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Segmentation message (SEG) with 'any'-optional parameters */ +{ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} ifpresent; + +template SUS_OPTIONAL_PARAMS mw_SUS_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Suspend message (SUS) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template UPT_OPTIONAL_PARAMS mw_UPT_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User Part test message (UPT) with 'any'-optional parameters */ +{ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template UPA_OPTIONAL_PARAMS mw_UPA_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User Part available message (UPA) with 'any'-optional parameters */ +{ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template UUI_OPTIONAL_PARAMS mw_UUI_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User-to-user information message (UUI) with 'any'-optional parameters */ +{ + accessTransport := mw_ATP_PAR_tlv_any ifpresent /* Access transport, O, len=3-? */ +} ifpresent; +} /* end group OptionalParameterListAny */ + +group ParametersAnyValue { +template ACL_PAR_tlv mw_ACL_PAR_tlv_any := +/* Default RX template for type ACL_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100111'B, /* Parameter Type '00100111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + automaticCongestionLevel := ? /* Automatic congestion level */ +} + +template ADI_PAR_tlv mw_ADI_PAR_tlv_any := +/* Default RX template for type ADI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101110'B, /* Parameter Type '00101110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + accessDeliveryIndicator := ?, /* bit A: Access delivery indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template APP_PAR_tlv mw_APP_PAR_tlv_any := +/* Default RX template for type APP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111000'B, /* Parameter Type '01111000'B */ + paramLen := ?, /* Parameter Length field */ + applicationContextIdentifier_lsb := ?, /* Application context identifier, least significant bits */ + ext1 := ?, /* Extension */ + applicationContextIdentifier_msb := ?, /* Application context identifier, most significant bits; optional */ + ext1a := ?, /* Extension */ + releaseCallIndicator := ?, /* bit 1: Release call indicator (RCI) */ + sendNotificationIndicator := ?, /* bit 2: Send notification indicator (SNI) */ + spare := '00000'B, /* spare */ + ext2 := ?, /* Extension */ + aPMSegmentationIndicator := ?, /* d: APM segmentation indicator */ + sequenceIndicator := ?, /* E: Sequence indicator (SI) */ + ext3 := ?, /* Extension */ + segmentationLocalReference := ?, /* f: Segmentation local reference (SLR) */ + ext3a := ?, /* Extension */ + aPMUserInformation := ? /* APM User Information */ +} + +template ARR_PAR_tlv mw_ARR_PAR_tlv_any := +/* Default RX template for type ARR_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '10010110'B, /* Parameter Type '10010110'B */ + paramLen := '00000010'B, /* Parameter Length field */ + reRoutingCounter := ?, /* Re-routing counter */ + reRoutingInhibitIndicator := ?, /* Re-routing inhibit indicator */ + ext1 := ?, /* Extension */ + aRR_Octet1a := { + reRoutingReason := ?, /* Re-routing reason */ + ext1a := ? /* Extension */ + } ifpresent +} + +template BGV_PAR_tlv mw_BGV_PAR_tlv_any := +/* Default RX template for type BGV_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001101'B, /* Parameter Type '01001101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + terminatingAccessIndicator := ?, /* bits B A: Terminating access indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator: as for 3.25 a). */ +} + +template CAM_PAR_tlv mw_CAM_PAR_tlv_any := +/* Default RX template for type CAM_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100101'B, /* Parameter Type '00100101'B */ + paramLen := '00000101'B, /* Parameter Length field */ + mapType := ?, /* Map type */ + spare := '00'B, /* spare */ + mappingBits := ? /* mapping bits */ +} + +template CCRQ_PAR_tlv mw_CCRQ_PAR_tlv_any := +/* Default RX template for type CCRQ_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111001'B, /* Parameter Type '01111001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + collectCallRequestIndicator := ?, /* bit A: Collect call request indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CCSS_PAR_tlv mw_CCSS_PAR_tlv_any := +/* Default RX template for type CCSS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001011'B, /* Parameter Type '01001011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCSSCallIndicator := ?, /* bit A: CCSS call indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CDIN_PAR_tlv mw_CDIN_PAR_tlv_any := +/* Default RX template for type CDIN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111101'B, /* Parameter Type '01111101'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} + +template CDTI_PAR_tlv mw_CDTI_PAR_tlv_any := +/* Default RX template for type CDTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01101110'B, /* Parameter Type '01101110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callToBeDivertedIndicator := ?, /* bits BA: Call to be diverted indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CGC_PAR_tlv mw_CGC_PAR_tlv_any := +/* Default RX template for type CGC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001001'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callingPartysCategory := ? /* Calling party's category */ +} + +template CGL_PAR_tlv mw_CGL_PAR_tlv_any := +/* Default RX template for type CGL_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000001'B, /* Parameter Type '10000001'B */ + paramLen := ?, /* Parameter Length field */ + screeningIndicator := ?, /* b) Screening indicator */ + locationPresRestrIndicator := ?, /* a) Location presentation restricted indicator */ + spare := '0000'B, /* spare */ + typeOfShape := ?, /* Type of shape */ + ext := ?, /* Extension */ + shapeDescription := ? /* Shape description */ +} + +template CHI_PAR_tlv mw_CHI_PAR_tlv_any := +/* Default RX template for type CHI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101101'B, /* Parameter Type '00101101'B */ + paramLen := '00000010'B, /* Parameter Length field */ + propagationDelayValue := ? /* Propagation delay value */ +} + +template CIN_PAR_tlv mw_CIN_PAR_tlv_any := +/* Default RX template for type CIN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01101111'B, /* Parameter Type '01101111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template COTI_PAR_tlv mw_COTI_PAR_tlv_any := +/* Default RX template for type COTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110000'B, /* Parameter Type '01110000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callToBeOfferedIndicator := ?, /* bits BA: Call to be offered indicator */ + spare := '000000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CRF_PAR_tlv mw_CRF_PAR_tlv_any := +/* Default RX template for type CRF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000001'B, /* Parameter Type '00000001'B */ + paramLen := '00000101'B, /* Parameter Length field */ + callIdentity := ?, /* Call identity */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template CRI_PAR_tlv mw_CRI_PAR_tlv_any := +/* Default RX template for type CRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01100101'B, /* Parameter Type '01100101'B */ + paramLen := ?, /* Parameter Length field */ + correlationId := ? /* Correlation id */ +} + +template CRQ_PAR_tlv mw_CRQ_PAR_tlv_any := +/* Default RX template for type CRQ_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001101'B, /* Parameter Type '00001101'B */ + paramLen := ?, /* Parameter Length field */ + localReference := ?, /* Local reference */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B, /* spare */ + protocolClass := *, /* Protocol class */ + credit := * /* Credit */ +} + +template CSI_PAR_lv mw_CSI_PAR_lv_any := +/* Default RX template for type CSI_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + //circuitIndicators := superset({mw_CircuitIndicator_any}) + circuitIndicators := {*, mw_CircuitIndicator_any} +} + +template CTI_PAR_tlv mw_CTI_PAR_tlv_any := +/* Default RX template for type CTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110010'B, /* Parameter Type '01110010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + conferenceAcceptanceIndicator := ?, /* bits BA: Conference acceptance indicator (Note) */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CTN_PAR_tlv mw_CTN_PAR_tlv_any := +/* Default RX template for type CTN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000101'B, /* Parameter Type '01000101'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template CTR_PAR_tlv mw_CTR_PAR_tlv_any := +/* Default RX template for type CTR_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000011'B, /* Parameter Type '01000011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callTransferIdentity := ? /* Call transfer identity */ +} + +template DIF_PAR_tlv mw_DIF_PAR_tlv_any := +/* Default RX template for type DIF_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110011'B, /* Parameter Type '01110011'B */ + paramLen := ?, /* Parameter Length field */ + displayInformation := ? /* Display information */ +} + +template ECI_PAR_tlv mw_ECI_PAR_tlv_any := +/* Default RX template for type ECI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110111'B, /* Parameter Type '00110111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + outgECDeviceInfoInd := ?, /* bits BA: Outgoing echo control device information indicator */ + incECDeviceInfoInd := ?, /* bits DC: Incoming echo control device information indicator */ + outgECDeviceReqInd := ?, /* bits FE : Outgoing echo control device request indicator */ + IncECDeviceReqInd := ? /* bits HG: Incoming echo control device request indicator */ +} + +template FGVNS_PAR_tlv mw_FGVNS_PAR_tlv_any := +/* Default RX template for type FGVNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001100'B, /* Parameter Type '01001100'B */ + paramLen := ?, /* Parameter Length field */ + fGVNSContents := ? +} + +template GDG_PAR_tlv mw_GDG_PAR_tlv_any := +/* Default RX template for type GDG_PAR_tlv with wildcards for simple types */ +{ + paramType := '11000001'B, /* Parameter Type '11000001'B */ + paramLen := ?, /* Parameter Length field */ + typeOfDigits := ?, /* Encoding scheme Type of digits */ + encodingScheme := ?, /* Encoding scheme Type of digits */ + digits := ? /* Digits */ +} + +template HTRI_PAR_tlv mw_HTRI_PAR_tlv_any := +/* Default RX template for type HTRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000010'B, /* Parameter Type '10000010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template LON_PAR_tlv mw_LON_PAR_tlv_any := +/* Default RX template for type LON_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111111'B, /* Parameter Type '00111111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE ) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := * /* address signals */ +} + +template MLPP_PAR_tlv mw_MLPP_PAR_tlv_any := +/* Default RX template for type MLPP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111010'B, /* Parameter Type '00111010'B */ + paramLen := '00000110'B, /* Parameter Length field */ + precedenceLevel := ?, /* Precedence level */ + spare1 := '0'B, /* spare */ + lFB := ?, /* LFB (look ahead for busy) */ + spare2 := '0'B, /* spare */ + networkIdentity := ?, /* Network Identity (NI) octet 2 and 3 */ + mLppServiceDomain := ? /* MLPP service domain */ +} + +template NMC_PAR_tlv mw_NMC_PAR_tlv_any := +/* Default RX template for type NMC_PAR_tlv with wildcards for simple types */ +{ + paramType := '01011011'B, /* Parameter Type '01011011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + temporaryAlternativeRouting := ?, /* bit A: Temporary Alternative Routing (TAR) indicator */ + spare := '000000'B, /* bits G-B: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template NPFI_PAR_tlv mw_NPFI_PAR_tlv_any := +/* Default RX template for type NPFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001101'B, /* Parameter Type '10001101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + numberPortabilityStatusIndicator := ?, /* a) bits DCBA: Number portability status indicator */ + spare := '000'B, /* b) bits GFE: spare */ + ext := ? /* c) bit H: Extension indicator */ +} + +template NRN_PAR_tlv mw_NRN_PAR_tlv_any := +/* Default RX template for type NRN_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000100'B, /* Parameter Type '10000100'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + numberingPlanIdentifier := ?, /* Numbering Plan Identifier */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} + +template NSF_PAR_tlv mw_NSF_PAR_tlv_any := +/* Default RX template for type NSF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101111'B, /* Parameter Type '00101111'B */ + paramLen := ?, /* Parameter Length field */ + networkSpecific := ? /* Network identification */ +} + +template OCI_PAR_tlv mw_OCI_PAR_tlv_any := +/* Default RX template for type OCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111111'B, /* Parameter Type '01111111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template OIPC_PAR_tlv mw_OIPC_PAR_tlv_any := +/* Default RX template for type OIPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101011'B, /* Parameter Type '00101011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template PDC_PAR_tlv mw_PDC_PAR_tlv_any := +/* Default RX template for type PDC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110001'B, /* Parameter Type '00110001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + propagationDelayValue := ? /* Propagation delay value */ +} + +template PICN_PAR_tlv mw_PICN_PAR_tlv_any := +/* Default RX template for type PICN_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000111'B, /* Parameter Type '10000111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotCounter := ?, /* bits EDCBA: Pivot counter */ + spare := '000'B /* bits HGF: spare */ +} + +template PICP_PAR_tlv mw_PICP_PAR_tlv_any := +/* Default RX template for type PICP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111011'B, /* Parameter Type '01111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotPossibleIndicator := ?, /* bits CBA: Pivot possible indicator */ + spare := '000'B, /* bits FED: spare */ + interwToRedirectionIndicator := ?, /* bit G: Interworking to redirection indicator (national use) */ + ext := ? /* bit H: Extension indicator */ +} + +template PRBI_PAR_tlv mw_PRBI_PAR_tlv_any := +/* Default RX template for type PRBI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001001'B, /* Parameter Type '10001001'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Backward := ? /* information types */ +} + +template PRFI_PAR_tlv mw_PRFI_PAR_tlv_any := +/* Default RX template for type PRFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001000'B, /* Parameter Type '10001000'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Forward := ? /* information types */ +} + +template PRI_PAR_tlv mw_PRI_PAR_tlv_any := +/* Default RX template for type PRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111100'B, /* Parameter Type '01111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotRoutingIndicators := ?, /* bits G F E D C B A: Pivot routing indicators */ + ext := ? /* bit H: Extension indicator */ +} + +template PST_PAR_tlv mw_PST_PAR_tlv_any := +/* Default RX template for type PST_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000110'B, /* Parameter Type '10000110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotStatusIndicator := ?, /* bits BA: Pivot status indicator */ + spare := '00000'B, /* bits GFEDC: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template QRC_PAR_tlv mw_QRC_PAR_tlv_any := +/* Default RX template for type QRC_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000101'B, /* Parameter Type '10000101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + qoRCapabilityIndicator := ?, /* bit A: QoR capability indicator */ + spare := '000000'B, /* bits G-B: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template RBI_PAR_tlv mw_RBI_PAR_tlv_any := +/* Default RX template for type RBI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001100'B, /* Parameter Type '10001100'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Backward := ? /* information types */ +} + +template RCN_PAR_tlv mw_RCN_PAR_tlv_any := +/* Default RX template for type RCN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110111'B, /* Parameter Type '01110111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectCounter := ?, /* bits EDCBA: Redirect counter */ + spare := '000'B /* bits HGF: spare */ +} + +template RCP_PAR_tlv mw_RCP_PAR_tlv_any := +/* Default RX template for type RCP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001110'B, /* Parameter Type '01001110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectPossibleIndicator := ?, /* bits CBA: Redirect possible indicator */ + spare := '0000'B, /* bits GFED: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template RFI_PAR_tlv mw_RFI_PAR_tlv_any := +/* Default RX template for type RFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001011'B, /* Parameter Type '10001011'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Forward := ? /* information types */ +} + +template RST_PAR_tlv mw_RST_PAR_tlv_any := +/* Default RX template for type RST_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001010'B, /* Parameter Type '10001010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectStatusIndicator := ?, /* bits BA: Redirect status indicator */ + spare := '00000'B, /* bits GFEDC: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template SAC_PAR_tlv mw_SAC_PAR_tlv_any := +/* Default RX template for type SAC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110011'B, /* Parameter Type '00110011'B */ + paramLen := ?, /* Parameter Length field */ + featureCodes := ? /* Feature codes */ +} + +template SCFI_PAR_tlv mw_SCFI_PAR_tlv_any := +/* Default RX template for type SCFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01100110'B, /* Parameter Type '01100110'B */ + paramLen := ?, /* Parameter Length field */ + sCFId := ? /* SCF id */ +} + +template SPC_PAR_tlv mw_SPC_PAR_tlv_any := +/* Default RX template for type SPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00011110'B, /* Parameter Type '00011110'B */ + paramLen := '00000010'B, /* Parameter Length field */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template TNS_PAR_tlv mw_TNS_PAR_tlv_any := +/* Default RX template for type TNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100011'B, /* Parameter Type '00100011'B */ + paramLen := ?, /* Parameter Length field */ + networkIdentificationPlan := ?, /* Network identification plan */ + typeOfNetworkIdentification := ?, /* Type of network identification */ + oddEven := ?, /* O/E */ + networkIdentification := ? /* Network identification */ +} + +template UCI_PAR_tlv mw_UCI_PAR_tlv_any := +/* Default RX template for type UCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110101'B, /* Parameter Type '01110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + througConnectionIndicator := ?, /* bit A: Through-connection indicator */ + t9TimerIndicator := ?, /* bit B: T9 timer indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} +} /* end group ParametersAnyValue */ +} /* end group Parameter */ +} /* end Module SipIsup_ISUP_ParamTemplates */ + diff --git a/IsupAts/SipIsup_ISUP_ParamTypes.ttcn b/IsupAts/SipIsup_ISUP_ParamTypes.ttcn new file mode 100644 index 0000000..bcd95f1 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ParamTypes.ttcn @@ -0,0 +1,1777 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-parameter type declarations. +*/ +module SipIsup_ISUP_ParamTypes{ + +import from LibCommon_BasicTypesAndValues all; +import from LibCommon_DataStrings all; +import from LibCommon_TextStrings all; + +group VariableLengthOctetstrings { +type octetstring Oct1to2 length(1..2) with {encode "1 to 2 bytes"}; +type octetstring Oct0to4 length(0..4) with {encode "0 to 4 bytes"}; +type octetstring Oct0to8 length(0..8) with {encode "0 to 8 bytes"}; +type octetstring Oct0to9 length(0..9) with {encode "0 to 9 bytes"}; +} /* end group VariableLengthOctetstrings */ + +group MessageHeader { +type octetstring CallInstanceCode length(4); + +type record CircuitIdentityCode +{ + Bit12 cicv, /* cic code value */ + Bit4 spare /* Spare field */ +} + +type record RoutingLabel +{ + Bit14 dpc, /* destination point code */ + Bit14 opc, /* origination point code */ + Bit4 sls /* Signalling link selection */ +} + +type record ServiceIndicatorOctet +{ + Bit4 userPartIdentification, /* User part identification, '5'H for ISUP */ + Bit2 spare, /* Spare */ + Bit2 networkIndicator /* Network indicator */ +} +} /* end group MessageHeader */ + +group Parameter { +type record ACL_PAR_tlv /* Automatic congestion level parameter (ACL); Optional(O) format. */ +{ + Bit8 paramType ('00100111'B), /* Parameter Type '00100111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 automaticCongestionLevel /* Automatic congestion level */ +} +with { encode "present=bytes(1,0x27)" } + +type record ADI_PAR_tlv /* Access delivery information parameter (ADI); Optional(O) format. */ +{ + Bit8 paramType ('00101110'B), /* Parameter Type '00101110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 accessDeliveryIndicator, /* bit A: Access delivery indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x2E)"; } + +group APP { +type record APP_PAR_tlv /* Application transport parameter parameter (APP); Optional(O) format. */ +{ + Bit8 paramType ('01111000'B), /* Parameter Type '01111000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 applicationContextIdentifier_lsb, /* Application context identifier, least significant bits */ + Bit1 ext1, /* Extension */ + Bit7 applicationContextIdentifier_msb, /* Application context identifier, most significant bits; optional */ + Bit1 ext1a, /* Extension */ + Bit1 releaseCallIndicator, /* bit 1: Release call indicator (RCI) */ + Bit1 sendNotificationIndicator, /* bit 2: Send notification indicator (SNI) */ + Bit5 spare, /* spare */ + Bit1 ext2, /* Extension */ + Bit6 aPMSegmentationIndicator, /* d: APM segmentation indicator */ + Bit1 sequenceIndicator, /* E: Sequence indicator (SI) */ + Bit1 ext3, /* Extension */ + Bit7 segmentationLocalReference, /* f: Segmentation local reference (SLR) */ + Bit1 ext3a, /* Extension */ + APMUserInformation aPMUserInformation /* APM User Information */ +} +with { encode "present=bytes(1,0x78)"; + encode (paramLen) "tag=""APP_paramLen"";"; + encode (aPMUserInformation) "length=valueOf(getTag(""APP_paramLen"")).toInt()-5;"; } + + /* Start auxiliary types for application transport parameter parameter (APP) */ +type record Address +{ + Bit8 addressLen, /* Address Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode (addressLen) "tag=""AdrLen"";"; + encode (addressSignals) "length=valueOf(getTag(""AdrLen"")).toInt()-2;"; } + +type octetstring APMUserInformation_g1; /* used APM'98'-user application */ + +type record APMUserInformation_g2 /* used APM'2000'-user application */ +{ + Address originatingAddress, + Address destinationAddress, + octetstring encapsulatedApplicationInformation +} + +type union APMUserInformation +{ + APMUserInformation_g1 aPMUserInformation_g1, + APMUserInformation_g2 aPMUserInformation_g2 +} +/* End auxiliary types for application transport parameter parameter (APP) */ +} /* end group APP */ + +group ARR { +type record ARR_PAR_tlv /* Automatic re-routing parameter (ARR); Optional(O) format. */ +{ + Bit8 paramType ('10010110'B), /* Parameter Type '10010110'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit6 reRoutingCounter, /* Re-routing counter */ + Bit1 reRoutingInhibitIndicator, /* Re-routing inhibit indicator */ + Bit1 ext1, /* Extension */ + ARR_Octet1a aRR_Octet1a optional /* Octet 1a */ +} +with { encode "present=bytes(1,0x96)"; } + +/* Start auxiliary types for automatic re-routing parameter (ARR) */ +type record ARR_Octet1a +{ + Bit7 reRoutingReason, /* Re-routing reason */ + Bit1 ext1a /* Extension */ +} +/* End auxiliary types for automatic re-routing parameter (ARR) */ +} /* group ARR */ + +group ATP { +type record ATP_PAR_tlv /* Access transport parameter (ATP); Optional(O) format. */ +{ + Bit8 paramType ('00000011'B), /* Parameter Type '00000011'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationElements informationElements /* Q.931 information elements */ +} +with { encode "present=bytes(1,0x03)"; + encode (paramLen) "tag=""ATP_paramLen"";"; + encode (informationElements) "length=valueOf(getTag(""ATP_paramLen"")).toInt();"; } + +/* start auxiliary types for access transport parameter (ATP) */ +type set of BearerCapability BearerCapabilities; + +type record BearerCapability /* Q.931 Bearer Capability information element */ +{ + Bit8 iEType ('00000100'B), /* Information Element Type '00000100'B */ + Bit8 iELen, /* Information Element Length field */ + BCAP_octet3 bCAP_octet3, + BCAP_octet4 bCAP_octet4, + BCAP_octet5 bCAP_octet5 optional, + BCAP_octet6 bCAP_octet6 optional, + BCAP_octet7 bCAP_octet7 optional +} + +type record BCAP_octet3 +{ + Bit5 informationTransferCapability, /* Information transfer capability */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet4 +{ + Bit5 informationTransferRate, /* Information transfer rate */ + Bit2 transferMode, /* Transfer mode */ + Bit1 ext, /* Extension */ + Bit8 rateMultiplier optional /* Rate multiplier */ +} + +type record BCAP_octet5 +{ + Bit5 userInformationLayer1Protocol, /* User information Layer 1 protocol */ + Bit2 layerIdentification ('01'B), /* Layer identification */ + Bit1 ext, /* Extension */ + BCAP_octet5a bCAP_octet5a optional, + BCAP_octet5b1 bCAP_octet5b1 optional, + BCAP_octet5b2 bCAP_octet5b2 optional, + BCAP_octet5c bCAP_octet5c optional, + BCAP_octet5d bCAP_octet5d optional +} + +type record BCAP_octet5a +{ + Bit5 userRate, /* User rate */ + Bit1 negot, /* Negotiation */ + Bit1 synch_asynch, /* Synchronous/asynchronous */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5b1 +{ + Bit1 spare, /* Spare */ + Bit1 flowControlOnRx, /* Flow control on reception (Rx) */ + Bit1 flowControlOnTx, /* Flow control on transmission (Tx) */ + Bit1 nICOnRx, /* Network independent Clock (NIC) on reception (Rx) */ + Bit1 nICOnTx, /* Network independent Clock (NIC) on transmission (Tx) */ + Bit2 intermediateRate, /* Intermediate rate */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5b2 +{ + Bit1 spare, /* Spare */ + Bit1 inbandOutbandNegotiation, /* In-band/out-band negotiation */ + Bit1 assignorAssignee, /* Assignor/assignee */ + Bit1 lLINegotiation, /* Logical link identifier negotiation */ + Bit1 mode, /* Mode of operation */ + Bit1 multiFrameSupport, /* Multiple frame establishment support in data link */ + Bit1 hdrNoHdr, /* rate addaption header/no header */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5c +{ + Bit3 parity, /* Parity information */ + Bit2 numberOfDataBits, /* Number of data bits excluding parity bit if present*/ + Bit2 numberOfStopBits, /* Number of stop bits */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5d +{ + Bit6 modemType, /* Modem type */ + Bit1 duplexMode, /* Duplex mode*/ + Bit1 ext /* Extension */ +} + +type record BCAP_octet6 +{ + Bit5 userInformationLayer2Protocol, /* User information Layer 2 protocol */ + Bit2 layerIdentification ('10'B), /* Layer identification */ + Bit1 ext ('1'B) /* Extension */ +} + +type record BCAP_octet7 +{ + Bit5 userInformationLayer3Protocol, /* User information Layer 3 protocol */ + Bit2 layerIdentification ('11'B), /* Layer identification */ + Bit1 ext ('1'B) /* Extension */ +} + +type set of HighLayerCompatibility HighLayerCompatibilities; + +type record HighLayerCompatibility /* Q.931 High Layer Compatibility information element */ +{ + Bit8 iEType ('01111101'B), /* Information Element Type '01111101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit2 presentation, /* Presentation */ + Bit3 interpretation, /* Interpretation */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext1, /* Extension */ + Bit7 highLayerCharacteristicsIdentification, /* High layer characteristics identification */ + Bit1 ext2, /* Extension */ + Bit7 extendedHighLayerCharacteristicsIdentification optional, /* Extended high layer characteristics identification */ + Bit1 ext3 optional, /* Extension */ + Bit7 extendedVideotelephonyCharacteristicsIdentification optional, /* Extended videotelephony characteristics identification */ + Bit1 ext4 optional /* Extension */ + } +with { encode "present=bytes(1,0x7D)" } + +type record LowLayerCompatibility { + Bit8 iEType ('01111100'B), /* Information Element Type '01111100'B */ + Bit8 iELen, /* Information Element Length field */ + LLC_octet3 lLC_octet3, + BCAP_octet4 lLC_octet4, + BCAP_octet5 lLC_octet5 optional, + LLC_octet6 lLC_octet6 optional, + LLC_octet7 lLC_octet7 optional +} +with { encode "present=bytes(1,0x7C)" } + +type record LLC_octet3 { + Bit5 informationTransferCapability, + Bit2 codingStandard, + Bit1 extension_3, + Bit6 spare6 ('000000'B) optional, + Bit1 negotiationIndicator optional, + Bit1 extension_3a optional +}; + +type record LLC_octet6a_user { + Bit7 userSpecifiedLayer2information, + Bit1 extension6a +}; + +type record LLC_octet6a_other { + Bit2 q933Use, + Bit3 spare6a ('000'B), + Bit2 modeOfOperation, + Bit1 extension6a, + Bit7 windowSize optional, + Bit1 extension6b optional +}; + +type union LLC_octet6a { + LLC_octet6a_user octet6a_user, + LLC_octet6a_other octet6a_other +}; + +type record LLC_octet6 { + Bit5 userInformationLayer2Protocol, + Bit2 layerId, + Bit1 extension6, + // OctET 6a-b: + LLC_octet6a octet6a optional +}; + +type record LLC_octet7a_user { + Bit7 userSpecifiedLayer3information, + Bit1 extension7a +}; + +type record LLC_octet7a_other { + Bit5 spare7a ('00000'B), + Bit2 modeOfOperation, + Bit1 extension7a, + Bit4 defaultPacketSize optional, + Bit3 spare7b ('000'B) optional, + Bit1 extension7b optional, + // OctET 7c: + Bit7 packetWindowSize optional, + Bit1 extension7c optional +}; + +type union LLC_octet7a { + LLC_octet7a_user octet7a_user, + LLC_octet7a_other octet7a_other +}; + +type record LLC_octet7 { + Bit5 userInformationLayer3Protocol, + Bit2 layerId ('11'B), + Bit1 extension7, + // OctET 7a: + LLC_octet7a octet7a optional +}; + + type record ProgressIndicator /* Q.931 Progress indicator information element */ +{ + Bit8 iEType ('00011110'B), /* Information Element Type '00011110'B */ + Bit8 iELen, /* Information Element Length field */ + Bit4 location, /* Location */ + Bit1 spare, /* Spare */ + Bit2 codingStandard, /* Coding Standard */ + Bit1 ext1, /* Extension */ + Bit7 progressDescription, /* Progress Description */ + Bit1 ext2 /* Extension */ +} +with { encode "present=bytes(1,0x1E)"; + encode (iELen) "tag=""PI_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""PI_iELen"")).toInt()-1;"; } + + type record CalledPartySubaddress /* Q.931 Called party subaddress information element */ +{ + Bit8 iEType ('01110001'B), /* Information Element Type '01110001'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x71)"; + encode (iELen) "tag=""CDPS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CDPS_iELen"")).toInt()-1;"; } + + type record CallingPartySubaddress /* Q.931 Calling party subaddress information element */ +{ + Bit8 iEType ('01101101'B), /* Information Element Type '01101101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x6D)"; + encode (iELen) "tag=""CGPS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CGPS_iELen"")).toInt()-1;"; } + +type record ConnectedSubaddress /* Q.931 Connected subaddress information element */ +{ + Bit8 iEType ('01001101'B), /* Information Element Type '01001101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x4D)"; + encode (iELen) "tag=""CODS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CODS_iELen"")).toInt()-1;"; } + +type union InformationElements +{ + ISDN_IEs specificInformationElements, /* Used for BCAP, HLC, LLC, PI, CDPS, CGPS and CODS */ + octetstring anyInformationElements /* Used for receive templates */ +} + +type set ISDN_IEs +{ + BearerCapabilities bearerCapability optional, /* Q.931 Bearer Capability maybe repeated */ + HighLayerCompatibilities highLayerCompatibility optional, /* Q.931 High Layer Compatibility maybe repeated */ + LowLayerCompatibility lowLayerCompatibility optional, /* Q.931 Low Layer Compatibility */ + ProgressIndicator progressIndicator optional, /* Q.931 Progress Indicator */ + CalledPartySubaddress calledPartySubaddress optional, /* Q.931 Called Party Subaddress */ + CallingPartySubaddress callingPartySubaddress optional, /* Q.931 Calling Party Subaddress */ + ConnectedSubaddress connectedSubaddress optional /* Q.931 Connected Subaddress */ +} +/* end auxiliary types for access transport parameter (ATP) */ +} /* end group ATP */ + +type record BCI_PAR_v /* Backward call indicators parameter (BCI); Fixed(F) format. */ +{ + Bit2 chargeIndicator, /* bits BA : Charge indicator (Note 1) */ + Bit2 calledPartysStatusIndicator, /* bits DC : Called party's status indicator */ + Bit2 calledPartysCategoryIndicator, /* bits FE : Called party's category indicator */ + Bit2 end_to_endMethodIndicator, /* bits HG : End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit I: Interworking indicator (Note 2) */ + Bit1 end_to_endInformationIndicator, /* bit J: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit K: ISDN user part indicator (Note 2) */ + Bit1 holdingIndicator, /* bit L: Holding indicator (national use) */ + Bit1 iSDNAccessIndicator, /* bit M: ISDN access indicator */ + Bit1 echoControlDeviceIndicator, /* bit N: Echo control device indicator */ + Bit2 sCCPMethodIndicator /* bits PO: SCCP method indicator (Note 2) */ +} + +type record BCI_PAR_tlv /* Backward call indicators parameter (BCI); Optional(O) format. */ +{ + Bit8 paramType ('00010001'B), /* Parameter Type '00010001'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit2 chargeIndicator, /* bits BA : Charge indicator (Note 1) */ + Bit2 calledPartysStatusIndicator, /* bits DC : Called party's status indicator */ + Bit2 calledPartysCategoryIndicator, /* bits FE : Called party's category indicator */ + Bit2 end_to_endMethodIndicator, /* bits HG : End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit I: Interworking indicator (Note 2) */ + Bit1 end_to_endInformationIndicator, /* bit J: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit K: ISDN user part indicator (Note 2) */ + Bit1 holdingIndicator, /* bit L: Holding indicator (national use) */ + Bit1 iSDNAccessIndicator, /* bit M: ISDN access indicator */ + Bit1 echoControlDeviceIndicator, /* bit N: Echo control device indicator */ + Bit2 sCCPMethodIndicator /* bits PO: SCCP method indicator (Note 2) */ +} +with { encode "present=bytes(1,0x11)"; } + +type record BGV_PAR_tlv /* Backward GVNS parameter (BGV); Optional(O) format. */ +{ + Bit8 paramType ('01001101'B), /* Parameter Type '01001101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 terminatingAccessIndicator, /* bits B A: Terminating access indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator: as for 3.25 a). */ +} +with { encode "present=bytes(1,0x4D)"; } + +type record CAM_PAR_tlv /* Circuit assignment map parameter (CAM); Optional(O) format. */ +{ + Bit8 paramType ('00100101'B), /* Parameter Type '00100101'B */ + Bit8 paramLen ('00000101'B), /* Parameter Length field */ + Bit6 mapType, /* Map type */ + Bit2 spare, /* spare */ + Bit32 mappingBits /* mapping bits */ +} +with { encode "present=bytes(1,0x25)"; } + +type record CAUI_PAR_lv /* Cause indicators parameter (CAUI); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit4 location, /* location */ + Bit1 spare, /* spare */ + Bit2 codingStandard, /* codingStandard */ + Bit1 ext1, /* Extension */ + Bit7 causeValue, /* Cause value */ + Bit1 ext2, /* Extension */ + octetstring diagnostics optional /* Diagnostic(s) (if any) */ +} +with { encode (paramLen) "tag=""CAUI_paramLen"";"; + encode (diagnostics) "length=valueOf(getTag(""CAUI_paramLen"")).toInt()-2;"; } + +type record CAUI_PAR_tlv /* Cause indicators parameter (CAUI); Optional(O) format. */ +{ + Bit8 paramType ('00010010'B), /* Parameter Type '00010010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 location, /* location */ + Bit1 spare, /* spare */ + Bit2 codingStandard, /* codingStandard */ + Bit1 ext1, /* Extension */ + Bit7 causeValue, /* Cause value */ + Bit1 ext2, /* Extension */ + octetstring diagnostics optional /* Diagnostic(s) (if any) */ +} +with { encode "present=bytes(1,0x12)"; + encode (paramLen) "tag=""CAUI_paramLen"";"; + encode (diagnostics) "length=valueOf(getTag(""CAUI_paramLen"")).toInt()-2;"; } + +type record CCPI_PAR_tlv /* CCNR possible indicator parameter (CCPI); Optional(O) format. */ +{ + Bit8 paramType ('01111010'B), /* Parameter Type '01111010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 cCNRPossibleIndicator, /* bit A: CCNR possible indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x7A)"; } + +type record CCRQ_PAR_tlv /* Collect call request parameter (CCRQ); Optional(O) format. */ +{ + Bit8 paramType ('01111001'B), /* Parameter Type '01111001'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 collectCallRequestIndicator, /* bit A: Collect call request indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x79)"; } + +type record CCSS_PAR_tlv /* CCSS parameter (CCSS); Optional(O) format. */ +{ + Bit8 paramType ('01001011'B), /* Parameter Type '01001011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 cCSSCallIndicator, /* bit A: CCSS call indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x4B)"; } + +type record CDI_PAR_tlv /* Call diversion information parameter (CDI); Optional(O) format. */ +{ + Bit8 paramType ('00110110'B), /* Parameter Type '00110110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 notificationSubscriptionOptions, /* bits CBA: Notification subscription options */ + Bit4 redirectingReason, /* bits GFED: Redirecting reason */ + Bit1 spare /* bit H: spare */ +} +with { encode "present=bytes(1,0x36)"; } + +type record CDIN_PAR_tlv /* Called directory number parameter (CDIN); Optional(O) format. */ +{ + Bit8 paramType ('01111101'B), /* Parameter Type '01111101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x7D)"; + encode (paramLen) "tag=""CDIN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CDIN_paramLen"")).toInt()-2;"; } + +type record CDN_PAR_lv /* Called party number parameter (CDN); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* OE */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode (paramLen) "tag=""CDN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CDN_paramLen"")).toInt()-2;"; } + +type record CDTI_PAR_tlv /* Call diversion treatment indicators parameter (CDTI); Optional(O) format. */ +{ + Bit8 paramType ('01101110'B), /* Parameter Type '01101110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 callToBeDivertedIndicator, /* bits BA: Call to be diverted indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x6E)"; } + +type Bit8 CGC_PAR_v; /* Calling party's category parameter (CGC); Fixed(F) format. */ + +type record CGC_PAR_tlv /* Calling party's category parameter (CGC); Optional(O) format. */ +{ + Bit8 paramType ('00001001'B), /* Parameter Type '00110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 callingPartysCategory /* Calling party's category */ +} +with { encode "present=bytes(1,0x09)"; } + +group CGL { +type record CGL_PAR_tlv /* Calling geodetic location parameter (CGL); Optional(O) format. */ +{ + Bit8 paramType ('10000001'B), /* Parameter Type '10000001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit2 screeningIndicator, /* b) Screening indicator */ + Bit2 locationPresRestrIndicator, /* a) Location presentation restricted indicator */ + Bit4 spare, /* spare */ + Bit7 typeOfShape, /* Type of shape */ + Bit1 ext, /* Extension */ + ShapeDescription shapeDescription /* Shape description */ +} +with { encode "present=bytes(1,0x81)"; + encode (paramLen) "tag=""CGL_paramLen"";"; + encode (shapeDescription) "length=valueOf(getTag(""CGL_paramLen"")).toInt()-2;"; } + +/* Start auxiliary types for calling geodetic location parameter (CGL) */ +type record EllipsoidPointShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude /* Degrees of longitude */ +} + +type record EllipsoidPointWithUncertaintyShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 uncertaintyCode, /* Uncertainty code */ + Bit1 spare1, /* spare */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record PointWithAltitudeAndUncertaintyShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 uncertaintyCode1, /* Uncertainty code */ + Bit1 spare1, /* spare */ + Oct2 altitude, /* Altitude */ + Bit7 uncertaintyCode2, /* uncertainty code */ + Bit1 spare, /* spare */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record EllipseOnTheEllipsoidShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 majorRadius, /* Major radius */ + Bit1 spare1, /* spare */ + Bit7 minorRadius, /* Minor radius */ + Bit1 spare2, /* spare */ + Bit8 orientation, /* Orientation */ + Bit7 confidence, /* Confidence */ + Bit1 spare3 /* spare */ +} + +type record EllipsoidCircleSectorShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 radius, /* Radius */ + Bit1 spare1, /* spare */ + Bit8 offset, /* Offset */ + Bit8 includedAngle, /* Included angle */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record PolygonShapeDescription +{ + Bit4 numberOfPoints, /* Number of points */ + Bit4 spare, /* spare */ + octetstring contents /* contents */ +} +with { encode (numberOfPoints) "tag=""numOfPoints"";"; + encode (contents) "length=valueOf(getTag(""numOfPoints"")).toInt()*6;"; } + +type union ShapeDescription +{ + EllipsoidPointShapeDescription ellipsoidPointShapeDescription, + EllipsoidPointWithUncertaintyShapeDescription ellipsoidPointWithUncertaintyShapeDescription, + PointWithAltitudeAndUncertaintyShapeDescription pointWithAltitudeAndUncertaintyShapeDescription, + EllipseOnTheEllipsoidShapeDescription ellipseOnTheEllipsoidShapeDescription, + EllipsoidCircleSectorShapeDescription ellipsoidCircleSectorShapeDescription, + PolygonShapeDescription polygonShapeDescription +} +/* End auxiliary types for calling geodetic location parameter (CGL) */ +} /* end group CGL */ + +type record CGN_PAR_tlv /* Calling party number parameter (CGN); Optional(O) format. */ +{ + Bit8 paramType ('00001010'B), /* Parameter Type '00001010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* OE */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 nII, /* NumberIncompleteIndicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0A)"; + encode (paramLen) "tag=""CGN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CGN_paramLen"")).toInt()-2;"; } + +type record CGSM_PAR_v /* Circuit group supervision message type parameter (CGSM); Fixed(F) format. */ +{ + Bit2 cgSupervMTypeIndicator, /* bits BA: Circuit group supervision message type indicator */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x15)"; } + +type record CHI_PAR_tlv /* Call history parameter (CHI); Optional(O) format. */ +{ + Bit8 paramType ('00101101'B), /* Parameter Type '00101101'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit16 propagationDelayValue /* Propagation delay value */ +} +with { encode "present=bytes(1,0x2D)"; } + +type record CIN_PAR_tlv /* Called IN number parameter (CIN); Optional(O) format. */ +{ + Bit8 paramType ('01101111'B), /* Parameter Type '01101111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x6F)"; + encode (paramLen) "tag=""CIN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CIN_paramLen"")).toInt()-2;"; } + +type record COI_PAR_v /* Continuity indicators parameter (COI); Fixed(F) format. */ +{ + Bit1 continuityIndicator, /* bit A: Continuity indicator */ + Bit7 spare /* bits H-B: spare */ +} + +type record COTI_PAR_tlv /* Call offering treatment indicators parameter (COTI); Optional(O) format. */ +{ + Bit8 paramType ('01110000'B), /* Parameter Type '01110000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 callToBeOfferedIndicator, /* bits BA: Call to be offered indicator */ + Bit6 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x70)"; } + +type record CPN_PAR_tlv /* Connected number parameter (CPN); Optional(O) format. */ +{ + Bit8 paramType ('00100001'B), /* Parameter Type '00100001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfaddressindicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + Bit3 numberingplanIndicator, /* Numberingplan indicator */ + Bit1 spare, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x21)"; + encode (paramLen) "tag=""CPN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CPN_paramLen"")).toInt()-2;"; } + +type record CRI_PAR_tlv /* Correlation id parameter (CRI); Optional(O) format. */ +{ + Bit8 paramType ('01100101'B), /* Parameter Type '01100101'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring correlationId /* Correlation id */ +} +with { encode "present=bytes(1,0x65)"; + encode (paramLen) "tag=""CRI_paramLen"";"; + encode (correlationId) "length=valueOf(getTag(""CRI_paramLen"")).toInt();"; } + +type record CRQ_PAR_tlv /* Connection request parameter (CRQ); Optional(O) format. */ +{ + Bit8 paramType ('00001101'B), /* Parameter Type '00001101'B */ + Bit8 paramLen, /* Parameter Length field */ + Oct3 localReference, /* Local reference */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare, /* spare */ + Bit8 protocolClass optional, /* Protocol class */ + Bit8 credit optional /* Credit */ +} +with { encode "present=bytes(1,0x0D)"; } + +type record CRF_PAR_tlv /* Call reference parameter (CRF); Optional(O) format. */ +{ + Bit8 paramType ('00000001'B), /* Parameter Type '00000001'B */ + Bit8 paramLen ('00000101'B), /* Parameter Length field */ + Bit24 callIdentity, /* Call identity */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x01)"; } + +group CSI { +type record CSI_PAR_lv /* Circuit state indicator parameter (CSI); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + CircuitIndicators circuitIndicators +} +with { encode (paramLen) "tag=""CSI_paramLen"";"; + encode (circuitIndicators) "length=valueOf(getTag(""CSI_paramLen"")).toInt();"; } + +/* start auxiliary types for circuit state indicator parameter (CSI) */ +type record CircuitIndicator +{ + Bit2 maintenanceBlockingState, /* bits BA: Maintenance blocking state */ + Bit2 callProcessingState, /* bits DC: Call processing state */ + Bit2 hardwareBlockingState, /* bits F E: Hardware blocking state (Note) */ + Bit2 spare /* bits H-G: spare */ +} + +type set of CircuitIndicator CircuitIndicators; +/* end auxiliary types for circuit state indicator parameter (CSI) */ +} /* end group CSI */ + +type record CTI_PAR_tlv /* Conference treatment indicators parameter (CTI); Optional(O) format. */ +{ + Bit8 paramType ('01110010'B), /* Parameter Type '01110010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 conferenceAcceptanceIndicator, /* bits BA: Conference acceptance indicator (Note) */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x72)"; } + +type record CTN_PAR_tlv /* Call transfer number parameter (CTN); Optional(O) format. */ +{ + Bit8 paramType ('01000101'B), /* Parameter Type '01000101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x45)"; + encode (paramLen) "tag=""CTN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CTN_paramLen"")).toInt()-2;"; } + +type record CTR_PAR_tlv /* Call transfer reference parameter (CTR); Optional(O) format. */ +{ + Bit8 paramType ('01000011'B), /* Parameter Type '01000011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 callTransferIdentity /* Call transfer identity */ +} +with { encode "present=bytes(1,0x43)"; } + +type record CUGIC_PAR_tlv /* Closed user group interlock code parameter (CUGIC); Optional(O) format. */ +{ + Bit8 paramType ('00011010'B), /* Parameter Type '00011010'B */ + Bit8 paramLen ('00000100'B), /* Parameter Length field */ + Oct2 networkIdentity, /* a) Network Identity (NI) (octets 1 and 2) */ + Bit16 binaryCode /* Binary code */ +} +with { encode "present=bytes(1,0x1A)"; } + +type record DIF_PAR_tlv /* Display information parameter (DIF); Optional(O) format. */ +{ + Bit8 paramType ('01110011'B), /* Parameter Type '01110011'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring displayInformation /* Display information */ +} +with { encode "present=bytes(1,0x73)"; + encode (paramLen) "tag=""DIF_paramLen"";"; + encode (displayInformation) "length=valueOf(getTag(""DIF_paramLen"")).toInt();"; } + +type record ECI_PAR_tlv /* Echo control information parameter (ECI); Optional(O) format. */ +{ + Bit8 paramType ('00110111'B), /* Parameter Type '00110111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 outgECDeviceInfoInd, /* bits BA: Outgoing echo control device information indicator */ + Bit2 incECDeviceInfoInd, /* bits DC: Incoming echo control device information indicator */ + Bit2 outgECDeviceReqInd, /* bits FE : Outgoing echo control device request indicator */ + Bit2 IncECDeviceReqInd /* bits HG: Incoming echo control device request indicator */ +} +with { encode "present=bytes(1,0x37)"; } + +type record EIF_PAR_v /* Event information parameter (EIF); Fixed(F) format. */ +{ + Bit7 eventIndicator, /* bits G F E D C B A: Event indicator */ + Bit1 eventPresRestrInd /* bit H: Event presentation restricted indicator (national use) */ +} + +type Bit8 EOP ('00000000'B) with { encode "present=bytes(1,0x00)"; }; + +type Bit8 FAI_PAR_v; /* Facility indicator parameter (FAI); Fixed(F) format. */ + +type record FAI_PAR_tlv /* Facility indicator parameter (FAI); Optional(O) format. */ +{ + Bit8 paramType ('00011000'B), /* Parameter Type '00011000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 facilityIndicators /* Facility indicators */ +} +with { encode "present=bytes(1,0x18)"; } + +type record FCI_PAR_v /* Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + Bit1 natInternatCallIndicator, /* bit A: National/international call indicator (Note 1) */ + Bit2 endToEndMethodIndicator, /* bits CB: End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit D: Interworking indicator (Note 2) */ + Bit1 endToEndInfoIndicator, /* bit E: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit F: ISDN user part indicator (Note 2) */ + Bit2 iSDNUserPartPrefIndicator, /* bits HG: ISDN user part preference indicator */ + Bit1 iSDNAccessIndicator, /* bit I: ISDN access indicator */ + Bit2 sCCPMethodIndicator, /* bits KJ: SCCP method indicator (Note 2) */ + Bit1 spare, /* bit L: spare */ + Bit4 reserved /* bits P-M: reserved for national use */ +} + +group FGVNS { +type record FGVNS_PAR_tlv /* Forward GVNS parameter (FGVNS); Optional(O) format. */ +{ + Bit8 paramType ('01001100'B), /* Parameter Type '01001100'B */ + Bit8 paramLen, /* Parameter Length field */ + FGVNSContents fGVNSContents +} +with { encode "present=bytes(1,0x4C)"; + encode (paramLen) "tag=""FGVNS_paramLen"";"; + encode (fGVNSContents) "length=valueOf(getTag(""FGVNS_paramLen"")).toInt();"; } + +/* Start auxiliary types for forward GVNS parameter (FGVNS) */ +type record FGVNSContents +{ + OriginatingParticipatingServiceProvider originatingParticipatingServiceProvider, /* Originating participating service provider (OPSP) (Structured Type) */ + GVNSUserGroup gVNSUserGroup, /* GVNS user group (GUG) (Structured Type) */ + TerminatingNetworkRoutingNumber terminatingNetworkRoutingNumber /* Terminating network routing number (TNRN) (Structured Type) */ +} + +type record OriginatingParticipatingServiceProvider +{ + Bit4 oPSPLengthIndicator, /* OPSP length indicator */ + Bit3 spare, /* spare */ + Bit1 oddEven, /* O/E */ + Oct0to4 digits /* digits */ +} +with { encode (oPSPLengthIndicator) "tag=""OPSP_paramLen"";"; + encode (digits) "length=valueOf(getTag(""OPSP_paramLen"")).toInt();"; } + +type record GVNSUserGroup +{ + Bit4 gUGLengthIndicator, /* GUG length indicator */ + Bit3 spare, /* spare */ + Bit1 oddEven, /* O/E */ + Oct0to8 digits /* digits */ +} +with { encode (gUGLengthIndicator) "tag=""GUG_paramLen"";"; + encode (digits) "length=valueOf(getTag(""GUG_paramLen"")).toInt();"; } + +type record TerminatingNetworkRoutingNumber +{ + Bit4 tNRNLengthIndicator, /* TNRN length indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 oddEven, /* O/E */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 spare, /* spare */ + Oct0to9 digits /* digits */ +} +with { encode (tNRNLengthIndicator) "tag=""TNRN_paramLen"";"; + encode (digits) "length=valueOf(getTag(""TNRN_paramLen"")).toInt();"; } +/* End auxiliary types for forward GVNS parameter (FGVNS) */ +} /* end group FGVNS */ + +type record GDG_PAR_tlv /* Generic digits parameter (GDG); Optional(O) format. */ +{ + Bit8 paramType ('11000001'B), /* Parameter Type '11000001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit5 typeOfDigits, /* Encoding scheme Type of digits */ + Bit3 encodingScheme, /* Encoding scheme Type of digits */ + Oct1to15 digits /* Digits */ +} +with { encode "present=bytes(1,0xC1)"; + encode (paramLen) "tag=""CDG_paramLen"";"; + encode (digits) "length=valueOf(getTag(""CDG_paramLen"")).toInt()-1;"; } + +type record GNI_PAR_tlv /* Generic notification indicator parameter (GNI); Optional(O) format. */ +{ + Bit8 paramType ('00101100'B), /* Parameter Type '00101100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit7 notificationIndicator, /* Notification indicator */ + Bit1 ext /* Extension */ +} +with { encode "present=bytes(1,0x2C)"; } + +type record GNU_PAR_tlv /* Generic number parameter (GNU); Optional(O) format. */ +{ + Bit8 paramType ('11000000'B), /* Parameter Type '11000000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit8 numberQualifierIndicator, /* Number qualifier indicator */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator (NOTE�1/21) */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator (NOTE�1/24) */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE�1/23) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator (NOTE�1/22) */ + Bit1 nI, /* Number incomplete indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0xC0)"; + encode (paramLen) "tag=""GNU_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""GNU_paramLen"")).toInt()-3;"; } + + +type record HPC_PAR_tlv /* Hop counter parameter (HPC); Optional(O) format. */ +{ + Bit8 paramType ('00111101'B), /* Parameter Type '00111101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 hopCounter, /* bits EDCBA: Hop counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x7D)"; } + +type record HTRI_PAR_tlv /* HTR information parameter (HTRI); Optional(O) format. */ +{ + Bit8 paramType ('10000010'B), /* Parameter Type '10000010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare1, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x82)"; + encode (paramLen) "tag=""HTRI_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""HTRI_paramLen"")).toInt()-2;"; } + +type record IID_PAR_v /* Information indicators parameter (IID); Fixed(F) format. */ +{ + Bit2 cliAddrResponseIndicator, /* bits BA: Calling party address response indicator */ + Bit1 holdProvidedIndicator, /* bit C: Hold provided indicator */ + Bit2 spare1, /* bits ED: spare */ + Bit1 cliCatRespIndicator, /* bit F: Calling party's category response indicator */ + Bit1 chargeInfoRespIndicator, /* bit G: Charge information response indicator */ + Bit1 solicitedInfoIndicator, /* bit H: Solicited information indicator */ + Bit4 spare2, /* bits L-I: spare */ + Bit4 reserved /* bits P-M: reserved */ +} + +type record IPRRB_IT /* Invoking pivot/redirect reason backward information type */ +{ + Bit8 informationTypeTag ('00000011'B), /* information type tag '00000011'B */ + Bit8 informationTypeLength ('00000001'B), /* information type length */ + Bit7 invokingReason, /* Invoking pivot/redirect reason */ + Bit1 ext /* Extension indicator */ +} +with { encode "present=bytes(1,0x03)"; } + +type record IPRRF_IT /* Invoking pivot/redirect reason forward information type */ +{ + Bit8 informationTypeTag ('00000100'B), /* information type tag '00000100'B */ + Bit8 informationTypeLength ('00000001'B), /* information type length */ + Bit7 invokingReason, /* Invoking pivot/redirect reason */ + Bit1 ext /* Extension indicator */ +} +with { encode "present=bytes(1,0x04)"; } + +type record IRI_PAR_v /* Information request indicators parameter (IRI); Fixed(F) format. */ +{ + Bit1 cliAddrRequestIndicator, /* bit A: Calling party address request indicator */ + Bit1 holdingIndicator, /* bit B: Holding indicator */ + Bit1 spare1, /* bit C: spare */ + Bit1 cliCatRequestIndicator, /* bit D: Calling party's category request indicator */ + Bit1 chargeInfoRequestIndicator, /* bit E: Charge information request indicator */ + Bit2 spare2, /* bits GF: spare */ + Bit1 maliciousCidReqIndicator, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + Bit4 spare3, /* bits L-I: spare */ + Bit4 reserved /* bits P-M: reserved */ +} + +type record LON_PAR_tlv /* Location number parameter (LON); Optional(O) format. */ +{ + Bit8 paramType ('00111111'B), /* Parameter Type '00111111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE ) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x3F)"; + encode (paramLen) "tag=""LON_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""LON_paramLen"")).toInt()-2;"; } + +type record LPPI_PAR_tlv /* Loop prevention indicators parameter (LPPI); Optional(O) format. */ +{ + Bit8 paramType ('01000100'B), /* Parameter Type '01000100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 request_response, /* bit A: Type */ + Bit2 responseIndicator, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + Bit5 spare /* bits H-D: spare */ +} +with { encode "present=bytes(1,0x44)"; } + +group MCI { +type record MCI_PAR_tlv /* Message compatibility information parameter (MCI); Optional(O) format. */ +{ + Bit8 paramType ('00111000'B), /* Parameter Type '00111000'B */ + Bit8 paramLen, /* Parameter Length field */ + InstructionIndicators instructionIndicators +} +with { encode "present=bytes(1,0x38)"; + encode (paramLen) "tag=""MCI_paramLen"";"; + encode (instructionIndicators) "length=valueOf(getTag(""MCI_paramLen"")).toInt();"; } + +/* Start auxiliary types for message compatibility information parameter (MCI) */ +type record InstructionIndicator +{ + Bit1 transitAtIntermExchIndicator, /* bit A: Transit at intermediate exchange indicator */ + Bit1 releaseCallIndicator, /* bit B: Release call indicator */ + Bit1 sendNotificationIndicator, /* bit C: Send notification indicator */ + Bit1 discardMessageIndicator, /* bit D: Discard message indicator */ + Bit1 passOnNotPossibleIndicator, /* bit E: Pass on not possible indicator */ + Bit2 broadNarrowBandInterwIndicator, /* bits G F: Broadband/narrowband interworking indicator */ + Bit1 ext /* extension bit */ +} + +type set of InstructionIndicator InstructionIndicators; +/* End auxiliary types for message compatibility information parameter (MCI) */ +} /* end group MCI */ + +type record MCRI_PAR_tlv /* MCID request indicators parameter (MCRI); Optional(O) format. */ +{ + Bit8 paramType ('00111011'B), /* Parameter Type '00111011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 mCIDRequestIndicator, /* bit A: MCID request indicator */ + Bit1 holdingIndicator, /* bit B: Holding indicator (national use) */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x3B)"; } + +type record MCRS_PAR_tlv /* MCID response indicators parameter (MCRS); Optional(O) format. */ +{ + Bit8 paramType ('00111100'B), /* Parameter Type '00111100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 mCIDResponseIndicator, /* bit A: MCID response indicator */ + Bit1 holdProvidedIndicator, /* bit B: Hold provided indicator (national use) */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x3C)"; } + +type record MLPP_PAR_tlv /* MLPP precedence parameter (MLPP); Optional(O) format. */ +{ + Bit8 paramType ('00111010'B), /* Parameter Type '00111010'B */ + Bit8 paramLen ('00000110'B), /* Parameter Length field */ + Bit4 precedenceLevel, /* Precedence level */ + Bit1 spare1, /* spare */ + Bit2 lFB, /* LFB (look ahead for busy) */ + Bit1 spare2, /* spare */ + Oct2 networkIdentity, /* Network Identity (NI) octet 2 and 3 */ + Oct3 mLppServiceDomain /* MLPP service domain */ +} +with { encode "present=bytes(1,0x3A)"; } + +type record NCI_PAR_v /* Nature of connection indicators parameter (NCI); Fixed(F) format. */ +{ + Bit2 satelliteIndicator, /* bits BA: Satellite indicator */ + Bit2 continuityCheckIndicator, /* bits DC: Continuity check indicator */ + Bit1 echoControlDeviceIndicator, /* bit E: Echo control device indicator */ + Bit3 spare /* bits H-F: spare */ +} + +type record NMC_PAR_tlv /* Network management controls parameter (NMC); Optional(O) format. */ +{ + Bit8 paramType ('01011011'B), /* Parameter Type '01011011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 temporaryAlternativeRouting, /* bit A: Temporary Alternative Routing (TAR) indicator */ + Bit6 spare, /* bits G-B: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x5B)"; } + +type record NPFI_PAR_tlv /* Number portability forward information parameter (NPFI); Optional(O) format. */ +{ + Bit8 paramType ('10001101'B), /* Parameter Type '10001101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit4 numberPortabilityStatusIndicator, /* a) bits DCBA: Number portability status indicator */ + Bit3 spare, /* b) bits GFE: spare */ + Bit1 ext /* c) bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x8D)"; } + +type record NRN_PAR_tlv /* Network routing number parameter (NRN); Optional(O) format. */ +{ + Bit8 paramType ('10000100'B), /* Parameter Type '10000100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 natureOfAddressIndicator, /* Nature of address indicator */ + Bit3 numberingPlanIdentifier, /* Numbering Plan Identifier */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x84)"; + encode (paramLen) "tag=""NRN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""NRN_paramLen"")).toInt()-1;"; } + +type record NSF_PAR_tlv /* Network specific facility parameter (NSF); Optional(O) format. */ +{ + Bit8 paramType ('00101111'B), /* Parameter Type '00101111'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring networkSpecific /* Network identification */ +} +with { encode "present=bytes(1,0x2F)"; + encode (paramLen) "tag=""NSF_paramLen"";"; + encode (networkSpecific) "length=valueOf(getTag(""NSF_paramLen"")).toInt();"; } + +type record OBCI_PAR_tlv /* Optional backward call indicators parameter (OBCI); Optional(O) format. */ +{ + Bit8 paramType ('00101001'B), /* Parameter Type '00101001'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 inBandInformationIndicator, /* bit A: In-band information indicator */ + Bit1 callDivMayOccurIndicator, /* bit B: Call diversion may occur indicator */ + Bit1 simpleSegmentationIndicator, /* bit C: Simple segmentation indicator */ + Bit1 mLPPUserIndicator, /* bit D: MLPP user indicator */ + Bit4 reserved /* bits H-E: reserved for national use */ +} +with { encode "present=bytes(1,0x29)"; } + +type record OCI_PAR_tlv /* Original called IN number parameter (OCI); Optional(O) format. */ +{ + Bit8 paramType ('01111111'B), /* Parameter Type '01111111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x7F)"; + encode (paramLen) "tag=""OCI_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""OCI_paramLen"")).toInt()-2;"; } + +type record OCN_PAR_tlv /* Original called number parameter (OCN); Optional(O) format. */ +{ + Bit8 paramType ('00101000'B), /* Parameter Type '00101000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x28)"; + encode (paramLen) "tag=""OCN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""OCN_paramLen"")).toInt()-2;"; } + +type record OFCI_PAR_tlv /* Optional forward call indicators parameter (OFCI); Optional(O) format. */ +{ + Bit8 paramType ('00001000'B), /* Parameter Type '00001000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 cUGCallIndicator, /* bits BA: Closed user group call indicator */ + Bit1 simpleSegIndicator, /* bit C: Simple segmentation indicator */ + Bit4 spare, /* bits G-D: spare */ + Bit1 cLIRequestIndicator /* bit H: Connected line identity request indicator */ +} +with { encode "present=bytes(1,0x08)"; } + +type record OIPC_PAR_tlv /* Origination ISC point code parameter (OIPC); Optional(O) format. */ +{ + Bit8 paramType ('00101011'B), /* Parameter Type '00101011'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x2B)"; } + +group PCI { +type record PCI_PAR_tlv /* Parameter compatibility information parameter (PCI); Optional(O) format. */ +{ + Bit8 paramType ('00111001'B), /* Parameter Type '00111001'B */ + Bit8 paramLen, /* Parameter Length field */ + ParameterInstructionIndicators parameterInstructionIndicators +} +with { encode "present=bytes(1,0x39)"; + encode (paramLen) "tag=""PCI_paramLen"";"; + encode (parameterInstructionIndicators) "length=valueOf(getTag(""PCI_paramLen"")).toInt();"; } + +/* Start auxiliary types for parameter compatibility information parameter (PCI) */ +type record ParameterInstructionIndicator +{ + Bit8 upgradedParameter, /* upgraded parameter name */ + Bit1 transitAtIntermExchIndicator, /* bit A: Transit at intermediate exchange indicator */ + Bit1 releaseCallIndicator, /* bit B: Release call indicator */ + Bit1 sendNotificationIndicator, /* bit C: Send notification indicator */ + Bit1 discardMessageIndicator, /* bit D: Discard message indicator */ + Bit1 discardParameterIndicator, /* bit E: Discard parameter indicator */ + Bit2 passOnNotPossibleIndicator, /* bits G F: Pass on not possible indicator */ + Bit1 ext1, /* bit H: Extension indicator (ext.) */ + Bit2 broadNarrowBandInterwIndicator optional, /* bits J I: Broadband/narrowband interworking indicator */ + Bit5 spare optional, /* bits O-K: spare */ + Bit1 ext2 optional, /* bit P: Extension indicator (ext.) */ + octetstring moreInstructionIndicators optional /* to be defined when required */ +} +type set of ParameterInstructionIndicator ParameterInstructionIndicators; +/* End auxiliary types for parameter compatibility information parameter (PCI) */ +} /* end group PCI */ + +type record PDC_PAR_tlv /* Propagation delay counter parameter (PDC); Optional(O) format. */ +{ + Bit8 paramType ('00110001'B), /* Parameter Type '00110001'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit16 propagationDelayValue /* Propagation delay value */ +} +with { encode "present=bytes(1,0x31)"; } + +type record PICN_PAR_tlv /* Pivot counter parameter (PICN); Optional(O) format. */ +{ + Bit8 paramType ('10000111'B), /* Parameter Type '10000111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 pivotCounter, /* bits EDCBA: Pivot counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x87)"; } + +type record PICP_PAR_tlv /* Pivot capability parameter (PICP); Optional(O) format. */ +{ + Bit8 paramType ('01111011'B), /* Parameter Type '01111011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 pivotPossibleIndicator, /* bits CBA: Pivot possible indicator */ + Bit3 spare, /* bits FED: spare */ + Bit1 interwToRedirectionIndicator, /* bit G: Interworking to redirection indicator (national use) */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x7B)"; } + +group Auxiliary_PRFI_PRBI_RFI_RBI { +/* Start auxiliary types for + - pivot routing forward information parameter (PRFI) + - pivot routing backward information parameter (PRBI) + - redirect forward information parameter (RFI) + - redirect backward information parameter (RBI) */ +type record RIEP_IT /* Return to invoking exchange possible information type */ +{ + Bit8 informationTypeTag ('00000001'B), /* information type tag '00000001'B */ + Bit8 informationTypeLength ('00000000'B) /* information type length */ +} +with { encode "present=bytes(1,0x01)"; } + +type record RIECI_IT /* Return to invoking exchange call identifier information type */ +{ + Bit8 informationTypeTag ('00000010'B), /* information type tag '00000010'B */ + Bit8 informationTypeLength('00000101'B), /* information type length */ + Bit24 callIdentity, /* Call identity */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x02)"; } + +type record PerformingReason +{ + Bit7 performingReason, /* Performing Pivot/Redirect Reason */ + Bit1 ext, /* Extension indicator */ + Bit4 possibleIndicator, /* Pivot/Redirect possible indicator at performing exchange */ + Bit4 spare /* spare */ +} + +type set of PerformingReason PerformingReasons; + +type record PPRI_IT /* Performing pivot/redirect indicator information type */ +{ + Bit8 informationTypeTag ('00000011'B), /* information type tag '00000011'B */ + Bit8 informationTypeLength, /* information type length */ + PerformingReasons performingReasons /* Performing Pivot/Redirect Reasons */ +} +with { encode "present=bytes(1,0x03)"; + encode (informationTypeLength) "tag=""PPRI_informationTypeLength"";"; + encode (performingReasons) "length=valueOf(getTag(""PPRI_informationTypeLength"")).toInt();"; } + +type record RIED_IT /* Return to invoking exchange duration */ +{ + Bit8 informationTypeTag ('00000001'B), /* information type tag '00000001'B */ + Bit8 informationTypeLength, /* information type length */ + Oct1to2 returnToInvokingExchangeDuration /* Return to invoking exchange duration in seconds */ +} +with { encode "present=bytes(1,0x01)"; + encode (informationTypeLength) "tag=""RIED_informationTypeLength"";"; + encode (returnToInvokingExchangeDuration) "length=valueOf(getTag(""RIED_informationTypeLength"")).toInt();"; } + +type union InformationType_Forward /* Information type for Pivot/Redirect routing forward information parameters */ +{ + RIEP_IT rIEP_IT, + RIECI_IT rIECI_IT, + PPRI_IT pPRI_IT, + IPRRF_IT iPRRF_IT +} + +type union InformationType_Backward /* Information type for Pivot/Redirect routing backward information parameters */ +{ + RIED_IT rIED_IT, + RIECI_IT rIECI_IT, + IPRRB_IT iPRRB_IT +} + +type set of InformationType_Forward InformationTypes_Forward; + +type set of InformationType_Backward InformationTypes_Backward; +/* End auxiliary types for + - pivot routing forward information parameter (PRFI) + - pivot routing backward information parameter (PRBI) + - redirect forward information parameter (RFI) + - redirect backward information parameter (RBI) */ + +} /* end group Auxiliary_PRFI_PRBI_RFI_RBI */ + +type record PRBI_PAR_tlv /* Pivot routing backward information parameter (PRBI); Optional(O) format. */ +{ + Bit8 paramType ('10001001'B), /* Parameter Type '10001001'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Backward informationTypes_Backward /* information types */ +} +with { encode "present=bytes(1,0x89)"; + encode (paramLen) "tag=""PRBI_paramLen"";"; + encode (informationTypes_Backward) "length=valueOf(getTag(""PRBI_paramLen"")).toInt();"; } + +type record PRFI_PAR_tlv /* Pivot routing forward information parameter (PRFI); Optional(O) format. */ +{ + Bit8 paramType ('10001000'B), /* Parameter Type '10001000'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Forward informationTypes_Forward /* information types */ +} +with { encode "present=bytes(1,0x88)"; + encode (paramLen) "tag=""PRFI_paramLen"";"; + encode (informationTypes_Forward) "length=valueOf(getTag(""PRFI_paramLen"")).toInt();"; } + +type record PRI_PAR_tlv /* Pivot routing indicators parameter (PRI); Optional(O) format. */ +{ + Bit8 paramType ('01111100'B), /* Parameter Type '01111100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit7 pivotRoutingIndicators, /* bits G F E D C B A: Pivot routing indicators */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x7C)"; } + +type record PST_PAR_tlv /* Pivot status parameter (PST); Optional(O) format. */ +{ + Bit8 paramType ('10000110'B), /* Parameter Type '10000110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 pivotStatusIndicator, /* bits BA: Pivot status indicator */ + Bit5 spare, /* bits GFEDC: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x86)"; } + +type record QRC_PAR_tlv /* Query on release capability parameter (QRC); Optional(O) format. */ +{ + Bit8 paramType ('10000101'B), /* Parameter Type '10000101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 qoRCapabilityIndicator, /* bit A: QoR capability indicator */ + Bit6 spare, /* bits G-B: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x85)"; } + +type record RAS_PAR_lv /* Range and status parameter (RAS); Variable(V) format. */ +{ + Bit8 paramLen , /* Parameter Length field */ + Bit8 range, /* Range */ + octetstring status /* Status */ +} +with { encode (paramLen) "tag=""RAS_paramLen"";"; + encode (status) "length=valueOf(getTag(""RAS_paramLen"")).toInt()-1;"; } + +type record RBI_PAR_tlv /* Redirect backward information parameter (RBI); Optional(O) format. */ +{ + Bit8 paramType ('10001100'B), /* Parameter Type '10001100'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Backward informationTypes_Backward /* information types */ +} +with { encode "present=bytes(1,0x8C)"; + encode (paramLen) "tag=""RBI_paramLen"";"; + encode (informationTypes_Backward) "length=valueOf(getTag(""RBI_paramLen"")).toInt();"; } + +type record RCN_PAR_tlv /* Redirect counter parameter (RCN); Optional(O) format. */ +{ + Bit8 paramType ('01110111'B), /* Parameter Type '01110111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 redirectCounter, /* bits EDCBA: Redirect counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x77)"; } + +type record RCP_PAR_tlv /* Redirect capability parameter (RCP); Optional(O) format. */ +{ + Bit8 paramType ('01001110'B), /* Parameter Type '01001110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 redirectPossibleIndicator, /* bits CBA: Redirect possible indicator */ + Bit4 spare, /* bits GFED: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x4E)"; } + +type record RDN_PAR_tlv /* Redirecting number parameter (RDN); Optional(O) format. */ +{ + Bit8 paramType ('00001011'B), /* Parameter Type '00001011'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0B)"; + encode (paramLen) "tag=""RDN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""RDN_paramLen"")).toInt()-2;"; } + +type record RDI_PAR_tlv /* Redirection information parameter (RDI); Optional(O) format. */ +{ + Bit8 paramType ('00010011'B), /* Parameter Type '00010011'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit3 redirectingIndicator, /* bits CBA: Redirecting indicator */ + Bit1 spare, /* Bit D: spare */ + Bit4 originalRedirectionReason, /* bits H G F E: Original redirection reason */ + Bit3 redirectionCounter, /* bits K J I: Redirection counter */ + Bit1 reserved, /* bit L: reserved for national use */ + Bit4 redirectingReason /* bits PONM: Redirecting reason */ +} +with { encode "present=bytes(1,0x13)"; } + +type record RFI_PAR_tlv /* Redirect forward information parameter (RFI); Optional(O) format. */ +{ + Bit8 paramType ('10001011'B), /* Parameter Type '10001011'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Forward informationTypes_Forward /* information types */ +} +with { encode "present=bytes(1,0x8B)"; + encode (paramLen) "tag=""RFI_paramLen"";"; + encode (informationTypes_Forward) "length=valueOf(getTag(""RFI_paramLen"")).toInt();"; } + +type record RNN_PAR_tlv /* Redirection number parameter (RNN); Optional(O) format. */ +{ + Bit8 paramType ('00001100'B), /* Parameter Type '00001100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0C)"; + encode (paramLen) "tag=""RNN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""RNN_paramLen"")).toInt()-2;"; } + +type record RNS_PAR_tlv /* Redirection number restriction parameter (RNS); Optional(O) format. */ +{ + Bit8 paramType ('01000000'B), /* Parameter Type '01000000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 presRestrIndicator, /* bits BA: Presentation restricted indicator */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x40)"; } + +type record ROP_PAR_tlv /* Remote operations parameter (ROP); Optional(O) format. */ +{ + Bit8 paramType ('00110010'B), /* Parameter Type '00110010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit5 protocolProfile, /* Protocol profile */ + Bit2 spare, /* spare */ + Bit1 ext, /* Extension */ + octetstring components /* ASN.1 components */ +} +with { encode "present=bytes(1,0x32)"; + encode (paramLen) "tag=""ROP_paramLen"";"; + encode (components) "length=valueOf(getTag(""ROP_paramLen"")).toInt()-1;"; } + +type record RST_PAR_tlv /* Redirect status parameter (RST); Optional(O) format. */ +{ + Bit8 paramType ('10001010'B), /* Parameter Type '10001010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 redirectStatusIndicator, /* bits BA: Redirect status indicator */ + Bit5 spare, /* bits GFEDC: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x8A)"; } + +type record SAC_PAR_tlv /* Service activation parameter (SAC); Optional(O) format. */ +{ + Bit8 paramType ('00110011'B), /* Parameter Type '00110011'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring featureCodes /* Feature codes */ +} +with { encode "present=bytes(1,0x33)"; + encode (paramLen) "tag=""SAC_paramLen"";"; + encode (featureCodes) "length=valueOf(getTag(""SAC_paramLen"")).toInt();"; } + +type record SCFI_PAR_tlv /* SCF id parameter (SCFI); Optional(O) format. */ +{ + Bit8 paramType ('01100110'B), /* Parameter Type '01100110'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring sCFId /* SCF id */ +} +with { encode "present=bytes(1,0x66)"; + encode (paramLen) "tag=""SCFI_paramLen"";"; + encode (sCFId) "length=valueOf(getTag(""SCFI_paramLen"")).toInt();"; } + +type record SPC_PAR_tlv /* Signalling point code parameter (SPC); Optional(O) format. */ +{ + Bit8 paramType ('00011110'B), /* Parameter Type '00011110'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x1E)"; } + +type record SNN_PAR_lv /* Subsequent number parameter (SNN); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit7 spare, /* spare */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode (paramLen) "tag=""SNN_lv_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""SNN_lv_paramLen"")).toInt()-1;"; } + +type record SNN_PAR_tlv /* Subsequent number parameter (SNN); Optional(O) format. */ +{ + Bit8 paramType ('00000101'B), /* Parameter Type '00000101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 spare, /* spare */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x05)"; + encode (paramLen) "tag=""SNN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""SNN_paramLen"")).toInt()-1;"; } + +type record SRI_PAR_v /* Suspend Resume indicators parameter (SRI); Fixed(F) format. */ +{ + Bit1 suspendResumeIndicator, /* bit A: Suspend/resume indicator */ + Bit7 spare /* bits H-B: spare */ +} + +type record TNS_PAR_tlv /* Transit network selection parameter (TNS); Optional(O) format. */ +{ + Bit8 paramType ('00100011'B), /* Parameter Type '00100011'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 networkIdentificationPlan, /* Network identification plan */ + Bit3 typeOfNetworkIdentification, /* Type of network identification */ + Bit1 oddEven, /* O/E */ + octetstring networkIdentification /* Network identification */ +} +with { encode "present=bytes(1,0x23)"; + encode (paramLen) "tag=""TNS_paramLen"";"; + encode (networkIdentification) "length=valueOf(getTag(""TNS_paramLen"")).toInt()-1;"; } + +type Bit8 TMR_PAR_v; /* ransmission medium requirement parameter (TMR); Fixed(F) format. */ + +type record TMRP_PAR_tlv /* Transmission medium requirement prime parameter (TMRP); Optional(O) format. */ +{ + Bit8 paramType ('00111110'B), /* Parameter Type '00111110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 transmissionMediumRequirement /* Transmission medium requirement */ +} +with { encode "present=bytes(1,0x3E)"; } + +type record TMU_PAR_tlv /* Transmission medium used parameter (TMU); Optional(O) format. */ +{ + Bit8 paramType ('00110101'B), /* Parameter Type '00110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 transmissionMediumUsed /* Transmission medium used */ +} +with { encode "present=bytes(1,0x35)"; } + +type record UAI_PAR_tlv /* UID action indicators parameter (UAI); Optional(O) format. */ +{ + Bit8 paramType ('01110100'B), /* Parameter Type '01110100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 throughConnInstructionIndicator, /* bit A: Through-connection instruction indicator */ + Bit1 t9TimerInstructionIndicator, /* bit B: T9 timer instruction indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x74)"; } + +type record UCI_PAR_tlv /* UID capability indicators parameter (UCI); Optional(O) format. */ +{ + Bit8 paramType ('01110101'B), /* Parameter Type '01110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 througConnectionIndicator, /* bit A: Through-connection indicator */ + Bit1 t9TimerIndicator, /* bit B: T9 timer indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x75)"; } + +group USI { +type record USI_PAR_tlv /* User service information parameter (USI); Optional(O) format. */ +{ + Bit8 paramType ('00011101'B), /* Parameter Type '00011101'B */ + Bit8 paramLen, /* Parameter Length field */ + USIContents uSIContents +} +with { encode "present=bytes(1,0x1D)"; + encode (paramLen) "tag=""USI_paramLen"";"; + encode (uSIContents) "length=valueOf(getTag(""USI_paramLen"")).toInt();"; } + +/* Start auxiliary types for user service information parameter (USI) */ +type record USIContents +{ + BCAP_octet3 bCAP_octet3, + BCAP_octet4 bCAP_octet4, + BCAP_octet5 bCAP_octet5 optional, + BCAP_octet6 bCAP_octet6 optional, + BCAP_octet7 bCAP_octet7 optional +} +/* End auxiliary types for user service information parameter (USI) */ +} /* end group USI */ + +type record USIP_PAR_tlv /* User service information prime parameter (USIP); Optional(O) format. */ +{ + Bit8 paramType ('00110000'B), /* Parameter Type '00110000'B */ + Bit8 paramLen, /* Parameter Length field */ + USIContents uSIContents +} +with { encode "present=bytes(1,0x30)"; + encode (paramLen) "tag=""USIP_paramLen"";"; + encode (uSIContents) "length=valueOf(getTag(""USIP_paramLen"")).toInt();"; } + + +type record UTSI_PAR_tlv /* User teleservice information parameter (UTSI); Optional(O) format. */ +{ + Bit8 paramType ('00110100'B), /* Parameter Type '00110100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit2 presentation, /* Presentation */ + Bit3 interpretation, /* Interpretation */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext1, /* Extension */ + Bit7 highLayerCharacteristicsIdentification, /* High layer characteristics identification */ + Bit1 ext2, /* Extension */ + Bit7 extendedLayerCharacteristicsIdentification optional, /* Extended layer characteristics identification */ + Bit1 ext3 optional /* Extension */ +} +with { encode "present=bytes(1,0x34)"; } + +type record UUID_PAR_tlv /* User-to-user indicators parameter (UUID); Optional(O) format. */ +{ + Bit8 paramType ('00101010'B), /* Parameter Type '00101010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 request_response, /* bit A: Type */ + Bit2 service1, /* bits C B: Service 1 */ + Bit2 service2, /* bits E D: Service 2 */ + Bit2 service3, /* bits G F: Service 3 */ + Bit1 networkDiscardIndicator /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} +with { encode "present=bytes(1,0x2A)"; } + +type record UUIF_PAR_lv /* User-to-user information parameter (UUIF); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + octetstring userToUserInformation /* User-to-user information */ +} +with { encode (paramLen) "tag=""UUIF_lv_paramLen"";"; + encode (userToUserInformation) "length=valueOf(getTag(""UUIF_lv_paramLen"")).toInt();"; } + +type record UUIF_PAR_tlv /* User-to-user information parameter (UUIF); Optional(O) format. */ +{ + Bit8 paramType ('00100000'B), /* Parameter Type '00100000'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring userToUserInformation /* User-to-user information */ +} +with { encode "present=bytes(1,0x20)"; + encode (paramLen) "tag=""UUIF_paramLen"";"; + encode (userToUserInformation) "length=valueOf(getTag(""UUIF_paramLen"")).toInt();"; } + +type record UNKNOWN_PAR_tlv /* Parameter with unknown type. */ +{ + Bit8 paramType, /* Unknown Parameter Type e.g. '10001111'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring contents /* Parameter Contents */ +} +} /* end group Parameter */ +} /* end module SipIsup_ISUP_ParamTypes */ diff --git a/IsupAts/SipIsup_ISUP_Steps.ttcn b/IsupAts/SipIsup_ISUP_Steps.ttcn new file mode 100644 index 0000000..4817bc2 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_Steps.ttcn @@ -0,0 +1,1857 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides test steps (including altsteps) used at the ISUP/BICC side. +*/ +module SipIsup_ISUP_Steps +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + //AtsIsup + import from SipIsup_TestSystem all; + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_MsgTemplates all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTemplates all; + import from SipIsup_ISUP_ParamTypes all; + +group behaviour +{ + +group SipIsup_ISUP_Defaults +{ + altstep a_IsupBicc_Def_Generic() runs on IsupBiccComponent + { + // COT with Continuity Indicator parameter indicating successful continuity check is ignored + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cOT_MSG := m_COT_MSG(c_CTI_contInd_succ)}, v_SLS)) + { + repeat; + } + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cOT_MSG := m_COT_MSG(c_CTI_contInd_succ)})) + { + repeat; + } + + /* For unexpected message 'Address complete' + store CIC values, release connection and stop, + if cic = active cic, + for expected ACM do nothing and return */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, { aCM_MSG := mw_ACM_MSG_Def}, v_SLS))-> value v_ACM_r + { + v_CircuitIdentityCodeDef := v_ACM_r.circuitIdentityCode.cicv; + if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) and (v_ACM_expected1 == false)) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) and (v_ACM_expected2 == false)) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS2)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) and (v_ACM_expected1 == true)) + { + v_ACM_expected1 := false; + repeat; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) and (v_ACM_expected2 == true)) + { + v_ACM_expected2 := false; + repeat; + } + else {repeat;} + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, { aCM_MSG := mw_ACM_MSG_Def}))-> value v_ACM_r + { + v_CallInstanceCodeDef := v_ACM_r.callInstanceCode; + if((v_CallInstanceCodeDef == v_CallInstanceCode1) and (v_ACM_expected1 == false)) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode2) and (v_ACM_expected2 == false)) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode1) and (v_ACM_expected1 == true)) + { + v_ACM_expected1 := false; + repeat; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode2) and (v_ACM_expected2 == true)) + { + v_ACM_expected2 := false; + repeat; + } + else {repeat;} + } + + /* For unexpected ISUP message 'Initial address' + store CIC and SLS values, release connection and stop */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, { iAM_MSG := mw_IAM_MSG_anyOpt(mw_NCI_PAR_v_any, mw_FCI_PAR_v_any, ?, ?, mw_CDN_PAR_lv_any)}, ?) + )-> value v_IAM_r + { + v_CircuitIdentityCodeDef := v_IAM_r.circuitIdentityCode.cicv; + v_SLS := v_IAM_r.routingLabel.sls; + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCodeDef, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, { iAM_MSG := mw_IAM_MSG_anyOpt(mw_NCI_PAR_v_any, mw_FCI_PAR_v_any, ?, ?, mw_CDN_PAR_lv_any)}) + )-> value v_IAM_r + { + v_CallInstanceCodeDef := v_IAM_r.callInstanceCode; + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCodeDef, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + /* For unexpected messages + store CIC values, release connection and stop, + if cic = active cic */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, ?, ?) + )-> value v_ANY_r + { + v_CircuitIdentityCodeDef := v_ANY_r.circuitIdentityCode.cicv; + if(v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if(v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_Def}, v_SLS2)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else + {repeat;} + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, ?) + )-> value v_ANY_r + { + v_CallInstanceCodeDef := v_ANY_r.callInstanceCode; + if(v_CallInstanceCodeDef == v_CallInstanceCode1) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if(v_CallInstanceCodeDef == v_CallInstanceCode2) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else + {repeat;} + } + + [PX_ISUP_Isup] any timer.timeout + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS2)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] any timer.timeout + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + } + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 0; + } + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + } + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 0; + } + [] IsupBiccP.receive( mw_BearerSetup_acc(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 3; + } + [] IsupBiccP.receive( mw_BearerSetup_acc(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 3; + } + + [PX_ISUP_Isup] syncPort.receive + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] syncPort.receive + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + };// end default a_IsupBicc_Def_Generic + +}; // end group SipIsup_ISUP_Defaults + +group SipIsup_ISUP_Receive_Msgs +{ + function f_awaiting_ACM(template ACM_MSG p_ACM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aCM_MSG := p_ACM})) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ACM2(template ACM_MSG p_ACM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { aCM_MSG := p_ACM}, v_SLS2)) + { + v_ACM_expected2 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { aCM_MSG := p_ACM})) + { + v_ACM_expected2 := false; + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ANM(template ANM_MSG p_ANM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aNM_MSG := p_ANM}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aNM_MSG := p_ANM})) + { + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := mw_CPG_MSG_Def}, v_SLS)) + {repeat;}; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := mw_CPG_MSG_Def})) + {repeat;}; + } + } + + function f_awaiting_ANM2(template ANM_MSG p_ANM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { aNM_MSG := p_ANM}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { aNM_MSG := p_ANM})) + { + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cPG_MSG := mw_CPG_MSG_Def}, v_SLS)) + {repeat;}; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cPG_MSG := mw_CPG_MSG_Def})) + {repeat;}; + } + } + + function f_awaiting_CGBA(template CGBA_MSG p_CGBA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGBA_MSG := p_CGBA}, v_SLS)) + { + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGBA_MSG := p_CGBA})) + { + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_CGBA2(template CGBA_MSG p_CGBA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGBA_MSG := p_CGBA}, v_SLS2)) + { + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGBA_MSG := p_CGBA})) + { + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_CON(template CON_MSG p_CON) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cON_MSG := p_CON}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cON_MSG := p_CON})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_COT(template COT_MSG p_COT) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cOT_MSG := p_COT}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cOT_MSG := p_COT})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_COT2(template COT_MSG p_COT) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cOT_MSG := p_COT}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cOT_MSG := p_COT})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_CPG(template CPG_MSG p_CPG) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := p_CPG})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_FRJ(template FRJ_MSG p_FRJ) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { fRJ_MSG := p_FRJ}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { fRJ_MSG := p_FRJ})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_GRA(template GRA_MSG p_GRA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { gRA_MSG := p_GRA}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { gRA_MSG := p_GRA})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_GRA2(template GRA_MSG p_GRA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { gRA_MSG := p_GRA}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { gRA_MSG := p_GRA})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_IAM(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(?, { iAM_MSG := p_IAM}, ?))-> value v_IAM_r + { + v_CircuitIdentityCode1 := v_IAM_r.circuitIdentityCode.cicv; + v_SLS := v_IAM_r.routingLabel.sls; + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(?, { iAM_MSG := p_IAM}))-> value v_IAM_r + { + v_CallInstanceCode1 := v_IAM_r.callInstanceCode; + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_IAM2(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(?, { iAM_MSG := p_IAM}, ?))-> value v_IAM_r + { + v_CircuitIdentityCode2 := v_IAM_r.circuitIdentityCode.cicv; + v_SLS2 := v_IAM_r.routingLabel.sls; + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(?, { iAM_MSG := p_IAM}))-> value v_IAM_r + { + v_CallInstanceCode2 := v_IAM_r.callInstanceCode; + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_INR(template INR_MSG p_INR) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { iNR_MSG := p_INR}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { iNR_MSG := p_INR})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_IRS(template IRS_MSG p_IRS) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { iRS_MSG := p_IRS}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { iRS_MSG := p_IRS})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_LOP(template LOP_MSG p_LOP) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { lOP_MSG := p_LOP}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { lOP_MSG := p_LOP})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_REL(template REL_MSG p_REL) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := p_REL}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := p_REL})) + { + setverdict(pass); + TAck.stop; + v_ISUP_BearerState1 := 2; + }; + } + } + + function f_awaiting_RLC(template RLC_MSG p_RLC) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rLC_MSG := p_RLC}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { rLC_MSG := p_RLC})) + { + setverdict(pass); + TAck.stop; + v_ISUP_BearerState1 := 0; + }; + } + } + + function f_awaiting_SAM(template SAM_MSG p_SAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { sAM_MSG := p_SAM}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { sAM_MSG := p_SAM})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ACM_CPG(template ACM_MSG p_ACM, + template CPG_MSG p_CPG) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aCM_MSG := p_ACM})) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := p_CPG})) + { + setverdict(pass); + TAck.stop; + }; + } + } +} // end group SipIsup_ISUP_Receive_Msgs + +group SipIsup_ISUP_Transmit_Msgs +{ + function f_send_ACM(template ACM_MSG p_ACM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ACM.start; + alt + { + [] TDelay_ACM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aCM_MSG := p_ACM})); + } + } + + function f_send_ACM2(template ACM_MSG p_ACM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ACM.start; + alt + { + [] TDelay_ACM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { aCM_MSG := p_ACM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { aCM_MSG := p_ACM})); + } + } + + function f_send_ANM(template ANM_MSG p_ANM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ANM.start; + alt + { + [] TDelay_ANM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aNM_MSG := p_ANM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aNM_MSG := p_ANM})); + } + } + + function f_send_ANM2(template ANM_MSG p_ANM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ANM.start; + alt + { + [] TDelay_ANM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { aNM_MSG := p_ANM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { aNM_MSG := p_ANM})); + } + } + + function f_send_APM(template APM_MSG p_APM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_APM.start; + alt + { + [] TDelay_APM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aPM_MSG := p_APM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aPM_MSG := p_APM})); + } + } + + function f_send_CGB(template CGB_MSG p_CGB, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CGB.start; + alt + { + [] TDelay_CGB.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGB_MSG := p_CGB}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGB_MSG := p_CGB})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_CGB2(template CGB_MSG p_CGB, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CGB.start; + alt + { + [] TDelay_CGB.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { cGB_MSG := p_CGB}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { cGB_MSG := p_CGB})); + v_ISUP_BearerState2 := 0; + } + } + + function f_send_CON(template CON_MSG p_CON, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CON.start; + alt + { + [] TDelay_CON.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cON_MSG := p_CON}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cON_MSG := p_CON})); + } + } + + function f_send_COT(template COT_MSG p_COT, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_COT.start; + alt + { + [] TDelay_COT.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cOT_MSG := p_COT}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cOT_MSG := p_COT})); + } + } + + function f_send_CPG(template CPG_MSG p_CPG, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CPG.start; + alt + { + [] TDelay_CPG.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cPG_MSG := p_CPG})); + } + } + + function f_send_CPG_invalid(template CPG_MSG p_CPG, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CPG.start; + alt + { + [] TDelay_CPG.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cPG_MSG := p_CPG})); + } + } + + function f_send_FAC(template FAC_MSG p_FAC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_FAC.start; + alt + { + [] TDelay_FAC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { fAC_MSG := p_FAC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { fAC_MSG := p_FAC})); + } + } + + function f_send_FAR(template FAR_MSG p_FAR, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_FAR.start; + alt + { + [] TDelay_FAR.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { fAR_MSG := p_FAR}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { fAR_MSG := p_FAR})); + } + } + + function f_send_GRS(template GRS_MSG p_GRS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_GRS.start; + alt + { + [] TDelay_GRS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { gRS_MSG := p_GRS}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { gRS_MSG := p_GRS})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_GRS2(template GRS_MSG p_GRS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_GRS.start; + alt + { + [] TDelay_GRS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { gRS_MSG := p_GRS}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { gRS_MSG := p_GRS})); + v_ISUP_BearerState2 := 0; + } + } + + function f_send_IAM(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iAM_MSG := p_IAM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iAM_MSG := p_IAM})); + v_ISUP_BearerState1 := 1; + } + v_ACM_expected1 := true; + } + + function f_send_IAM2(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { iAM_MSG := p_IAM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { iAM_MSG := p_IAM})); + v_ISUP_BearerState2 := 1; + } + v_ACM_expected2 := true; + } + + function f_send_IDR(template IDR_MSG p_IDR, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_IDR.start; + alt + { + [] TDelay_IDR.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iDR_MSG := p_IDR}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iDR_MSG := p_IDR})); + } + } + + function f_send_INF(template INF_MSG p_INF, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_INF.start; + alt + { + [] TDelay_INF.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iNF_MSG := p_INF}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iNF_MSG := p_INF})); + } + } + + function f_send_LOP(template LOP_MSG p_LOP, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_LOP.start; + alt + { + [] TDelay_LOP.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { lOP_MSG := p_LOP}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { lOP_MSG := p_LOP})); + } + } + + function f_send_REL(template REL_MSG p_REL, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_REL.start; + alt + { + [] TDelay_REL.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := p_REL}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := p_REL})); + v_ISUP_BearerState1 := 2; + } + } + + function f_send_RES(template RES_MSG p_RES, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RES.start; + alt + { + [] TDelay_RES.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rES_MSG := p_RES}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rES_MSG := p_RES})); + } + } + + function f_send_RLC(template RLC_MSG p_RLC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RLC.start; + alt + { + [] TDelay_RLC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := p_RLC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := p_RLC})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_RSC(template RSC_MSG p_RSC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RSC.start; + alt + { + [] TDelay_RSC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rSC_MSG := p_RSC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rSC_MSG := p_RSC})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_SAM(template SAM_MSG p_SAM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_SAM.start; + alt + { + [] TDelay_SAM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { sAM_MSG := p_SAM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { sAM_MSG := p_SAM})); + } + } + + function f_send_SUS(template SUS_MSG p_SUS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_SUS.start; + alt + { + [] TDelay_SUS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { sUS_MSG := p_SUS}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { sUS_MSG := p_SUS})); + } + } + + function f_send_UNKNOWN(template UNKNOWN_MSG p_UNKNOWN, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_UNKNOWN.start; + alt + { + [] TDelay_UNKNOWN.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { uNKNOWN_MSG := p_UNKNOWN}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { uNKNOWN_MSG := p_UNKNOWN})); + } + } + +} // end group SipIsup_ISUP_Transmit_Msgs + + +group SipIsup_ISUP_Checks +{ + function f_IsupBicc_CheckRingingTone() runs on IsupBiccComponent + { + var boolean v_Result; + var charstring v_question := "confirm if ringing at IsupBicc port"; + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_IsupBicc_CheckRinging) { + opPort_IsupBicc.call(s_IsupBicc_ringing:{v_question, -}) + {[] opPort_IsupBicc.getreply(s_IsupBicc_ringing:{-, true}) {} + [] opPort_IsupBicc.getreply(s_IsupBicc_ringing:{-, false}) + {all timer.stop; + setverdict(fail); + stop;} + } + } + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return + } + + function f_IsupBicc_CheckConversation() runs on IsupBiccComponent + { + var boolean v_Result; + var charstring v_question := "confirm if conversation at IsupBicc port"; + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_IsupBicc_CheckConversation) { + opPort_IsupBicc.call(s_IsupBicc_conversation:{v_question, -}) + {[] opPort_IsupBicc.getreply(s_IsupBicc_conversation:{-, true}) {} + [] opPort_IsupBicc.getreply(s_IsupBicc_conversation:{-, false}) + {all timer.stop; + setverdict(fail); + stop;} + } + } + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); + return + } + +}// end group SipIsup_ISUP_Checks + +group SipIsup_ISUP_BearerRelated +{ + function f_IsupBicc_Bearer1ReleaseIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + TWait.stop; + }; + } + } + } + + + function f_IsupBicc_Bearer1ReleaseRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send(m_BearerRelease_req(v_CallInstanceCode1)); + + v_ISUP_BearerState1 := 2; + TAck.start; + + alt + { + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode1)) + { + TAck.stop; + v_ISUP_BearerState1 := 0; + }; + } + } + } + + + function f_IsupBicc_Bearer1SetupIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_Setup_ind(v_CallInstanceCode1)) + {TWait.stop; + v_ISUP_BearerState1 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer1SetupRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send ( m_BearerSetup_req(v_CallInstanceCode1)); + + v_ISUP_BearerState1 := 1; + TAck.start; + + alt + { + [] IsupBiccP.receive ( mw_BearerSetup_acc(v_CallInstanceCode1)) + {TAck.stop; + v_ISUP_BearerState1 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer2SetupIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_Setup_ind(v_CallInstanceCode2)) + {TWait.stop; + v_ISUP_BearerState2 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer2SetupRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send ( m_BearerSetup_req(v_CallInstanceCode2)); + + v_ISUP_BearerState2 := 1; + TAck.start; + + alt + { + [] IsupBiccP.receive ( mw_BearerSetup_acc(v_CallInstanceCode2)) + {TAck.stop; + v_ISUP_BearerState2 := 3; + }; + } + } + } + +}// end group SipIsup_ISUP_BearerRelated + +group SipIsup_ISUP_Preambles +{ + // Preamble performing only initialization + function f_IsupBicc_Pre0() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + v_ISUP_BearerState1 := 0;//initialize bearer state associated with cic1 + v_ISUP_BearerState2 := 0;//initialize bearer state associated with cic2 + + // Initialize cic values for transmission side + v_CircuitIdentityCode1 := PX_ISUP_TX_CIC_cicv1; + v_CircuitIdentityCode2 := PX_ISUP_TX_CIC_cicv2; + v_CallInstanceCode1 := PX_ISUP_TX_CIC_caicv1; + v_CallInstanceCode2 := PX_ISUP_TX_CIC_caicv2; + v_SLS := PX_ISUP_SLS; + v_SLS2 := int2bit((bit2int(PX_ISUP_SLS) + 1), 4); + + } //end function f_IsupBiccPre0 + +} // end group SipIsup_ISUP_Preambles + + +group SipIsup_ISUP_Postambles +{ + // Postamble checking signalling- and bearer states + function f_IsupBicc_Post_CheckStates() runs on IsupBiccComponent + { + if (v_ISUP_BearerState1 != 0) + { + setverdict(inconc); + log ("Bearer connection state of cic1 is not 0 at the test case end."); + } + if (v_ISUP_BearerState2 != 0) + { + setverdict(inconc); + log ("Bearer connection state of cic2 is not 0 at the test case end."); + } + + }// end f_IsupBicc_Post_CheckStates + + + + // MG Note 1: Bearer Release Ind not yet covered + // Postamble expecting REL for cic1 and sending RLC + function f_IsupBicc_Post_expREL1(boolean p_Bearer1_established) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start;// Wait for REL message + + alt + { // expect REL Msg + [PX_ISUP_Isup] IsupBiccP.receive + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + } + [not PX_ISUP_Isup] IsupBiccP.receive + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0; //initialize state associated with cic1 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + + } //end function f_IsupBicc_Post_expREL1 + + + // Postamble expecting REL for cic1 and cic2 and sending RLC for both + function f_IsupBicc_Post_expREL2() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start;// Wait for REL message + + alt + { + [PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic1 first + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { // send RLC Msg on cic1 + IsupBiccP.send (m_ISUP_MSG_req( v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic2 + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { rEL_MSG := mw_REL_MSG_Def}, v_SLS2)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS2)); + } + } + } + + [PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic2 first + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { rEL_MSG := mw_REL_MSG_Def}, v_SLS2)) + { // send RLC Msg on cic2 + IsupBiccP.send (m_ISUP_MSG_req( v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS2)); + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic1 + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + } + } + } + + [not PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic1 first + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { // send RLC Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req( v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic2 + ( mw_BICC_MSG_ind(v_CallInstanceCode2, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState2 := 0;//initialize state associated with cic2 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + } + + [not PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic2 first + ( mw_BICC_MSG_ind(v_CallInstanceCode2, { rEL_MSG := mw_REL_MSG_Def})) + { // send RLC Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req( v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState2 := 0; //initialize state associated with cic1 + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic1 + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + } + } + + } //end function f_IsupBicc_Post_expREL2 + + + // MG Note 1: Bearer Release not yet covered + // Postamble sending REL and expecting RLC for cic1 + function f_IsupBicc_Post_sendREL1(boolean p_Bearer1_established) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send REL Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + TAck.start; // Wait for REL message + + alt { // expect RLC Msg + [] IsupBiccP.receive(mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rLC_MSG := mw_RLC}, v_SLS)) + {TAck.stop;} + } + } + else + { // send REL Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + v_ISUP_BearerState1 := 2; //initialize state associated with cic1 + TAck.start; // Wait for REL message + + alt { // expect RLC Msg + [] IsupBiccP.receive(mw_BICC_MSG_ind(v_CallInstanceCode1,{ rLC_MSG := mw_RLC})) + {TAck.stop;} + } + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + } //end function f_IsupBicc_Post_sendREL1 + + + + // Postamble sending CGU and expecting CGUA for cic1 + function f_IsupBicc_Post_CGU1() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send CGU Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGU_MSG := m_CGU}, v_SLS)); + TWait.start; // Wait for CGUA message + + alt { // expect CGUA Msg + [] IsupBiccP.receive + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := mw_CGUA}, v_SLS)) + {TWait.stop;} + } + } + else + { // send CGU Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGU_MSG := m_CGU})); + TWait.start; // Wait for CGUA message + + alt { // expect CGUA Msg + [] IsupBiccP.receive + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := mw_CGUA})) + {TWait.stop;} + } + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + } //end function f_IsupBicc_Post_CGU1 + + // Postamble sending CGU and expecting CGUA for cic1 and cic2 + function f_IsupBicc_Post_CGU2() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send CGU Msg on cic1 + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGU_MSG := + m_CGU}, v_SLS)); + + // send CGU Msg on cic2 + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { cGU_MSG := + m_CGU}, v_SLS2)); + + TWait.start;// Wait for CGUA messages + + alt { + // expect CGUA Msg on cic1 first + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := + mw_CGUA}, v_SLS)) + { + alt { // expect CGUA Msg on cic2 + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGUA_MSG := + mw_CGUA}, v_SLS2)) + {TWait.stop;} + } + } + // expect CGUA Msg on cic2 first + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGUA_MSG := + mw_CGUA}, v_SLS2)) + { + alt { // expect CGUA Msg on cic1 + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := + mw_CGUA}, v_SLS)) + {TWait.stop;} + } + } + } + } + + else + { // send CGU Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGU_MSG := + m_CGU})); + + // send CGU Msg on cic2 + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { cGU_MSG := + m_CGU})); + + TWait.start;// Wait for CGUA messages + + alt { + // expect CGUA Msg on cic1 first + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := + mw_CGUA})) + { + alt { // expect CGUA Msg on cic2 + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGUA_MSG := + mw_CGUA})) + {TWait.stop;} + } + } + // expect CGUA Msg on cic2 first + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGUA_MSG := + mw_CGUA})) + { + alt { // expect CGUA Msg on cic1 + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := + mw_CGUA})) + {TWait.stop;} + } + } + } + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + + + } //end function f_IsupBicc_Post_UGB1 + +} // end group SipIsup_ISUP_Postambles + +group SipIsup_ISUP_GeneralSteps +{ + // Wait for timeout + function f_IsupBicc_Wait(float timeoutValue) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + ProtocolTimer.start(timeoutValue); + alt + { + [] ProtocolTimer.timeout{}; + } + } + +}// end group SipIsup_ISUP_GeneralSteps + +}// end group behaviour +}//end module SipIsup_ISUP_Steps diff --git a/IsupAts/SipIsup_ISUP_TCFunctions.ttcn b/IsupAts/SipIsup_ISUP_TCFunctions.ttcn new file mode 100644 index 0000000..ccd6e8e --- /dev/null +++ b/IsupAts/SipIsup_ISUP_TCFunctions.ttcn @@ -0,0 +1,61 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module provides the ISUP-side test case functions for SIP/ISUP interworking. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + * Some TC functions are parameterized according to the VA-Tables (variants) + * defined in the test purposes. +*/ +module SipIsup_ISUP_TCFunctions { + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + //AtsCommon + import from SipIsup_TestSystem all; + import from SipIsup_PIXITS all; + + //AtsIsup + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTemplates all; + import from SipIsup_ISUP_MsgTemplates all; + import from SipIsup_ISUP_Steps all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + + function f_Reset_Circuits() runs on IsupBiccComponent + { + + // Perform preamble + f_IsupBicc_Pre0(); + + /*Send default RSC message*/ + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rSC_MSG := m_RSC}, v_SLS)); + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { rSC_MSG := m_RSC}, v_SLS)); + + }//End f_Reset_Circuits + + function f_Reset_Groups() runs on IsupBiccComponent + { + + // Perform preamble + f_IsupBicc_Pre0(); + + /*Send default RSC message*/ + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { gRS_MSG := m_GRS}, v_SLS)); + + }//End f_Reset_Groups + +} // end module SipIsup_ISUP_TCFunctions diff --git a/LibCommon/LibCommon_AbstractData.ttcn b/LibCommon/LibCommon_AbstractData.ttcn new file mode 100644 index 0000000..db7b2eb --- /dev/null +++ b/LibCommon/LibCommon_AbstractData.ttcn @@ -0,0 +1,133 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of functions for abstract data types which may be + * useful in the implementation of any TTCN-3 test suite. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_AbstractData { + + //LibCommon + import from LibCommon_BasicTypesAndValues { type UInt } ; + + group stringStack { + + type record StringStack { + UInt stackSize, + StringItems stringItems + } + + type record of charstring StringItems; + + /* + * @desc Constant which can be used to initialize a + * string stack. A string stack can be intialized by + * assigning this value in the variable declariation. + * An alternative is to call the initlialization function. + * @see LibCommon_AbstractData.f_initStringStack + * @remark Note that an initlialized stack stack is not + * necessarily the same as an empty string stack. + * An empty tring stack as 0 zero elements but may + * have a non empty list of (empty) items. + */ + const StringStack c_initStringStack := { 0, {} } + + /* + * @desc The invocation of this function will initialize + * a string stack to an empty string stack. + * An alternative is to initlialize a stack using a + * constant value. + * @see LibCommon_AbstractData.c_initStringStack + * @param p_stack String stack to be initialized. + */ + function f_initStringStack ( inout StringStack p_stack ) { + p_stack := c_initStringStack + } + + /* + * @desc This function checks if a string stack is + * empty. + * @param p_stack String stack to be checked. + * @return true if empty, false if not empty + */ + function f_isStringStackEmpty ( inout StringStack p_stack ) + return boolean { + if ( p_stack.stackSize == 0 ) {return true} + else {return false} + } + + /* + * @desc This function checks if a given string is on the + * string stack. + * @param p_stack String stack where the string item + * is to be looked for. + * @param p_item String to be checked for. + * @return true if found, false if not found + */ + function f_isItemOnStringStack ( inout StringStack p_stack, + in charstring p_item ) + return boolean { + var integer i; + for (i := 0; i < p_stack.stackSize; i := i+1 ) { + if ( p_stack.stringItems[i] == p_item ) { + return true; + } + } + return false; + } + + /* + * @desc This function checks if a given string is on the + * string stack. + * @param p_stack String stack where the string item + * is to be looked for. + * @param p_item String item on top of the stack. + * @return false if stack is empty, true otherwise + */ + function f_peekStringStackTop ( inout StringStack p_stack, + out charstring p_item) + return boolean { + if (p_stack.stackSize == 0) { + p_item := "f_peekTopStringStack: String stack is empty!"; + return false; + } + p_item := p_stack.stringItems[p_stack.stackSize-1]; + return true; + } + + + /* + * @desc This function puts a string to the top of a + * string stack. + * @param p_stack String stack to which the string item + * is to be added. + * @param p_item String to be added. + */ + function f_pushStringStack ( inout StringStack p_stack, + in charstring p_item ) { + p_stack.stringItems[p_stack.stackSize] := p_item; + p_stack.stackSize := p_stack.stackSize + 1; + } + + /* + * @desc This function removes the string from the top of a + * string stack. If the stack is empty nothing is done + * @param p_stack String stack from which the top string item + * is to be removed. + */ + function f_popStringStack ( inout StringStack p_stack ) { + if ( p_stack.stackSize > 0 ) { + p_stack.stackSize := p_stack.stackSize-1; + // "delete" top stack item to be safe + // Note: due to record of index the "old top" is size-1! + p_stack.stringItems[p_stack.stackSize] := ""; + } + } + + } // end group stringStack + +} // end module LibCommon_AbstractData diff --git a/LibCommon/LibCommon_BasicTypesAndValues.ttcn b/LibCommon/LibCommon_BasicTypesAndValues.ttcn new file mode 100644 index 0000000..ce87eca --- /dev/null +++ b/LibCommon/LibCommon_BasicTypesAndValues.ttcn @@ -0,0 +1,220 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of basic type and value definitions which may be + * useful in the implementation of any TTCN-3 test suite.

+ * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_BasicTypesAndValues { + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group unsignedIntegerDefintions { + + const integer c_uInt1Max := 1; + const integer c_uInt2Max := 3; + const integer c_uInt3Max := 7; + const integer c_uInt4Max := 15; + const integer c_uInt5Max := 31; + const integer c_uInt6Max := 63; + const integer c_uInt7Max := 127; + const integer c_uInt8Max := 255; + const integer c_uInt9Max := 511; + const integer c_uInt10Max := 1023; + const integer c_uInt11Max := 2047; + const integer c_uInt12Max := 4095; + const integer c_uInt13Max := 8191; + const integer c_uInt14Max := 16383; + const integer c_uInt15Max := 32767; + const integer c_uInt16Max := 65535; + const integer c_uInt17Max := 131071; + const integer c_uInt18Max := 262143; + const integer c_uInt19Max := 524287; + const integer c_uInt20Max := 1048575; + const integer c_uInt21Max := 2097151; + const integer c_uInt22Max := 4194303; + const integer c_uInt23Max := 8388607; + const integer c_uInt24Max := 16777215; + const integer c_uInt25Max := 33554431; + const integer c_uInt26Max := 67108863; + const integer c_uInt27Max := 134217727; + const integer c_uInt28Max := 268435456; + const integer c_uInt29Max := 536870911; + const integer c_uInt30Max := 1073741823; + const integer c_uInt31Max := 2147483647; +// const integer c_uInt32Max := 4294967295; + +// const integer c_uInt48Max := 281474976710655; + const integer c_uInt48Max := 2147483647; + + type integer UInt (0 .. infinity); + type integer UInt1 (0 .. c_uInt1Max) with {encode "length=1;"}; + type integer UInt2 (0 .. c_uInt2Max) with {encode "length=2"}; + type integer UInt3 (0 .. c_uInt3Max) with {encode "length=3"}; + type integer UInt4 (0 .. c_uInt4Max) with {encode "length=4"}; + type integer UInt5 (0 .. c_uInt5Max) with {encode "length=5"}; + type integer UInt6 (0 .. c_uInt6Max) with {encode "length=6"}; + type integer UInt7 (0 .. c_uInt7Max) with {encode "length=7"}; + type integer UInt8 (0 .. c_uInt8Max) with {encode "length=8"}; + type integer UInt9 (0 .. c_uInt9Max) with {encode "length=9"}; + type integer UInt10 (0 .. c_uInt10Max) with {encode "length=10"}; + type integer UInt11 (0 .. c_uInt11Max) with {encode "length=11"}; + type integer UInt12 (0 .. c_uInt12Max) with {encode "length=12"}; + type integer UInt13 (0 .. c_uInt13Max) with {encode "length=13"}; + type integer UInt14 (0 .. c_uInt14Max) with {encode "length=14"}; + type integer UInt15 (0 .. c_uInt15Max) with {encode "length=15"}; + type integer UInt16 (0 .. c_uInt16Max) with {encode "length=16"}; + type integer UInt17 (0 .. c_uInt17Max) with {encode "length=17"}; + type integer UInt18 (0 .. c_uInt18Max) with {encode "length=18"}; + type integer UInt19 (0 .. c_uInt19Max) with {encode "length=19"}; + type integer UInt20 (0 .. c_uInt20Max) with {encode "length=20"}; + type integer UInt21 (0 .. c_uInt21Max) with {encode "length=21"}; + type integer UInt22 (0 .. c_uInt22Max) with {encode "length=22"}; + type integer UInt23 (0 .. c_uInt23Max) with {encode "length=23"}; + type integer UInt24 (0 .. c_uInt24Max) with {encode "length=24"}; + type integer UInt25 (0 .. c_uInt25Max) with {encode "length=25"}; + type integer UInt26 (0 .. c_uInt26Max) with {encode "length=26"}; + type integer UInt27 (0 .. c_uInt27Max) with {encode "length=27"}; + type integer UInt28 (0 .. c_uInt28Max) with {encode "length=28"}; + type integer UInt29 (0 .. c_uInt29Max) with {encode "length=29"}; + type integer UInt30 (0 .. c_uInt30Max) with {encode "length=30"}; + type integer UInt31 (0 .. c_uInt31Max) with {encode "length=31"}; +// type integer UInt32 (0 .. c_uInt32Max) with {encode "length=32"}; + type integer UInt32 (0 .. c_uInt31Max) with {encode "length=32"}; + +// type integer UInt48 (0 .. c_uInt48Max) with {encode "length=48"}; + type integer UInt48 (0 .. c_uInt31Max) with {encode "length=32"}; + + } // end group unsignedIntegerDefintions + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group signedIntegerDefintions { + + const integer c_int1Min := -1; + const integer c_int1Max := 0; + const integer c_int2Min := -2; + const integer c_int2Max := 1; + const integer c_int3Min := -4; + const integer c_int3Max := 3; + const integer c_int4Min := -8; + const integer c_int4Max := 7; + const integer c_int5Min := -16; + const integer c_int5Max := 15; + const integer c_int6Min := -32; + const integer c_int6Max := 31; + const integer c_int7Min := -64; + const integer c_int7Max := 63; + const integer c_int8Min := -128; + const integer c_int8Max := 127; + const integer c_int9Min := -256; + const integer c_int9Max := 255; + const integer c_int10Min := -512; + const integer c_int10Max := 511; + const integer c_int11Min := -1024; + const integer c_int11Max := 1023; + const integer c_int12Min := -2048; + const integer c_int12Max := 2047; + const integer c_int13Min := -4096; + const integer c_int13Max := 4095; + const integer c_int14Min := -8192; + const integer c_int14Max := 8191; + const integer c_int15Min := -16384; + const integer c_int15Max := 16383; + const integer c_int16Min := -32768; + const integer c_int16Max := 32767; + const integer c_int17Min := -65536; + const integer c_int17Max := 65535; + const integer c_int18Min := -131072; + const integer c_int18Max := 131071; + const integer c_int19Min := -262144; + const integer c_int19Max := 262143; + const integer c_int20Min := -524288; + const integer c_int20Max := 524287; + const integer c_int21Min := -1048576; + const integer c_int21Max := 1048575; + const integer c_int22Min := -2097152; + const integer c_int22Max := 2097151; + const integer c_int23Min := -4194304; + const integer c_int23Max := 4194303; + const integer c_int24Min := -8388608; + const integer c_int24Max := 8388607; + const integer c_int25Min := -16777216; + const integer c_int25Max := 16777215; + const integer c_int26Min := -33554432; + const integer c_int26Max := 33554431; + const integer c_int27Min := -67108864; + const integer c_int27Max := 67108863; + const integer c_int28Min := -134217728; + const integer c_int28Max := 134217727; + const integer c_int29Min := -268435456; + const integer c_int29Max := 268435456; + const integer c_int30Min := -536870912; + const integer c_int30Max := 536870911; + const integer c_int31Min := -1073741824; + const integer c_int31Max := 1073741823; +// const integer c_int32Min := -2147483648; + const integer c_int32Max := 2147483647; + + type integer Int; + type integer Int1 (c_int1Min .. c_int1Max) with { encode "length=1"}; + type integer Int2 (c_int2Min .. c_int2Max) with { encode "length=2"}; + type integer Int3 (c_int3Min .. c_int3Max) with { encode "length=3"}; + type integer Int4 (c_int4Min .. c_int4Max) with { encode "length=4"}; + type integer Int5 (c_int5Min .. c_int5Max) with { encode "length=5"}; + type integer Int6 (c_int6Min .. c_int6Max) with { encode "length=6"}; + type integer Int7 (c_int7Min .. c_int7Max) with { encode "length=7"}; + type integer Int8 (c_int8Min .. c_int8Max) with { encode "length=8"}; + type integer Int9 (c_int9Min .. c_int9Max) with { encode "length=9"}; + type integer Int10 (c_int10Min .. c_int10Max) with { encode "length=10"}; + type integer Int11 (c_int11Min .. c_int11Max) with { encode "length=11"}; + type integer Int12 (c_int12Min .. c_int12Max) with { encode "length=12"}; + type integer Int13 (c_int13Min .. c_int13Max) with { encode "length=13"}; + type integer Int14 (c_int14Min .. c_int14Max) with { encode "length=14"}; + type integer Int15 (c_int15Min .. c_int15Max) with { encode "length=15"}; + type integer Int16 (c_int16Min .. c_int16Max) with { encode "length=16"}; + type integer Int17 (c_int17Min .. c_int17Max) with { encode "length=17"}; + type integer Int18 (c_int18Min .. c_int18Max) with { encode "length=18"}; + type integer Int19 (c_int19Min .. c_int19Max) with { encode "length=19"}; + type integer Int20 (c_int20Min .. c_int20Max) with { encode "length=20"}; + type integer Int21 (c_int21Min .. c_int21Max) with { encode "length=21"}; + type integer Int22 (c_int22Min .. c_int22Max) with { encode "length=22"}; + type integer Int23 (c_int23Min .. c_int23Max) with { encode "length=23"}; + type integer Int24 (c_int24Min .. c_int24Max) with { encode "length=24"}; + type integer Int25 (c_int25Min .. c_int25Max) with { encode "length=25"}; + type integer Int26 (c_int26Min .. c_int26Max) with { encode "length=26"}; + type integer Int27 (c_int27Min .. c_int27Max) with { encode "length=27"}; + type integer Int28 (c_int28Min .. c_int28Max) with { encode "length=28"}; + type integer Int29 (c_int29Min .. c_int29Max) with { encode "length=29"}; + type integer Int30 (c_int30Min .. c_int30Max) with { encode "length=30"}; + type integer Int31 (c_int31Min .. c_int31Max) with { encode "length=31"}; +// type integer Int32 (c_int32Min .. c_int32Max) with { encode "length=32"}; + + } // end group signedIntegerDefintions + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group booleanDefintions { + + type boolean Bool1 with {encode "length=1"}; + type boolean Bool2 with {encode "length=2"}; + type boolean Bool3 with {encode "length=3"}; + type boolean Bool4 with {encode "length=4"}; + type boolean Bool5 with {encode "length=5"}; + type boolean Bool6 with {encode "length=6"}; + type boolean Bool7 with {encode "length=7"}; + type boolean Bool8 with {encode "length=8"}; + + } // end group booleanDefintions + +} // end module LibCommon_BasicTypesAndValues diff --git a/LibCommon/LibCommon_DataStrings.ttcn b/LibCommon/LibCommon_DataStrings.ttcn new file mode 100644 index 0000000..34bb3e3 --- /dev/null +++ b/LibCommon/LibCommon_DataStrings.ttcn @@ -0,0 +1,100 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of data string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Data string" refers to TTCN-3 hexstring, octetstring + * and bitstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_DataStrings { + + /* + * @remark Number in name indicates string length in number of + * _bits_ + */ + group bitStringSubTypes { + + type bitstring Bit1 length(1) with {encode "1 bit"}; + type bitstring Bit2 length(2) with {encode "2 bits"}; + type bitstring Bit3 length(3) with {encode "3 bits"}; + type bitstring Bit4 length(4) with {encode "4 bits"}; + type bitstring Bit5 length(5) with {encode "5 bits"}; + type bitstring Bit6 length(6) with {encode "6 bits"}; + type bitstring Bit7 length(7) with {encode "7 bits"}; + type bitstring Bit8 length(8) with {encode "8 bits"}; + type bitstring Bit9 length(9) with {encode "9 bits"}; + type bitstring Bit10 length(10) with {encode "10 bits"}; + type bitstring Bit11 length(11) with {encode "11 bits"}; + type bitstring Bit12 length(12) with {encode "12 bits"}; + type bitstring Bit13 length(13) with {encode "13 bits"}; + type bitstring Bit14 length(14) with {encode "14 bits"}; + type bitstring Bit15 length(15) with {encode "15 bits"}; + type bitstring Bit16 length(16) with {encode "16 bits"}; + type bitstring Bit17 length(17) with {encode "17 bits"}; + type bitstring Bit18 length(18) with {encode "18 bits"}; + type bitstring Bit19 length(19) with {encode "19 bits"}; + type bitstring Bit20 length(20) with {encode "20 bits"}; + type bitstring Bit21 length(21) with {encode "21 bits"}; + type bitstring Bit22 length(22) with {encode "22 bits"}; + type bitstring Bit23 length(23) with {encode "23 bits"}; + type bitstring Bit24 length(24) with {encode "24 bits"}; + type bitstring Bit25 length(25) with {encode "25 bits"}; + type bitstring Bit26 length(26) with {encode "26 bits"}; + type bitstring Bit27 length(27) with {encode "27 bits"}; + type bitstring Bit28 length(28) with {encode "28 bits"}; + type bitstring Bit29 length(29) with {encode "29 bits"}; + type bitstring Bit30 length(30) with {encode "30 bits"}; + type bitstring Bit31 length(31) with {encode "31 bits"}; + type bitstring Bit32 length(32) with {encode "32 bits"}; + + type bitstring Bit48 length(48) with {encode "48 bits"}; + + type bitstring Bit64 length(64) with {encode "64 bits"}; + + } // end group bitStringSubTypes + + /* + * @remark Number in name indicates string length in number of + * _octets_ + */ + group octetStringSubTypes { + + type octetstring Oct1 length(1) with {encode "1 bytes"}; + type octetstring Oct2 length(2) with {encode "2 bytes"}; + type octetstring Oct3 length(3) with {encode "3 bytes"}; + type octetstring Oct4 length(4) with {encode "4 bytes"}; + type octetstring Oct5 length(5) with {encode "5 bytes"}; + type octetstring Oct6 length(6) with {encode "6 bytes"}; + type octetstring Oct7 length(7) with {encode "7 bytes"}; + type octetstring Oct8 length(8) with {encode "8 bytes"}; + type octetstring Oct9 length(9) with {encode "9 bytes"}; + type octetstring Oct10 length(10) with {encode "10 bytes"}; + type octetstring Oct11 length(11) with {encode "11 bytes"}; + type octetstring Oct12 length(12) with {encode "12 bytes"}; + type octetstring Oct13 length(13) with {encode "13 bytes"}; + type octetstring Oct14 length(14) with {encode "14 bytes"}; + type octetstring Oct15 length(15) with {encode "15 bytes"}; + type octetstring Oct16 length(16) with {encode "16 bytes"}; + + type octetstring Oct128 length(128) with {encode "128 bytes"}; +// Added AF + type octetstring Oct80 length(80) with {encode "80 bytes"}; + type octetstring Oct160 length(160) with {encode "160 bytes"}; + type octetstring Oct320 length(320) with {encode "320 bytes"}; + type octetstring Oct640 length(640) with {encode "640 bytes"}; + type octetstring Oct1280 length(1280) with {encode "1280 bytes"}; + + type octetstring Oct1to15 length(1..15) with {encode "1 to 15 bytes"}; + type octetstring Oct6to15 length(6..15) with {encode "6 to 15 bytes"}; + type octetstring Oct1to128 length(1..128) with {encode "1 to 128 bytes"}; + type octetstring Oct1to254 length(1..254) with {encode "1 to 254 bytes"}; + type octetstring Oct1to255 length(1..255) with {encode "1 to 255 bytes"}; + + } // end group octetStringSubTypes + +} // end module LibCommon_DataStrings diff --git a/LibCommon/LibCommon_Sync.ttcn b/LibCommon/LibCommon_Sync.ttcn new file mode 100644 index 0000000..0c86eab --- /dev/null +++ b/LibCommon/LibCommon_Sync.ttcn @@ -0,0 +1,1003 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc This module implements _one_ generic synchronization mechanism + * for TTCN-3 test cases with one or more test components. + * Key concept is here that one test component acts as a + * synchronization server which listens and triggers one or more + * synchronization clients. It is recomended to use the MTC always as + * the synchronization server but in theory also a PTC can act as such + * a server.

+ * This synchronization is used by calling a library function on + * the server test component to wait for a desired amount of clients + * to notify the server that they have reached a specific synchronization + * point. Each client test component must call another library + * function to perform this notification.

+ * In the event that a client is not able to reach a synchronization + * point the server sends out a signal to all clients to abort the + * test case. This signal is a STOP message which can be caught by + * a test component default which in turn can then run a proper + * shut down behavior based on the current state of the test + * component.

+ * Note that this synchronization mechanism can also be used + * in a special mode called "self synchronization" when a test case + * only has one test component. Here, the test component in essence + * acts as a server and client at the same time. The main benefit of + * using self synchoronization is that the same shutdown mechanisms + * can also be reused fomr the multi component test cases.

+ * This module contains a lot of TTCN-3 definitions. It has been + * structured into tree main groups to help the user to identify + * quickly relevant TTCN-3 definitions. For rookie users of this + * library basicUserRelevantDefinitions should offer all the needed + * definitions. Advanced users can consider use of definitions in + * advancedUserRelevantDefinitions. Finally, libraryInternalDefinitions + * are definitions which are required for the library to work + * properly but do not need to be used in your code. Remember that + * the main motiviation of this sychronization library is to offer + * are _simple_ user interface. Practice has shown that when writing + * actual test component behavior _only a handful_ of functions + * usually wind up being used! Also check the sync library examples + * module for example uses of this sync library.

+ * The invocation of the sync lib functions is also closely tied + * to the verdict control functions which should also be reviewed + * prior to using this library.

+ * This module has been derived from EtsiLibCommon_Synchronization + * which was created in ETSIs STF256/276. It has been kept + * intentionally separate to avoid conflicts with future ETSI + * test suite releases. + * @see LibCommon_Sync.basicUserRelevantDefinitions + * @see LibCommon_Sync.advancedUserRelevantDefinitions + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ +module LibCommon_Sync { + + //LibCommon + import from LibCommon_BasicTypesAndValues { type UInt } ; + import from LibCommon_AbstractData all; + import from LibCommon_VerdictControl all; + + group basicUserRelevantDefinitions { + + group importantSyncTypeDefinitions { + + group compTypeRelated { + + /* + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case may - but does + * not have to - directly use this component type its + * runs on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ServerSyncComp { + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; + } + + /* + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync client + * component. The test component(s) which act as a + * sync client in a test case may - but do not have + * to - directly use this component type their runs + * on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ClientSyncComp { + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /* + * @desc This type is used to define any synchronization + * behavior which is relevant to non-concurrent test + * cases. + * Note that self synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + * Note also that this type is type compatible to the + * ClientSyncComp type so that shutdown altsteps from + * concurrent test cases can also be reused in single + * component test cases! + * @see LibCommon_Sync.ClientSyncComp + */ + type component SelfSyncComp { + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /* + * @desc This port type must be imported into test suites + * when defining test component types which are + * type compatible to a synchronization component + * type + * @see LibCommon_Sync.SelfSyncComp + * @see LibCommon_Sync.ServerSyncComp + * @see LibCommon_Sync.ClientSyncComp + */ + type port SyncPort message { inout SyncCmd } + + } // end compTypeRelated + + group standardSyncPointNames { + const charstring c_prDone := "preambleDone"; + const charstring c_tbDone := "testBodyDone"; + const charstring c_sync1 := "c_sync1"; + const charstring c_sync2 := "c_sync2"; + const charstring c_sync3 := "c_sync3"; + const charstring c_sync4 := "c_sync4"; + const charstring c_sync5 := "c_sync5"; + const charstring c_uPlane := "SyncAfterUPlaneCheck"; + const charstring c_Ringing := "Check ringing tone"; + + } + + } // end group importantSyncTypeDefinitions + + group syncCompTestConfiguration { + + /* @desc Calls self connect function if invoking + * component is the MTC or otherwise connects the client + * the server. This function allows to implement preambles + * in a way that they can be used by test components + * in both non-concurrent as well as concurrent test + * cases! + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_connect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.f_connect4ClientSync + */ + function f_connect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_connect4SelfSync(); + } else { + f_connect4ClientSync(); + } + } + + /* @desc Calls self connect function if the invoking + * component is the MTC or otherwise disconnects the client + * from the server. This function allows to implement + * postambles in a way that they can be used in both + * non-concurrent as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_disconnect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_disconnect4SelfSync + * @see LibCommon_Sync.f_disconnect4ClientSync + */ + function f_disconnect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_disconnect4SelfSync(); + } else { + f_disconnect4ClientSync(); + } + } + + } // end group syncCompTestConfiguration + + group syncFunctions { + + /* @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + f_serverWaitForAllClientsToStop(); + } + + /* @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * setd the verdict based on the specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdict + */ + function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdict(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdict(p_syncPoint, p_ret); + } + } + + /* @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + } + + } // end group syncFunctions + + group syncCompStateHandling { + + /* + * @desc This function updates the state (stack) of a + * sync client or self sync component. This stack is + * key in the shutdown handling of test components. + * It adds the new state name to the top of the + * sync component stack of states. + * The state will only be added in case of a current + * execution status of e_success. + * @param p_newSyncCompState Name of state which was attempted to be reached. + * @param p_ret Current behavior execution status + * @remark If the state of component changes this function must be + * _at least_ called from your test suite prior to f_selfSync + * or f_clientSync which is the only definite place for the + * shutdown default invocation! + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + */ + function f_addSyncCompState(in charstring p_newSyncCompState, + in FncRetCode p_ret) + runs on ClientSyncComp { + if ( p_ret == e_success ) { + if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { + log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); + } else { + f_pushStringStack(v_stateStack,p_newSyncCompState); + } + } + } // end function f_addSyncCompState + + /* + * @desc This function returns the top state on the sync + * state stack of a sync client or self sync + * component and removes it from the stack + * This function cna be used, e.g., in a while + * statement within a postamble or shutdown + * implementation + * @param p_item State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_getTopSyncCompState( out charstring p_state ) + runs on ClientSyncComp + return boolean { + if ( not f_peekStringStackTop(v_stateStack,p_state) ) { + p_state := "IDLE"; + return false; + } + f_popStringStack(v_stateStack); + return true; + } // end function f_getTopSyncCompState + + /* + * @desc This function removes the last state on the state stack + * of a sync client or self sync component. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_popSyncCompState() + runs on ClientSyncComp { + f_popStringStack(v_stateStack); + } // end function f_popSyncCompState + + /* + * @desc This function returns the top state on the sync state + * stack of a sync client or self sync component. It + * does not remove it from the stack + * This stack is key in the shutdown handling of test + * components. + * @param p_item State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_peekTopSyncCompState(out charstring p_state) + runs on ClientSyncComp + return boolean { + return f_peekStringStackTop(v_stateStack,p_state); + } // end function f_peekTopSyncCompState + + /* + * @desc This function checks if the sync state stack + * of a sync client or self sync component is empty. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_isSyncCompStateStackEmpty() + runs on ClientSyncComp + return boolean { + return f_isStringStackEmpty(v_stateStack); + } // end function f_isSyncCompStateStackEmpty + + } // end group syncCompStateHandling + + group exampleShutDownAltstep { + + /* @desc This is an example of a shutdown altstep which can be + * used as a "template" for a interface specific shutdown + * altstep or possily as a first temporary solution in + * test case development.

+ * This altstep shall be activated as a default as the + * first statement in each test case function which drives + * an interface, i.e., in MTC behavior of single component + * and in each client behavior of multi component test + * cases.
+ * The required behavior from this altstep is to:

+ * 1) expect the STOP either via the test component + * syncPort

+ * 2) upon its arrival it should shut down the SUT + * gracefully based on the current component state

+ * The current component state should have been + * previously kept uptodate from a test suite via the + * f_addSyncCompState function. This default will then be + * (automatically) invoked either from within f_selfSync + * or f_clientSync.
+ * Note that shutdown defaults can be written as + * _interface specific_ - they do not need to be test case + * or test component specific! See another example of a + * shutdown altstep in the sync library module. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_SyncExamples.a_exampleShutDown + * @remark Your application specific shutdown altstep + * implementation(s) should _not_ be defined in this + * module but as part of your test suite or application + * library. + */ + altstep a_dummyShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "x" ) { + // then do something + } else if ( v_state == "y" ) { + // then do something else + } + } // end while + f_disconnect4SelfOrClientSync(); + // unmap/disconnect more if needed + log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + } // end group exampleShutDownAltstep + + } // end group basicUserRelevantDefinitions + + group advancedUserRelevantDefinitions { + + group serverRelated { + + /* @desc Implements synchronization of "n" clients from server + * side. If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @return execution status + */ + function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) + runs on ServerSyncComp { + f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); + } + + /* @desc Handles synchronization of clients from server side. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @return execution status + */ + function f_serverSyncClientsTimed( in UInt p_NoOfClients, + in charstring p_syncId, + float p_execTimeLimit ) + runs on ServerSyncComp { + + var integer v_noOfRecvdSyncMsgs := 0; + var boolean v_stopClients := false; + var ClientSyncCompList v_clientRefs := {}; + var ClientSyncComp v_clientRef; + + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server now starting handling of next synchronization point ... ****") ; + } + tc_sync.start(p_execTimeLimit) ; + alt{ + [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; + v_stopClients := true; + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; + v_stopClients := true; + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; } + [] syncPort.receive(SyncCmd :? ) { + log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; + v_stopClients := true; } + [] any port.receive { + // leave it to be ok to receive anything else + // in case that the user has added any non-sync ports to + // his/her server component type definition! + } + [] tc_sync.timeout{ + log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); + v_stopClients := true; } + } //end alt + tc_sync.stop ; + if ( v_stopClients ) { + setverdict(inconc); + // then send out STOP sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerStop); + f_serverWaitForAllClientsToShutDown(); // function will never return! + } else { + setverdict(pass); + // then send out READY sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; + } + } + } // end function f_serverSyncClientsTimed + + /* + * @desc This function is intended only for use on the sync + * server component in concurrent TTCN-3 test cases. + * It waits for all components to finish execution within + * the PX_TSYNC_TIME_LIMIT. If a timeout occurs + * the server will stop all clients. + * This function sets the server component verdict. + */ + function f_serverWaitForAllClientsToStop() + runs on ServerSyncComp { + tc_sync.start; + alt { + [] all component.done { + tc_sync.stop; + log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; + } + [] tc_sync.timeout { + log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; + } + } // end alt + setverdict(pass); + stop; + } // end function f_serverWaitForAllClientsToStop + + } // end group serverRelated + + group clientRelated { + + /* @desc This function creates the connection needed to + * execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_connect4ClientSync() + runs on ClientSyncComp { + connect(self:syncPort, mtc:syncPort); + }// end function f_connect4ClientSync + + /* @desc This function removes the connection needed + * to execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_disconnect4ClientSync() + runs on ClientSyncComp { + disconnect(self:syncPort, mtc:syncPort); + }// end function f_disconnect4ClientSync + + /* @desc This function combines client verdict setting with its + * synchronization for use after or within a preamble + * implementation. + * Note that such preambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPreamble(in charstring p_syncId , + FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdictPreamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdict(in charstring p_syncId, + in FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdict(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function combines client verdict setting with its + * synchronization for use after or within a + * postamble implementation. + * Note that such prostambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPostamble(in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdictPostamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function handles synchronization of a sync client + * with the server. In case of successful execution it sends + * a READY message to the server and waits the READY back. + * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. + * In case of a non successful execution status it + * sends a STOP message to the server. + * In both cases the receipt of a STOP message or no + * response from the server it will trigger the shutdown + * default (if activated). + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_clientSendStop + * @return Updated execution status + */ + function f_clientSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp + return FncRetCode{ + + if (p_ret == e_success){ + syncPort.send(m_syncClientReady(p_syncId)); + tc_sync.start; + alt{ + [] syncPort.receive(m_syncServerReady(p_syncId)){ + tc_sync.stop ; } + [] tc_sync.timeout{ + log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); } // function will not return! + } //end alt + } //end if + else { + log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; + } + return e_success ; + + } // end function f_clientSync + + /* @desc This function can be used to request the shutdown a + * multi component test case _prior_ to reaching a + * synchronization point. It sends a STOP message to + * the sync server and awaits then the STOP from the server + * which will trigger the shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_clientSendStop() + runs on ClientSyncComp { + log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; + syncPort.send(m_syncClientStop) ; + tc_sync.start; + alt{ + [] tc_sync.timeout{ + log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // stop here if shutdown default does not stop + } + + } // end group clientRelated + + } // end group advancedUserRelevantDefinitions + + group otherSyncLibDefinitions { + + group syncLibModuleparams { + /* + * @desc Default time limit for a sync client to reach a + * synchronization point + */ + modulepar {float PX_TSYNC_TIME_LIMIT := 120.0} + + /* + * @desc Default time limit for a sync client to finish + * its execution of the shutdown default + */ + modulepar {float PX_TSHUT_DOWN_TIME_LIMIT := 120.0} + } + + group otherSyncLibTypes { + + type record of charstring SyncPointList; + + type record of ClientSyncComp ClientSyncCompList; + + } // end group otherSyncLibTypes + + group otherSelfSyncRelatedDefinitions { + + /* @desc This function creates the connection needed to + * execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_connect4SelfSync() + runs on SelfSyncComp { + connect(self:syncSendPort, self:syncPort); + }// end function f_connect4SelfSync + + /* @desc This function removes the connection needed + * to execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_disconnect4SelfSync() + runs on SelfSyncComp { + disconnect(self:syncSendPort, self:syncPort); + }// end function f_disconnect4SelfSync + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after and possibly in the test body + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSyncAndVerdict( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdict(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after the preamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPreamble( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after the postamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPostamble( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function synchronizes a MTC with itself. In case + * of a non successful execution status it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @return Updated execution status + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp + return FncRetCode{ + if (p_ret != e_success){ + f_selfSyncStop() ; // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_selfSync: Successfully passed synchronization point. ****") ; + } + return e_success ; + }// end function f_selfSync + + /* @desc This function can be used to shut down a test case _prior_ + * to reaching a synchronization point. it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @see LibCommon_Sync.f_connect4SelfSync + */ + function f_selfSyncStop() + runs on SelfSyncComp { + + log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; + syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_selfSyncStop + + } // end group otherSelfSyncRelatedDefinitions + + /* + * @desc The sychronization protocol is conceptually based on + * named synchronization. Each synchronization point + * has it own specific synchronization message. This + * makes each synchronization unique, and allows, e.g., to + * ensure that a server synchronizes only clients which have + * reached the same synchronization point. + */ + group syncProtocolDefinition { + + type union SyncCmd { + ClientReady clientReady, + ServerReady serverReady, + ClientStop clientStop, + ServerStop serverStop + } + + type record ClientReady { + charstring syncPointId + } + + type record ServerReady { + charstring syncPointId + } + + type record ClientStop {} + + type record ServerStop {} + + } // end group syncProtocolDefinition + + group syncMessages { + template SyncCmd m_syncClientReady( template charstring p_syncId ) := { + clientReady := { p_syncId } + } + + template SyncCmd m_syncServerReady( template charstring p_syncId ) := { + serverReady := { p_syncId } + } + + template SyncCmd m_syncClientStop := { + clientStop := {} + } + + template SyncCmd m_syncServerStop := { + serverStop := {} + } + + } // end group syncMessages + + group otherSyncLibFunctions { + + /* + * @desc Makes server send a sync message to all known clients + * @param p_clientRefs List of client references to which the message is to be send + * @param p_syncCmd The actual synchronization message to be sent out + */ + function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, + in template SyncCmd p_syncCmd) + runs on ServerSyncComp { + var integer i:=0; + for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ + syncPort.send(p_syncCmd) to p_clientRefs[i]; + } + } // end function f_serverSendToAllClients + + /* + * @desc This function is intended only for use on server in concurrent + * TTCN-3 test cases. It waits for all components to shut down + * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs + * it aborts the test case (no matter how far clients got with their + * shutdown). + * This function sets the server verdict. + */ + function f_serverWaitForAllClientsToShutDown() + runs on ServerSyncComp { + + tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); + alt { + [] all component.done { + tc_shutDown.stop; + log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; + } + [] tc_shutDown.timeout { + log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; + } + } // end alt + // cover case that shut down default is NOT activated + setverdict(inconc); + mtc.stop; + } // end function f_serverWaitForAllClientsToShutDown + + } // end group otherSyncLibFunctions + + } // end group otherSyncLibDefinitions + +} // end module LibCommon_Sync diff --git a/LibCommon/LibCommon_SyncExamples.ttcn b/LibCommon/LibCommon_SyncExamples.ttcn new file mode 100644 index 0000000..19360b8 --- /dev/null +++ b/LibCommon/LibCommon_SyncExamples.ttcn @@ -0,0 +1,794 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc This module provides some examples on how the SyncLib + * can be used in the specification of testcases. This module + * is only intended to serve as an (executable) example but should + * or does not need to be included in any test suite which uses + * this synchronization mechanism!

+ * The testcases illustrate how a handful of basic synchronization + * functions can be used to implement synchronization and how they + * behave in different execution scenarios. Note that there are + * a number of additional functions offered by this sync library + * which are available for use. This is only a "starter".

+ * The examples show use of synchronization as well as the use of + * the synchronization component state to write highly reusable + * component shut down mechanisms. It uses heavily the concepts + * of the verdict control library which is to avoid setting a + * test component verdict in behavior directly but to use a return + * code instead and only set the verdict as part of the + * synchronization. Only avoiding of the use of verdict allows + * again an implementation of truly reusable behavior.

+ * Regarding the reuse it would have been possible implement the + * test suite in a much more modular way, e.g,. isolate pre- and + * postambles in separate functions and resue them in different + * test cases ... We have not done this here to keep the examples + * more self contained. We however strongly advise users to (re)use + * functional decomposition much more heavily in their own test + * case implementations!

+ * Note that these test cases are executable as long as you have + * any or a dummy SUT Adapter implementation, a Platform Adapter + * which implements some concept of time, as well as any kind of + * codec to en/decode synchronization messages between test + * components. Feel free to execute this test cases and see the + * execution logs to see how the synchronization was handled at + * run-time. + */ +module LibCommon_SyncExamples { + + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; +// import from LibCommon_VerdictControl { type FncRetCode; function f_setVerdictPostamble }; +// import from LibCommon_AbstractData { type StringStack; const c_initStringStack}; + + group exampleTestSystem { + + /* + * @desc Test component types in a test suite which uses the + * LibCommon_Sync function must - no matter if used in single + * or multi component test cases by type compatible to one of + * the sync library component type definitions. + * It is safest to define test components to be type compatible + * to the SelfSyncComp type. That way components can use self + * as well as client sync functions. + */ + type component ExampleComp + { + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + + // here could follow additional port, variable, + // and timer definitions of any kind + } + + /* + * @desc There are no requirements upon the system component + * type definition by the LibCommon_Sync + */ + type component ExampleSystemComp + { + // here could be port, variable, and + // timer definitions of any kind + // this example system component does not + // contain any since it does not test any SUT + } + + } + + /* @desc This is an example of a shutdown altstep which handles + * the proper shutdown of our "example" interface. These + * actions of course only take place if the test case maintains + * its sync component state. See the referenced test cases for + * examples. Note this shutdown is a generic one and works for any + * test component which use the "example" interface. + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndErrorWithCompState + */ + altstep a_exampleShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_exampleShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "State A" ) { + log("**** a_exampleShutDown: ""Undoing"" State A ... ****"); + } else if ( v_state == "State B" ) { + log("**** a_exampleShutDown: ""Undoing"" State B ... ****"); + } else if ( v_state == "State C" ) { + log("**** a_exampleShutDown: ""Undoing"" State C ... ****"); + } + } // end while + f_disconnect4SelfOrClientSync(); + // Your test suite may require more unmappings/disconnections here + log("**** a_exampleShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + /* + * @desc Self synchronization can be used if there is only one + * test component in a test case. + */ + group selfSyncTestCases { + + /* + * @desc This test case is a simple scenario where everything + * goes ok. The dummy default is activated to catch + * scenarios where things do not go well.

+ * All log statements in this test case statement will + * be printed during its execution. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The final test case verdict is pass. + * @see LibCommon_SyncExamples.tc_selfSyncPreambleError + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyTimeout + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_selfSyncOk() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncOk + + /* + * @desc This test case shows how the LibCommon_Sync handles + * an error in a preamble.

+ * Only the preamble log statement will be printed. + * The error in the premable will trigger the sending of + * a STOP sync message which in turn will trigger the + * activated dummy shutdown.

+ * The synchronization function will report the failure + * to reach the first sync point and set the component + * verdict to fail.After handling shutdown the sync + * library will terminate the test component (and therefore + * also the test case).

+ * The final test case verdict is inconclusive since the + * error occured in the preamble (and the test body has not yet + * been executed). The verdict would be fail in case + * f_selfOrClientSyncAndVerdict would have been used instead + * of f_selfOrClientSyncAndVerdictPR for preamble + * synchronization. + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdictPR + */ + testcase tc_selfSyncPreambleError() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing preamble with error ****+"); + v_ret := e_error; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase selfSyncPreambleError + + /* + * @desc This test case shows how the LibCommon_Sync handles + * a timeout in a test body.

+ * Here the postamble log statement will not be printed. + * The first sync function invocation will print the successful + * reaching of the preamble sync point and set the verdict + * to pass.

+ * The timeout will cause the second sync invocation to set the + * component verdict to inconclusive, report the faliure to + * reach the second sync point, send a STOP message. Again the + * activated dummy default will catch this sync message + * and shut down the test component and stop the test case.

+ * The final test case verdict is inconc. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_selfSyncTestBodyTimeout() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing test body with timeout ****+"); + v_ret := e_timeout; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncTestBodyTimeout + + /* + * @desc This test case shows how sync component state functions + * can be used in conjunction with an "example" shutdown + * default. Note the default used here is not the + * dummy but an example shutdown!

+ * The preamble passes but an an error occurs in the test body. + * Therefore only the postamble log statement will not + * be printed since the shutdown default catches during the test + * body sycnhronization.

+ * During the execution the preamble is assumed to advance the + * component state from an "IDLE" state to "State A", a + * successfull execution of the test body would then advance it + * to "State B" , and the postamble would return the + * component to the "IDLE" state. Note however that "State B" + * is never added since the execution of the test body is _not_ + * successful!

+ * The final test case verdict is fail. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_popSyncCompState + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.a_exampleShutDown + */ + testcase tc_selfSyncTestBodyErrorWithCompState() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_tbDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing test body with error ****+"); + v_ret := e_error; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncTestBodyErrorWithCompState + + } // end group selfSyncTestCases + + /* + * @desc Regular synchronization can be used if there is more than one + * test component in a test case. Here, the MTC should preferably only + * act as the sync server, i.e., only PTCs actually test interfaces. + * This group focuses on test cases with a MTC and 2 PTCs which has + * some "extra support" in sync library as this configuration occurs + * quite frequently (at least in protocol testing). + */ + group twoCompSyncTestCases { + + group twoCompSyncOkTestCase { + + /* + * @desc This test case is a simple scenario where everything + * goes ok. The dummy default is activated to catch + * scenarios where things do not go well.

+ * All log statements for both PTCs will be printed. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The MTC acts here only as the sync server. It uses the most + * condensed for of specifying server sync behavior for 2 + * components, i.e., f_serverSync2ClientsAndStop(). The next + * test case will show a the same behavior using 4 smaller + * functions invocations.

+ * The final test case verdict is pass. + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndError + * @see LibCommon_Sync.f_serverSync2ClientsAndStop + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncOk() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOk()); + v_ptcBRef.start(f_PTCB_twoCompSyncOk()); + // synchronize both PTCs on these 2 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOk + + function f_PTCB_twoCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOk + + } // end group twoCompSyncOkTestCase + + group twoCompSyncOkAndErrorTestCase { + + /* + * @desc In this scenario PTC A behaves ok but an error occurs + * in the postamble of PTC B. So the test case passes + * successfully through the first two sync points but then + * PTC B the error return value causes PTC B to request the + * stopping of the test case from the sync server, i.e., + * the MTC. The synchronization server reacts to this by + * sending a STOP message (within the sync function) which + * then causes BOTH PTCs to execute their dummy shutdown + * default. Note that use of a proper shutdown default is + * discussed in a later example.

+ * Note that still all log statements of both PTCs will be + * printed since the error occurs within the postmable! + * Note that the MTC uses here now three separate sync + * function and then a function to wait for components to + * finish. Nevertheless these calls are equivalent to the + * single function call in the previous test case. + * The functions used here however are more flexible, i.e., + * allow to specify the time to wait for sync messages from + * the server, as well as the number of clients to be + * synchronized.

+ * The final test case verdict is inconclusive since the + * error occurs in the PTC B postamble (so its test body + * has been executed successfully). The verdict would be + * fail in case f_selfOrClientSyncAndVerdict would have + * been used instead of f_selfOrClientSyncAndVerdictPR + * for postamble synchronization. + * @see LibCommon_SyncExamples.tc_twoCompSyncOk + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndErrorWithCompState + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdictPR + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncOkAndError() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOkAndError()); + v_ptcBRef.start(f_PTCB_twoCompSyncOkAndError()); + // synchronize both PTCs on these sychronization points + f_serverSyncClientsTimed(2, c_prDone, PX_TSYNC_TIME_LIMIT); + f_serverSyncClientsTimed(2, c_tbDone, PX_TSYNC_TIME_LIMIT); + // then wait for them to stop + f_serverWaitForAllClientsToStop(); + } + + function f_PTCA_twoCompSyncOkAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOkAndError + + function f_PTCB_twoCompSyncOkAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing postamble with error ****+"); + v_ret := e_error; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOkAndError + + } // end group twoCompSyncOkAndErrorTestCase + + group twoCompSyncErrorAndErrorTestCase { + + /* + * @desc In this scenario PTC A has a problem in the test body and + * PTC B in its postamble. So the test case passes + * successfully through the first sync point but then + * PTC A's error return value causes PTC A to request the + * stopping of the test case from the sync server, i.e., + * the MTC. The sync server synchronization reacts to this + * by sending a STOP message (within the server synch function) + * which then causes BOTH PTCs to execute their shutdown + * default. Therefore PTC B never is shutdown before reaching + * its postamble.

+ * Log statements of both PTCs for the first two sync points + * will be printed since the first error occurs within the + * test body of PTC A. At the 2nd sync point PTCA will set + * its verdict to fail but PTC B still to pass.

+ * The final test case verdict is still a fail. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncErrorAndError() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncErrorAndError()); + v_ptcBRef.start(f_PTCB_twoCompSyncErrorAndError()); + // synchronize both PTCs on these 3 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncErrorAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing test body with error ****+"); + v_ret := e_error; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncErrorAndError + + function f_PTCB_twoCompSyncErrorAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing postamble with error ****+"); + v_ret := e_error; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncErrorAndError + + } // end group twoCompSyncErrorAndErrorTestCase + + group twoCompSyncOkAndErrorWithCompStateTestCase { + + /* + * @desc This scenario is similar to our previous example + * tc_twoCompSyncOkAndError. This time around however + * the error in PTC B occurs in the test body. Also + * each PTC keeps track of its state which is then used by + * the "example" shutdown default to shut down a component.

+ * Note that the shutdown is the same as used in a self sync + * test case - also that both PTCs use the same default but + * shut down in different ways since they reach different + * states. The reuse of a default by a PTC is only possible + * course if the test components test the same interface, + * e.g., use the same protocol to interatc with the SUT.

+ * Note that still all log statements of both PTCs will be + * printed since the error occurs within the postamble! + * The default for PTC B will only undo "State A" as it has + * failed to reach "State B". PTC A will undo both states.

+ * The final test case verdict is fail. + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndError + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.a_exampleShutDown + */ + testcase tc_twoCompSyncOkAndErrorWithCompState() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOkAndErrorWithCompState()); + v_ptcBRef.start(f_PTCB_twoCompSyncOkAndErrorWithCompState()); + // synchronize both PTCs on these 3 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncOkAndErrorWithCompState() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing test body successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOkAndErrorWithCompState + + function f_PTCB_twoCompSyncOkAndErrorWithCompState() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing test body with error ****+"); + v_ret := e_error; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOkAndErrorWithCompState + + } // end group twoCompSyncOkAndErrorWithCompStateTestCase + + } // end group twoCompSyncTestCases + + /* + * @desc Regular synchronization can be used if there is more than one + * test component in a test case. Here, the MTC should preferably only + * act as the sync server, i.e., only PTCs actually test interfaces. + * This group focuses on test cases with a MTC and any number of PTCs. + */ + group multiCompSyncTestCases { + + group multiCompSyncOk { + /* + * @desc This test case is a simple scenario where everything + * goes ok. It starts 5 components with identical behavior + * The dummy default is activated by each PTC to catch + * scenarios where things do not go well. The MTC acts + * again only as the sync server.

+ * All log statements for all PTCs will be printed. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The final test case verdict is pass. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_multiCompSyncOk() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcRef[5]; + var integer i; + // create and start PTCs + for (i := 0; i < 5; i := i+1) { + v_ptcRef[i] := ExampleComp.create; + v_ptcRef[i].start(f_PTC_multiCompSyncOk()); + } + // synchronize all PTCs on these sychronization points + f_serverSyncClientsTimed(5, c_prDone, PX_TSYNC_TIME_LIMIT); + f_serverSyncClientsTimed(5, c_tbDone, PX_TSYNC_TIME_LIMIT); + // then wait for them to stop + f_serverWaitForAllClientsToStop(); + } + + function f_PTC_multiCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTC_multiCompSyncOk + + } // end group multiCompSyncOk + + } // end group twoCompSyncTestCases + + control { + execute( tc_selfSyncOk() ); // verdict: PASS + execute( tc_selfSyncPreambleError() ); // verdict: INCONC + execute( tc_selfSyncTestBodyTimeout() ); // verdict: INCONC + execute( tc_selfSyncTestBodyErrorWithCompState() ); // verdict: ERROR + execute( tc_twoCompSyncOk() ); // verdict: PASS + execute( tc_twoCompSyncOkAndError() ); // verdict: INCONC + execute( tc_twoCompSyncErrorAndError() ); // verdict: ERROR + execute( tc_twoCompSyncOkAndErrorWithCompState() ); // verdict: ERROR + execute( tc_multiCompSyncOk() ); // verdict: PASS + } + +} // end module LibCommon_SyncExamples diff --git a/LibCommon/LibCommon_TextStrings.ttcn b/LibCommon/LibCommon_TextStrings.ttcn new file mode 100644 index 0000000..16b4fb1 --- /dev/null +++ b/LibCommon/LibCommon_TextStrings.ttcn @@ -0,0 +1,108 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of text string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Text string" refers to TTCN-3 charstring and universal + * charstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_TextStrings { + + /* + * @desc These constants can be used to add special characters into + * TTCN-3 text strings by using the concatenation operator. + * Example use: + * var charstring v_text := "Hi!" & c_CRLF & "Hello!"; + */ + group usefulConstants { + + const charstring c_NUL := oct2str('00'O); + const charstring c_SOH := oct2str('01'O); + const charstring c_STX := oct2str('02'O); + const charstring c_ETX := oct2str('03'O); + const charstring c_EOT := oct2str('04'O); + const charstring c_ENQ := oct2str('05'O); + const charstring c_ACK := oct2str('06'O); + const charstring c_BEL := oct2str('07'O); + const charstring c_BS := oct2str('08'O); + const charstring c_TAB := oct2str('09'O); + const charstring c_LF := oct2str('0A'O); + const charstring c_VT := oct2str('0B'O); + const charstring c_FF := oct2str('0C'O); + const charstring c_CR := oct2str('0D'O); + const charstring c_SO := oct2str('0E'O); + const charstring c_SI := oct2str('0F'O); + const charstring c_DLE := oct2str('10'O); + const charstring c_DC1 := oct2str('11'O); + const charstring c_DC2 := oct2str('12'O); + const charstring c_DC3 := oct2str('13'O); + const charstring c_DC4 := oct2str('14'O); + const charstring c_NAK := oct2str('15'O); + const charstring c_SYN := oct2str('16'O); + const charstring c_ETB := oct2str('17'O); + const charstring c_CAN := oct2str('18'O); + const charstring c_EM := oct2str('19'O); + const charstring c_SUB := oct2str('1A'O); + const charstring c_ESC := oct2str('1B'O); + const charstring c_FS := oct2str('1C'O); + const charstring c_GS := oct2str('1D'O); + const charstring c_RS := oct2str('1E'O); + const charstring c_US := oct2str('1F'O); + const charstring c_DEL := oct2str('7F'O); + + const charstring c_CRLF := oct2str('0D'O) & oct2str('0A'O); + + } // end group usefulConstants + + /* + * @remark Number in name indicates string length in number of + * _chars_ + */ + group textStringSubTypes { + + type charstring String1 length(1) with { encode "1 byte"}; + type charstring String2 length(2) with { encode "2 bytes"}; + type charstring String3 length(3) with { encode "3 bytes"}; + type charstring String4 length(4) with { encode "4 bytes"}; + type charstring String5 length(5) with { encode "5 bytes"}; + type charstring String6 length(6) with { encode "6 bytes"}; + type charstring String7 length(7) with { encode "7 bytes"}; + type charstring String8 length(8) with { encode "8 bytes"}; + type charstring String9 length(9) with { encode "9 bytes"}; + type charstring String10 length(10) with { encode "10 bytes"}; + type charstring String11 length(11) with { encode "11 bytes"}; + type charstring String12 length(12) with { encode "12 bytes"}; + type charstring String13 length(13) with { encode "13 bytes"}; + type charstring String14 length(14) with { encode "14 bytes"}; + type charstring String15 length(15) with { encode "15 bytes"}; + type charstring String16 length(16) with { encode "16 bytes"}; + + type charstring String1To63 length(1..63) with {encode "1 to 63 bytes"}; + type charstring String1To64 length(1..64) with {encode "1 to 64 bytes"}; + type charstring String1To127 length(1..127) with {encode "1 to 127 bytes"}; + type charstring String1To128 length(1..128) with {encode "1 to 128 bytes"}; + type charstring String1to255 length(1..255) with {encode "1 to 255 bytes"}; + + } // end stringSubTypes + + group usefulTextStringTypes { + + // NOTE STS: below universal commented due to serious RTS problems in Tau 2.3 and before + type /*universal*/ charstring UnicodeText; + + // NOTE STS: below universal commented due to serious RTS problems in Tau 2.3 and before + type /*universal*/ charstring UnicodeText1to255 length(1..255) + with {encode "1 to 255 bytes"}; + + type charstring AlphaNum ("0".."9","a".."z","A".."Z"); + type AlphaNum AlphaNum2 length(2); + type AlphaNum AlphaNum1To32 length(1..32); + + } // end group usefulTextStringTypes + +} // end module LibCommon_TextStrings diff --git a/LibCommon/LibCommon_Time.ttcn b/LibCommon/LibCommon_Time.ttcn new file mode 100644 index 0000000..b5a5e05 --- /dev/null +++ b/LibCommon/LibCommon_Time.ttcn @@ -0,0 +1,74 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of time handling functions which may be useful in + * the implementation of any TTCN-3 test suite. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_Time { + + group moduleParameters { + + /* @desc Time to control PTC.stop + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TDONE := 120.0} + + /* @desc Time to control the reception of a message + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TAC := 30.0} + + /* @desc Time to control that IUT sends nothing + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TNOAC := 10.0} + + /* @desc Time to control that IUT reacts prior to Upper Tester action + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TWAIT := 120.0} + + } // end group moduleParameters + + group sleeping { + + /* + * @desc The invocation of this function will cause a test component + * to sleep (or wait) for a specified amount of time. + * Defaults may interrupt this sleep if activated. + * @see LibCommon_Time.f_sleepIgnoreDef + * @param p_duration Amount of time that the test component should wait. + */ + function f_sleep ( in float p_duration ) { + timer t; + if (p_duration <= 0.0) {return} + t.start( p_duration ); + t.timeout; + } + + /* + * @desc The invocation of this function will cause a test component + * to sleep (or wait) for a specified amount of time. + * This function ignores any active defaults, i.e., the function + * will always wait the specified amount of time. + * @param p_duration Amount of time that the test component should wait. + */ + function f_sleepIgnoreDef ( in float p_duration ) { + timer t; + if (p_duration <= 0.0) {return} + t.start( p_duration ); + alt { + [] t.timeout {} + [else] {repeat} + } // end alt + } + + } // end group sleeping + + +} // end module LibCommon_Time diff --git a/LibCommon/LibCommon_VerdictControl.ttcn b/LibCommon/LibCommon_VerdictControl.ttcn new file mode 100644 index 0000000..b9dfe32 --- /dev/null +++ b/LibCommon/LibCommon_VerdictControl.ttcn @@ -0,0 +1,101 @@ +/* + * ---------------------------------------------------------------------------- + * + * @author STF 276 + * @version $Id$ + * @desc Contains generic functions which set test component verdicts + * based on generic function return codes according to established + * test implementation practice. These functions should only be called + * from test case functions (see reusable t3 code methodology) only. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_VerdictControl { + + /* + * @desc Collection of all possible function return codes. + * This type should be used as a return parameter type + * in all TTCN-3 function definitions (except for + * functions invoked from in TTCN-3 start statements). + * This return value should be used to communicate a + * verdict to the caller _instead of_ literally setting + * a verdict in the function! This warrants a higher + * degree of reuse for the function. + */ + type enumerated FncRetCode { + e_success(0), + // error codes + e_error(1), + e_timeout(2) + } + with { + encode "import=com.testingtech.ttcn.tci.*;"; + } + + + /* + * @desc This function should be used for verdict + * setting after completion of, e.g., the test body + * execution. + * Sets verdicts are INCONC in case of a timeout, FAIL + * in case of an error, and PASS otherwise. + * @param p_ret Current execution status + */ + function f_setVerdict ( FncRetCode p_ret ) { + if ( p_ret == e_success ) { + setverdict(pass); + } else if ( p_ret == e_timeout ) { + setverdict(inconc); + } else { + setverdict(fail); + } + } // end function f_setVerdict + + + /* + * @desc This function should be used for verdict + * setting after completion of a preamble + * execution. + * Sets verdicts are INCONC in case of a timeout or + * an error, and PASS otherwise. + * @param p_ret Preamble execution status + */ + function f_setVerdictPreamble ( FncRetCode p_ret ) { + if ( p_ret != e_success ) { + setverdict(inconc); + } else { + setverdict(pass); + } + } // end function f_setVerdictPreamble + + + /* + * @desc This function should be used for verdict + * setting after completion of a postamble + * execution. + * Sets verdicts are INCONC in case of a timeout or + * an error, and PASS otherwise. + * @param p_ret Postamble execution status + */ + function f_setVerdictPostamble ( FncRetCode p_ret ) { + if ( p_ret != e_success ) { + setverdict(inconc); + } else { + setverdict(pass); + } + } // end function f_setVerdictPostamble + + //TODO comment + function f_getVerdict() + return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + +} // end module LibCommon_VerdictControl diff --git a/LibIms/LibIms_Interface.ttcn b/LibIms/LibIms_Interface.ttcn new file mode 100644 index 0000000..1294ca6 --- /dev/null +++ b/LibIms/LibIms_Interface.ttcn @@ -0,0 +1,44 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_Interface +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + //AtsCommon + import from SipIsup_PIXITS all; + //LibIms + import from LibIms_SIPTypesAndValues all; + + group AdressTypes + { + + //Solution for building error problem. (Important for validation) + //type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module + //With this solution TAU compiler error. + type component ImsComponent extends SipComponent + { + // general variables + var ImsInterfaceProfile vc_interfaceprofile + } // end ImsComponent + +// type address WorkaroundAddress; //Remove it later + }// end group AdressTypes + + + + +} // end module AtsIms_TestSystem diff --git a/LibIms/LibIms_PIXITS.ttcn b/LibIms/LibIms_PIXITS.ttcn new file mode 100644 index 0000000..8fef1b5 --- /dev/null +++ b/LibIms/LibIms_PIXITS.ttcn @@ -0,0 +1,410 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_PIXITS +{ + //LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_TextStrings all; + import from LibCommon_DataStrings all; + +group SUT { +group SUT_UE1 { + modulepar { + /** @desc charstring for SUT - PCSCF1 IP address to exchange SIP messages - connection point for UE1 + */ + charstring PX_IMS_SUT_PCSCF1_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF1 port number to exchange SIP messages - connection point for UE1 + */ + integer PX_IMS_SUT_PCSCF1_PORT := 5060; + + /** @desc charstring for SUT/PCSCF1 domain - connection point for UE1 + */ + charstring PX_IMS_SUT_PCSCF1_HOME_DOMAIN := "pcscf1.sut.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE1 + */ + charstring PX_IMS_SUT_UE1_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE1 local domain + */ + charstring PX_IMS_SUT_UE1_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE1 local user + */ + charstring PX_IMS_SUT_UE1_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 3-2-2 username of UE1 + * The name of user in the specified realm + */ + charstring PX_IMS_SUT_UE1_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3-2-2-2 passwd of UE1: A known shared secret, the password of user of the specified username + */ + charstring PX_IMS_SUT_UE1_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3-2-1 qop options of UE1: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server; the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_IMS_SUT_UE1_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE1 + */ + charstring PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net"; + + /** @desc charstring for UE1 display name + */ + charstring PX_IMS_SUT_UE1_DISPLAY := "UE1@SUT"; + } +} // end group SUT_UE1 + +group SUT_UE2 { + modulepar { + /** @desc charstring for SUT - PCSCF2 IP address to exchange SIP messages - connection point for UE2 + */ + charstring PX_IMS_SUT_PCSCF2_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF2 port number to exchange SIP messages - connection point for UE2 + */ + integer PX_IMS_SUT_PCSCF2_PORT := 5060; + + /** @desc charstring for SUT/PCSCF2 domain - connection point for UE2 + */ + charstring PX_IMS_SUT_PCSCF2_HOME_DOMAIN := "pcscf2.home.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE2 + */ + charstring PX_IMS_SUT_UE2_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE2 local domain + */ + charstring PX_IMS_SUT_UE2_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE2 local user + */ + charstring PX_IMS_SUT_UE2_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 3.2.2 username of UE2 + * The name of user in the specified realm + */ + charstring PX_IMS_SUT_UE2_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3-2-2-2 passwd: A known shared secret, the password of user of the specified username of UE2 + */ + charstring PX_IMS_SUT_UE2_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3-2-1 qop options UE2: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server, the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_IMS_SUT_UE2_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE2 + */ + charstring PX_IMS_SUT_UE2_REGISTRAR := "registrar.sut.net"; + } +} // end group SUT_UE2 + + + +group SUT_unknown{ + /** @desc charstring for identity of unknown UE public user + */ + modulepar { + charstring PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007"; + } +} // end group SUT_unknown + +group EMERGENCY{ + modulepar { + /** @desc charstring for identity of emergency service local domain + */ + charstring PX_IMS_SUT_EMERGENCY_HOME_DOMAIN := "home.net"; + + /** @desc charstring for identity of the emergency service + */ + charstring PX_IMS_SUT_EMERGENCY_SERVICE := "service:sos"; + + /** @desc charstring for identity of the invalid emergency service + */ + charstring PX_IMS_SUT_EMERGENCY_SERVICE_INVALID := "service:sos.invalid"; + } +}// end group EMERGENCY service + +group SUT_IBCF { + modulepar { + /** @desc charstring for SUT/IBCF1 IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IBCF1_IPADDR := "172.31.10.5"; + + /** @desc integer for SUT/IBCF1 port number to exchange SIP messages + */ + integer PX_IMS_SUT_IBCF1_PORT := 5060; + + /** @desc charstring for SUT/IBCF1 domain + */ + charstring PX_IMS_SUT_IBCF1_HOME_DOMAIN := "ibcf1.sut.net"; + + /** @desc charstring for SUT/IBCF2 IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IBCF2_IPADDR := "172.31.10.6"; + + /** @desc integer for SUT/IBCF2 port number to exchange SIP messages + */ + integer PX_IMS_SUT_IBCF2_PORT := 5060; + + /** @desc charstring for SUT/IBCF2 domain + */ + charstring PX_IMS_SUT_IBCF2_HOME_DOMAIN := "ibcf2.sut.net"; + } +} // end group SUT_IBCF +group SUT_PCSCF { + modulepar { + /** @desc charstring for SUT/P-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_PCSCF_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT/P-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_PCSCF_PORT := 5060; + + /** @desc charstring for SUT/P-CSCFdomain + */ + charstring PX_IMS_SUT_PCSCF_HOME_DOMAIN := "pcscf.sut.net"; + + /** @desc charstring for SUT/P-CSCF P_VisitedNetwork ID header (see RFC3455) + */ + charstring PX_IMS_SUT_PCSCF_VisitedNetworkID := "sut token"; + + /** @desc charstring for SUT/P-CSCF Min-SE header lower bound for the session refresh interval (see RFC4028) + */ + charstring PX_IMS_SUT_PCSCF_MinSE := "100"; + } +} // end group SUT_PCSCF +group SUT_SCSCF { + modulepar { + /** @desc charstring for SUT/S-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_SCSCF_IPADDR := "172.31.10.4"; + + /** @desc integer for SUT/S-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_SCSCF_PORT := 5060; + + /** @desc charstring for SUT/S-CSCFdomain + */ + charstring PX_IMS_SUT_SCSCF_HOME_DOMAIN := "scscf.sut.net"; + + /** @desc charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF + */ + charstring PX_IMS_SUT_SCSCF_REALM := "realm.scscf"; + } +} // end group SUT_SCSCF + +group SUT_ICSCF { + modulepar { + /** @desc charstring for SUT/I-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_ICSCF_IPADDR := "172.31.10.3"; + + /** @desc integer for SUT/I-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_ICSCF_PORT := 5060; + + /** @desc charstring for SUT/I-CSCFdomain + */ + charstring PX_IMS_SUT_ICSCF_HOME_DOMAIN := "icscf.sut.net"; + } +} // end group SUT_ICSCF + +group SUT_IMGCF { + modulepar { + /** @desc charstring for SUT/I-MGCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IMGCF_IPADDR := "172.31.10.10"; + + /** @desc integer for SUT/I-MGCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_IMGCF_PORT := 5060; + + /** @desc charstring for SUT/I-MGCFdomain + */ + charstring PX_IMS_SUT_IMGCF_HOME_DOMAIN := "imgcf.sut.net"; + } +} // end group SUT_IMGCF + +} // end group SUT +group TS { +group TS_UE1 { + modulepar { + /** @desc charstring for IP address used by the UE1 to exchange SIP messages + */ + charstring PX_IMS_TS_UE1_IPADDR := "172.31.1.240"; + + /** @desc integer for port number used by the UE1 to exchange SIP messages + */ + integer PX_IMS_TS_UE1_PORT := 5060; + + /** @desc charstring for visited(TS) REGISTRAR domain + */ + charstring PX_IMS_TS_UE1_REGISTRAR := "registrar.ts.net"; + } +} // end group TS_UE1 + +group TS_UE2 { + modulepar { + /** @desc charstring for IP address used by the UE2 to exchange SIP messages + */ + charstring PX_IMS_TS_UE2_IPADDR := "172.31.1.241"; + + /** @desc integer for port number used by the UE2 to exchange SIP messages + */ + integer PX_IMS_TS_UE2_PORT := 5060; + + /** @desc charstring for visited(TS) REGISTRAR domain + */ + charstring PX_IMS_TS_UE2_REGISTRAR := "registrar.ts.net"; + } +} // end group TS_UE2 + +group TS_IBCF { + modulepar { + /** @desc charstring for TS/IBCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_IBCF_IPADDR := "172.31.1.15"; + + /** @desc integer for TS/IBCF port number to exchange SIP messages + */ + integer PX_IMS_TS_IBCF_PORT := 5060; + + /** @desc charstring for TS/IBCF domain + */ + charstring PX_IMS_TS_IBCF_HOME_DOMAIN := "ibcf.ts.net"; + } +} // end group TS_IBCF + +group TS_ICSCF { + modulepar { + /** @desc charstring for TS/I-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_ICSCF_IPADDR := "172.31.1.13"; + + /** @desc integer for IUT/I-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_ICSCF_PORT := 5060; + + /** @desc charstring for TS/I-CSCF domain + */ + charstring PX_IMS_TS_ICSCF_HOME_DOMAIN := "icscf.ts.net"; + } +} // end group TS_ICSCF + +group TS_PCSCF { + modulepar { + /** @desc charstring for TS/P-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_PCSCF_IPADDR := "172.31.1.12"; + + /** @desc integer for IUT/P-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_PCSCF_PORT := 5060; + + /** @desc charstring for TS/P-CSCFdomain + */ + charstring PX_IMS_TS_PCSCF_HOME_DOMAIN := "pcscf.ts.net"; + } +} // end group TS_PCSCF + +group TS_SCSCF { + modulepar { + /** @desc charstring for TS/S-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_SCSCF_IPADDR := "172.31.1.14"; + + /** @desc integer for TS/S-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_SCSCF_PORT := 5060; + + /** @desc charstring for TS/S-CSCFdomain + */ + charstring PX_IMS_TS_SCSCF_HOME_DOMAIN := "scscf.ts.net"; + + /** @desc charstring public user identity for Request-URI to be rejected by IUT S-CSCF as it is barred for incoming calls + */ + charstring PX_IMS_SUT_BARRED_PUBLIC_USER; + + /** @desc charstring invalid GRUU for Request-URI to be rejected by IUT S-CSCF + */ + charstring PX_IMS_SUT_INVALID_GRUU; + + /** @desc charstring Service value in P-Asserted-Service header to be rejected by IUT S-CSCF, as service is not subscribed-to + */ + charstring PX_IMS_SUT_UNSUBSCRIBED_SERVICE; + + /** @desc charstring Service value in SDP message body to be rejected by IUT S-CSCF, as service is not subscribed-to; + ** intentionally kept as charstring to allow maximum flexibility to construct unsubscribed service ** + */ + charstring PX_IMS_SUT_UNSUBSCRIBED_SDP_SERVICE; + } +} // end group TS_SCSCF + +group TS_IMS1user { + modulepar { + /** @desc charstring for public userinfo/displayname addressing IMS1UE (simulated by the TS) + */ + charstring PX_IMS_TS_IMS1UE_PUBLIC_USER := "IMS1UE"; + + /** @desc charstring for TS/domain + */ + charstring PX_IMS_TS_IMS1UE_HOME_DOMAIN := "ts.net"; + } +} // end group TS_IMS1user + +group TS_ISUPuser { + modulepar { + /** @desc charstring for public userinfo addressing ISUPUE (simulated by the TS) + */ + charstring PX_IMS_TS_ISUP_PUBLIC_USER := "070123456"; + + /** @desc charstring for ISUP TS/domain or IPAddres + */ + charstring PX_IMS_TS_ISUP_HOME_DOMAIN := "172.27.11.80"; + } +} // end group TS_ISUPuser + + +group TS_AS { + modulepar { + /** @desc charstring for TS/AS1 IP address to exchange SIP messages + */ + charstring PX_IMS_TS_AS1_IPADDR := "172.31.1.18"; + + /** @desc integer for TS/AS1 port number to exchange SIP messages + */ + integer PX_IMS_TS_AS1_PORT := 5060; + + /** @desc charstring for TS/AS1 domain + */ + charstring PX_IMS_TS_AS1_HOME_DOMAIN := "as1.ts.net"; + + /** @desc charstring for TS/AS2 IP address to exchange SIP messages + */ + charstring PX_IMS_TS_AS2_IPADDR := "172.31.1.19"; + + /** @desc integer for TS/AS2 port number to exchange SIP messages + */ + integer PX_IMS_TS_AS2_PORT := 5060; + + /** @desc charstring for TS/AS2 domain + */ + charstring PX_IMS_TS_AS2_HOME_DOMAIN := "as2.ts.net"; + } +} // end group TS_AS +} // end group TS +} // end module AtsIms_PIXITS diff --git a/LibIms/LibIms_SIPTypesAndValues.ttcn b/LibIms/LibIms_SIPTypesAndValues.ttcn new file mode 100644 index 0000000..5238a43 --- /dev/null +++ b/LibIms/LibIms_SIPTypesAndValues.ttcn @@ -0,0 +1,80 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types and constants used by the test component + * for SIP tests. + */ + +module LibIms_SIPTypesAndValues +{ + // SipAts + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + +group Constants +{ + +const integer c_ISUP_HOP_COUNT:=31; //TODO replace this value with appropriate PIXIT parameter + +group UserProfileConstants + { + // number of user profile (RESERVED: from 1-10 for SIP profile) + const integer c_userProfile_UE1atSUThome := 11; // location is SUT domain + const integer c_userProfile_UE2atSUThome := 12; // location is SUT domain + const integer c_userProfile_UE1atSUTvisiting := 21; // location is SUT domain + //const integer c_userProfile_UE2atSUTvisiting := 22; // location is SUT domain + const integer c_userProfile_IBCFwithUnknownUE := 28; // location is IMS1 domain + const integer c_userProfile_IBCFwithHomeUE := 29; // location is IMS1 domain + const integer c_userProfile_IBCFwithVisitingUE := 31; // location is IMS1 domain + const integer c_userProfile_PCSCFwithHomeUE := 41; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE := 42; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE2 := 43; // location is IMS1 domain + const integer c_userProfile_PCSCFwithUnknownVisitingUE := 44; // location is IMS1 domain + const integer c_userProfile_ICSCFwithHomeUE := 45; // location is IMS1 domain + const integer c_userProfile_SCSCFwithHomeUE := 46; // location is IMS1 domain + const integer c_userProfile_ISUP := 49; // + const integer c_userProfile_AS1 := 51; // Isc userProfile at AS1 + const integer c_userProfile_AS2 := 52; // Isc userProfile at AS2 + + + // number of interface profile + const integer c_interfaceProfile_IMS_SUT_IBCF1 := 100; // Ic interface at IBCF1 located in SUT + const integer c_interfaceProfile_IMS_SUT_IBCF2 := 101; // Ic interface at IBCF2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF1 := 110; // Gm interface towards UE1 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF2 := 111; // Gm interface towards UE2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF := 112; // Mw interface at P-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_SCSCF := 113; // Mw interface at S-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_ICSCF := 114; // Mw interface at I-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_MGCF := 115; // Mw interface at MGCF located in SUT + + // number of service profile + const integer c_serviceProfile_EMERGENCY := 911; + const integer c_serviceProfile_EMERGENCY_INVALID := 912; + + // number of SIPURL identifiers + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_domain := 1101; // c_interfaceProfile_IMS_SUT_PCSCF1 + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_ip := 1102; // c_interfaceProfile_IMS_SUT_PCSCF1 + +} //end group UserProfileConstants + + +} //end group Constants + + + group otherTypes{ + type record ImsInterfaceProfile + { /** @desc integer for Port number to exchange SIP messages + */ + integer SUTPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring SUTIpaddr, + + /** @desc charstring for home domain to exchange SIP messages + */ + charstring SUTHomeDomain + } + } + +} // end module LibIms_SIPTypesAndValues diff --git a/LibIms/LibIms_Steps.ttcn b/LibIms/LibIms_Steps.ttcn new file mode 100644 index 0000000..eabf5bb --- /dev/null +++ b/LibIms/LibIms_Steps.ttcn @@ -0,0 +1,859 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. + */ + +module LibIms_Steps +{ + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + import from LibSip_XMLTypes all; + //LibIms + import from LibIms_Templates all; + import from LibIms_Interface all; + import from LibIms_PIXITS all; + import from LibIms_SIPTypesAndValues all; + + group externalfunctions { + } + group parameterOperations { + } + group fieldOperations { + + /* + * + * @desc setting of BYE header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to send Bye + * @verdict + */ + function f_setHeadersBYE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + + }// end f_setHeadersBYE + + /** + * + * @desc function set headers for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardRequestFromAS (inout CSeq p_cSeq_s) runs on ImsComponent + { + var Request v_request; + v_request := vc_request; + + vc_via := v_request.msgHeader.via; // TODO via header need to be adapted due to standards + + vc_route := v_request.msgHeader.route; // TODO route header need to be adapted due to standards + + }// end function f_setHeadersForwardRequest + + /** + * + * @desc function set headers for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardResponseFromAS (inout CSeq p_cSeq_s) runs on ImsComponent + { + var Response v_response; + v_response := vc_response; + + vc_via:= v_response.msgHeader.via; // TODO via header need to be adapted due to standards + + if (ispresent(v_response.msgHeader.recordRoute)) { + vc_recordRoute:= v_response.msgHeader.recordRoute; // TODO recordRoute header need to be adapted due to standards + } + }// end function f_setHeadersForwardResponse + + /* + * + * @desc setting of Invite header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to be invited + * @verdict + */ + function f_setHeadersINVITE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + if (vc_boo_route) + { vc_route := valueof(m_route_interface(vc_interfaceprofile))}; + if (vc_boo_recordRoute) + { vc_recordRoute := valueof(m_recordRoute_currIpAddr(vc_userprofile))}; + + LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); + + }// end f_setHeadersINVITE + + + /* + * + * @desc setting of Message header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to be invited + * @verdict + */ + function f_setHeadersMESSAGE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); + + }// end f_setHeadersMESSAGE + + function f_setHeadersReINVITE (inout CSeq p_cSeq_s) runs on ImsComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_to := vc_caller_To; + + vc_from := vc_caller_From; + + }// end function f_setHeadersReINVITE + + /** + * + * @desc function set headers for ReINVITE method on terminating side e.g. UE2 + */ + function f_setHeadersReINVITE_ (inout CSeq p_cSeq_s) runs on ImsComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_to := vc_callee_To; + + vc_from := vc_callee_From; + + //vc_requestUri := f_initSipUrl(p_to_user); //bpin need to be implemeted// Request URI of Invite is identical with To header + + }// end function f_setHeadersReINVITE + + /** + * + * @desc function for setting of component variables related to message header fields + * when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) + * (message type independent: CSeq, contact, via), function uses information from + * userprofile and interfaceprofile + * + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral_ICSCF(inout CSeq p_cSeq_s, in charstring p_method) runs on SipComponent + { + var SemicolonParam_List v_params; + + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method ; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + + vc_branch := c_brenchCookie & f_getRndTag(); + vc_branch_ICSCF := c_brenchCookie & f_getRndTag(); + + vc_via:={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), + valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) + } + }; + }// end function f_setHeadersGeneral_ICSCF + + /** + * + * @desc function sets header field for the next outgoing REGISTER message + * from the visited P-CSCF to the home I-CSCF + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_REGISTER_PCSCF(inout CSeq p_cSeq_s) runs on SipComponent + { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + + vc_requestUri:= + { + scheme := c_sipScheme, + userInfo := omit, + hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} + vc_from := {fieldName := FROM_E, + addressField :=vc_to.addressField, + fromParams := v_params + }; + + if(not vc_firstREGISTER_sent) + { + v_params := {{id:=c_expiresId, paramValue:=c_shortRegistration}}; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function + + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_empty(vc_userprofile) + } + + }// end function setHeaders_REGISTER_PCSCF + + } // end group fieldOperations + + group awaitingMessage { + } + group sendMessage { + } + group globalSteps { + + /* + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_userprofile(in integer p_user) runs on ImsComponent + { + LibSip_Steps.f_init_userprofile(p_user); + + select(p_user){ + case (c_userProfile_UE1atSUThome) { //variant c_userProfile_UE1atSUThome + vc_userprofile.currPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; + } + case (c_userProfile_UE2atSUThome) { //variant c_userProfile_UE2atSUThome + vc_userprofile.currPort := PX_IMS_TS_UE2_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE2_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE2_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE2_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE2_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE2_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_SUT_UE2_REGISTRAR; + } + case (c_userProfile_UE1atSUTvisiting) { //variant c_userProfile_UE1atSUTvisiting + vc_userprofile.currPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_TS_UE1_REGISTRAR; + } +// //temporary not used and it can be deleted during validation +// case (c_userProfile_UE1atSUTvisiting) { //variant c_userProfile_UE1atSUTvisiting +// vc_userprofile.currPort := PX_IMS_TS_UE2_PORT; +// vc_userprofile.currIpaddr := PX_IMS_TS_UE2_IPADDR; +// vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; +// vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; +// vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE2_BEARER_IPADDR; +// vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; +// vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; +// vc_userprofile.qop := PX_IMS_SUT_UE2_QOP; +// vc_userprofile.privUsername := PX_IMS_SUT_UE2_PRIVAT_USERNAME; +// vc_userprofile.passwd := PX_IMS_SUT_UE2_PRIVAT_PASSWD; +// vc_userprofile.registrarDomain := PX_IMS_TS_UE2_REGISTRAR; +// } + + + case (c_userProfile_IBCFwithHomeUE) { //variant c_userProfile_IBCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_IBCF_PORT; // via (Ic interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_IBCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_IBCF_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_IBCF_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + + case (c_userProfile_IBCFwithVisitingUE) { //variant c_userProfile_IBCFwithVisitingUE + vc_userprofile.currPort := PX_IMS_TS_IBCF_PORT; // via (Ic interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_IBCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_IBCF_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_IBCF_IPADDR; // contact + //vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_ICSCFwithHomeUE) { //variant c_userProfile_ICSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_ICSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_ICSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_IBCFwithUnknownUE) { //variant + vc_userprofile.currPort := PX_IMS_TS_ICSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_ICSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_PCSCFwithHomeUE) { //variant c_userProfile_PCSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_TS_IMS1UE_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_PCSCFwithVisitingUE) { //variant c_userProfile_PCSCFwithVisitingUE + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + // another visting user in IMS (cp. TP_IMST2_MW_REG_15: different public id, same private id) + case (c_userProfile_PCSCFwithVisitingUE2) { //variant + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + // unknown visting user in IMS (cp. TP_IMST2_MW_REG_16) + case (c_userProfile_PCSCFwithUnknownVisitingUE) { //variant + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_SCSCFwithHomeUE) { //variant c_userProfile_SCSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_SCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_SCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_AS1) { //variant c_userProfile_AS1 + vc_userprofile.currPort := PX_IMS_TS_AS1_PORT; // via, route(Isc interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_AS1_IPADDR; // via, route + vc_userprofile.homeDomain := PX_IMS_TS_AS1_HOME_DOMAIN; // via, route + } + + case (c_userProfile_AS2) { //variant c_userProfile_AS2 + vc_userprofile.currPort := PX_IMS_TS_AS2_PORT; // via, route(Isc interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_AS2_IPADDR; // via, route + vc_userprofile.homeDomain := PX_IMS_TS_AS2_HOME_DOMAIN; // via, route + } + } + } + + function f_initToHeader(in integer p_user) runs on ImsComponent return To + { + var To p_to := c_empty_To; + p_to := { fieldName := TO_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := f_initSipUrl(p_user) // SipUrl + }},//end addressField + toParams := omit + }; + return(p_to) + } + + + function f_initFromHeader(in integer p_user, charstring p_tag_str) runs on ImsComponent return From + { + var From p_from := c_empty_From; + p_from := { fieldName := FROM_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := f_initSipUrl(p_user) // SipUrl + }},//end addressField + fromParams := {{id := c_tagId, paramValue := p_tag_str}} + }; + return(p_from) + } + + function f_initSipUrl(in integer p_user) runs on ImsComponent return SipUrl + { + var SipUrl p_sipUrl := { + scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := omit, + urlParameters := omit, + headers := omit}; + + select(p_user){ + case (c_userProfile_UE1atSUThome) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE1_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_UE1_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_UE2atSUThome) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE2_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_UE2_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_IBCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_IMS1UE_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_ICSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_IMS1UE_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_PCSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_PCSCF_IPADDR, portField :=omit} + } + case (c_userProfile_SCSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_SCSCF_IPADDR, portField :=omit} + } + case (c_userProfile_ISUP) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_ISUP_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_ISUP_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_EMERGENCY) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_EMERGENCY_SERVICE, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_EMERGENCY_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_EMERGENCY_INVALID) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_EMERGENCY_SERVICE_INVALID, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_EMERGENCY_HOME_DOMAIN, portField :=omit} + } + + // following setting is used for the assignment of the Path header field + case (c_interfaceProfile_IMS_SUT_PCSCF1) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_HOME_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + + // following setting is used in relation to the route headers list elements + case (c_interfaceSIPURL_IMS_SUT_PCSCF1_domain) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_HOME_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + case (c_interfaceSIPURL_IMS_SUT_PCSCF1_ip) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_IPADDR, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + }; + return(p_sipUrl) + } + + + /* + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_interfaceprofile(in integer p_interface) runs on ImsComponent + { + select(p_interface){ + case (c_interfaceProfile_IMS_SUT_IBCF1) { //variant c_interfaceProfile_IMS_SUT_IBCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_IBCF2) { //variant c_interfaceProfile_IMS_SUT_IBCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF1) { //variant c_interfaceProfile_IMS_SUT_PCSCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF2) { //variant c_interfaceProfile_IMS_SUT_PCSCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF) { //variant c_interfaceProfile_IMS_SUT_PCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_SCSCF) { //variant c_interfaceProfile_IMS_SUT_SCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_SCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_SCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_SCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_ICSCF) { //variant c_interfaceProfile_IMS_SUT_ICSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_ICSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_ICSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_ICSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_MGCF) { //variant c_interfaceProfile_IMS_SUT_MGCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IMGCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IMGCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IMGCF_HOME_DOMAIN; + } + } + } + + /* + * + * @desc retrieve HostPort value of the interface profile + * @param p_interface identifies the selected interface + * @return HostPort template + */ + function f_get_interfaceHostPort (in ImsInterfaceProfile p_interface) runs on ImsComponent return /*template*/ HostPort // STS commented out template but check why in there in first place + { + return {p_interface.SUTIpaddr,p_interface.SUTPort} + } + + /* + * + * @desc retrieve DomainPort value of the interface profile + * @param p_interface identifies the selected interface + * @return DomainPort template + */ + function f_get_interfaceDomainPort (in ImsInterfaceProfile p_interface) runs on ImsComponent return /*template*/ HostPort + { + return {p_interface.SUTHomeDomain,p_interface.SUTPort} + } + + /* + * @desc retrieve SipUrl of the interface profile + * @param p_interface identifies the selected interface + * @return SipUrl template + */ + function f_get_interfaceNameAddr(in ImsInterfaceProfile p_interface) runs on ImsComponent return template NameAddr + { + return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr,p_interface.SUTPort) + } + + + } + group registration { + + /** + * + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration_IMS(inout CSeq p_cSeq_s, in boolean p_auth) runs on SipComponent + { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip + + //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + }; + }//end function f_Registration_IMS + + /** + * + * @desc awaiting UE1 registration (with authentication) + * @param p_cSeq_s cseq parameter + */ + function f_awaitingRegistration_IMS(inout CSeq p_cSeq_s) runs on SipComponent + { + + //Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, + vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, + m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization + (PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse))) + ); + + //Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes)))); + + // 200OK to complete the request + vc_contact := vc_request.msgHeader.contact; + vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2str(3600)}}; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE))); + + }//end function f_awaitingRegistration_IMS + + } // end group registration + + group preambles { + + /* + * + * @desc Set variables and default initialization for user profile where proxy role is present + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_IMS_preamble_MGCF(in integer p_userprofile, inout CSeq p_cSeq_s) runs on ImsComponent + { + vc_boo_recordRoute := true; + vc_boo_route := true; + f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); + + f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); + } + + /* + * + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_IMS_preamble_woRegistration(in integer p_userprofile, inout CSeq p_cSeq_s) runs on ImsComponent + { + //Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + //Preamble + LibIms_Steps.f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT(PX_SIP_SDP_dyn, PX_SIP_SDP_encoding)), vc_userprofile)); + + } + + /* + * + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_IMS_preamble_withRegistration (in integer p_userprofile, inout CSeq p_cSeq_s, template REGISTER_Request p_register) runs on ImsComponent + { + + //Variables & defaults initialization + f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); + + //Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact)); + } + + } // end group preambles + + group postambles { + + function f_SIP_postamble_IMS1_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + function f_SIP_postamble_IMS1_awaitDeRegistration () runs on ImsComponent + { + //Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, + vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, + m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization + (PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse))) + ); + + //Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes)))); + + // 200OK to complete the request + vc_contact := vc_request.msgHeader.contact; + vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2str(3600)}}; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE))); + + f_terminate_component() + }; + + function f_SIP_postamble_UE1_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + function f_SIP_postamble_UE2_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall_IMS(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on ImsComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, vc_route)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall + + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall_UE(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on ImsComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, vc_route)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_UE + + } + group defaults { + } +} // module LibIms_Steps diff --git a/LibIms/LibIms_Templates.ttcn b/LibIms/LibIms_Templates.ttcn new file mode 100644 index 0000000..f1ee426 --- /dev/null +++ b/LibIms/LibIms_Templates.ttcn @@ -0,0 +1,1775 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_Templates +{ + //LibCommon + import from LibCommon_DataStrings all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + + //LibIms + import from LibIms_SIPTypesAndValues all; + + import from LibIms_PIXITS all; + import from SipIsup_PIXITS all; + + template charstring m_international_number_format := pattern "\\+\d+";//pattern "\+\d+"; + + template NameAddr mw_SipUrl_SUTinterface(charstring p_host, integer p_port) := + { + displayName := *, + addrSpec := { + scheme := "sip:", + userInfo := *, + hostPort := {p_host, p_port}, + urlParameters := *, + headers := * + } + } + + template Addr_Union mw_UE1_Addr_display := {nameAddr:={displayName:=PX_IMS_SUT_UE1_DISPLAY,addrSpec:=?}}; + +group Subfields{ + + template SemicolonParam_List mw_semicolonParams_realm (template charstring p_realm) := + ?; //superset({"realm",p_realm},{"rand",?},{"autn",?},{"algorithm","AKAv1-MD5"},{"ik",?},{"ck",?}) // ERROR HERE! Superset operation must contain value list - no templates! + + template SemicolonParam_List m_semicolonParams_language (template charstring p_language):= + {{"language",p_language}} + + template SemicolonParam_List mw_semicolonParams_language (template charstring p_language):= + {{"language",p_language}} +} + +group HeaderFieldTemplates{ + + template MinSE m_minSE(DeltaSec p_ds):= + { + fieldName := MIN_SE_E, + deltaSec:=p_ds, + minSeParam:=omit + } + + template PathValue m_pathvalue (SipUrl p_sipUrl):= + { + nameAddr := {displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit + } + + template Path m_path (SipUrl p_sipUrl):= + { + fieldName := PATH_E, + pathValues := { + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit} + } + } + +/* + * @desc Path header field expectation with at least one path value + * @param p_sipUrl value of the last element in the list of path values + */ + template Path mw_path (SipUrl p_sipUrl):= + { + fieldName := PATH_E, + pathValues := {*,m_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl + } + + template PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := + { + fieldName := P_ACCESS_NETWORK_INFO_E, + accessType := "IEEE-802.11a", + genericParams := {{id:="extension-access-info",paramValue :="192.1.1.20"}} + }; + + template PAssertedService m_pAssertedService (PAssertedServiceValue p_pAssertedServiceValue):= + { + fieldName := P_ASSERTED_SERVICE_E, + pAssertedServiceValue := p_pAssertedServiceValue + }; + + template PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := + { + fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, + chargeAddrParams := {{id:="ccf",paramValue :="192.1.1.1"}, // value is fixed because it is deleted on proxy + {id:="ecf",paramValue :="192.1.1.2"}} // value is fixed because it is deleted on proxy + }; + + + template PChargingVector m_pChargingVector_fixedValue(charstring p_homeDomain) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := {{id:="icid-value", paramValue :="123abc"}, + {id:="icid-generated-at", paramValue :="192.1.1.10"}, + {id:="orig-ioi", paramValue := p_homeDomain}} + }; + template PChargingVector m_pChargingVector_fixedValue1(charstring p_homeDomain) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id:="icid-generated-at", paramValue :="192.1.1.10"}, + {id:="orig-ioi", paramValue := p_homeDomain}} + }; + + template PChargingVector mw_pChargingVector(template charstring p_id, template charstring p_paramValue) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := superset({id := valueof(p_id), paramValue := p_paramValue}) + }; + + template PMediaAuthorization m_pMediaAuthorization_fixedValue := + { + fieldName := P_MEDIA_AUTHORIZATION_E, + pMediaAuthorizations := {"A"} // example + }; + + + template PEarlyMedia m_pEarlyMedia_sup := + {fieldName := P_EARLY_MEDIA_E, em_param := {"supported"}}; + + + template ProxyRequire m_proxyRequire_secAgree := + { + fieldName := PROXY_REQUIRE_E, + optionsTags := {"sec-agree"} + }; + + template PVisitedNetworkID mw_pVisitedNetworkID := + { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := {{vNetworkSpecToken := PX_IMS_SUT_PCSCF_VisitedNetworkID, + genericParams := *}} + } + + template RecordRoute m_recordRoute_notmatching:= + { + fieldName := RECORD_ROUTE_E, + routeBody := + {{ + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber := "unknown", password := omit}, + hostPort := + { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } } + }; + + template Require m_require_secAgree := + { + fieldName := REQUIRE_E, + optionsTags := {"sec-agree"} + }; + + template Require mw_require_path := + { + fieldName := REQUIRE_E, + optionsTags := superset("path") + }; + + template Route m_route_interface (in ImsInterfaceProfile p_interfaceprofile):= + { + fieldName := ROUTE_E, + routeBody := {{nameAddr := {displayName := omit, + addrSpec := {scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := {host:=p_interfaceprofile.SUTIpaddr, portField:= p_interfaceprofile.SUTPort}, + urlParameters := omit, + headers := omit} + }, + rrParam := omit} + }}; + + template Route m_route_notmatching:= + { + fieldName := ROUTE_E, + routeBody := + {{ + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber := "unknown", password := omit}, + hostPort := + { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } } + }; + + template SessionExpires m_se(DeltaSec p_ds):= + { + fieldName := SESSION_EXPIRES_E, + deltaSec:=p_ds, + seParam:=omit + } + + template SessionExpires mw_se:= + { + fieldName := SESSION_EXPIRES_E, + deltaSec:=?, + seParam:=omit + } + + template Supported m_supported_timer:= + { + fieldName := SUPPORTED_E, + optionsTags := {"timer"} + } + + template To m_To_targetRefreshRequest(template To p_To) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := p_To.addressField.nameAddr.displayName, + addrSpec := p_To.addressField.nameAddr.addrSpec + }},//end addressField + toParams := {{id := c_tagId, paramValue := f_getRndTag()}} + }; + + template ViaBody m_ViaBody_virtualUEinPCSCF(charstring branch_val,in SipUserProfile p_userprofile) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_userprofile.contactIpaddr, portField:= p_userprofile.contactPort}, + viaParams:={{id :=c_branchId,paramValue :=branch_val}} + } + + template Via m_via_notmatching:= + { + fieldName := VIA_E, + viaBody := + {{ + sentProtocol := valueof(m_SentProtocol("UDP")), + sentBy:={host:="unknown.domain.name", portField:= 10000}, + viaParams:={{id :=c_branchId,paramValue :="abcd0000"}} + } } + }; + + /* + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template WwwAuthenticate m_wwwAuthenticate (Challenge p_challenge):= + { + fieldName := WWW_AUTHENTICATE_E, + challenge := p_challenge + } + + /* + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template WwwAuthenticate mw_wwwAuthenticate (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := WWW_AUTHENTICATE_E, + challenge := + {digestCln := p_semicolonParam_List // set of GenericParam + } + } + + + + /* + * @desc AcceptContact header field + * @param p_acValues value + */ + template AcceptContact m_acceptContact (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := ACCEPT_CONTACT_E, + acValues := {{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam + } + } + + /* + * @desc Authenticate header field + * @param p_challenge value + */ + template AcceptContact mw_acceptContact (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := ACCEPT_CONTACT_E, + acValues := + {{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam + } + } + +} // end group HeaderFieldTemplates + +group MessageBodyTemplates { + +group XMLTemplates { + + template XmlBody m_XmlBody_ConfInfo(template Conference_info p_confInfo) := + { + conferenceInfo := p_confInfo + }; + + template XmlBody m_XmlBody_PSTNTransit(template PSTN_transit p_pstn) := + { + pstnTransit := p_pstn + }; + + template XmlBody mw_XmlBody_ConfInfo(template Conference_info p_confInfo) := + { + conferenceInfo := p_confInfo + }; + + template XmlBody mw_XmlBody_PSTNTransit(template PSTN_transit p_pstn) := + { + pstnTransit := p_pstn + }; + +}// end group XMLTemplates + +group PSTNTemplates { + + template PSTN_transit m_PSTN_transit(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi}, + Display := {p_d} + } + + template PSTN_transit m_PSTN_transit_2PI(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template ProgressIndicatorType p_pi2, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi, p_pi2}, + Display := {p_d} + } + + template PSTN_transit m_PSTN_transit_3PI(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template ProgressIndicatorType p_pi2, + template ProgressIndicatorType p_pi3, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi, p_pi2, p_pi3}, + Display := {p_d} + } + + template PSTN_transit mw_PSTN_transit_bc(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {*, *}, + LowLayerCompatibility := *, + ProgressIndicator := {*}, + Display := {*} + } + + + template BearerCapabilityType m_BearerCapabilityType (template Bit5 p_InfoTrfCap):= { + BCoctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + BCoctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + BCoctet4_1 := omit, + BCoctet5 := omit, + BCoctet5a := omit, + BCoctet5bV110 := omit, + BCoctet5bV120 := omit, + BCoctet5c := omit, + BCoctet5d := omit, + BCoctet6 := omit, + BCoctet7 := omit, + BCoctet7a := omit, + BCoctet7b := omit + } + + template ProgressIndicatorType m_ProgressIndicatorType (template Bit7 p_progDesc) := { + ProgressOctet3 := {CodingStandard := bit2str('00'B), + Location := bit2str('0000'B) + }, + ProgressOctet4 := {ProgressDescription := bit2str(p_progDesc)} + } + + template LowLayerCompatibilityType m_LowLayerCompatibilityType (template Bit5 p_InfoTrfCap) := { + LLOctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + LLOctet3a := omit, + LLOctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + LLOctet4_1 := omit, + LLOctet5 := omit, + LLOctet5a := omit, + LLOctet5bV110 := omit, + LLOctet5bV120 := omit, + LLOctet5c := omit, + LLOctet5d := omit, + LLOctet6 := omit, + LLOctet6aHDLC := omit, + LLOctet6aUserSpecific := omit, + LLOctet6b := omit, + LLOctet7 := omit, + LLOctet7aUserSpecific := omit, + LLOctet7aX25 := omit, + LLOctet7bX25 := omit, + LLOctet7c := omit, + LLOctet7aTR9577 := omit, + LLOctet7bTR9577 := omit + } + + template HighLayerCompatibilityType m_HighLayerCompatibilityType + (template Bit7 p_HLOctet4):= { + HLOctet3 := { + CodingStandard :=bit2str('00'B), + Interpretation :=bit2str('100'B), + PresentationMethod := bit2str('01'B) + }, + HLOctet4 := { + HighLayerCharacteristics := bit2str(p_HLOctet4) + }, + HLOctet4aMaintenance := omit, + HLOctet4Audio := omit + } + + template BearerCapabilityType mw_BearerCapabilityType (template BCOctet3Type p_BCOctet3Type, template BCOctet4Type p_BCOctet4Type):= { + BCoctet3 := p_BCOctet3Type, + BCoctet4 := p_BCOctet4Type, + BCoctet4_1 := * , + BCoctet5 := * , + BCoctet5a := * , + BCoctet5bV110 := * , + BCoctet5bV120 := * , + BCoctet5c := * , + BCoctet5d := * , + BCoctet6 := * , + BCoctet7 := * , + BCoctet7a := * , + BCoctet7b := * + } + + template BearerCapabilityType mw_BearerCapabilityType_TrfCap (template Bit5 p_InfoTrfCap):= { + BCoctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + BCoctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + BCoctet4_1 := * , + BCoctet5 := * , + BCoctet5a := * , + BCoctet5bV110 := * , + BCoctet5bV120 := * , + BCoctet5c := * , + BCoctet5d := * , + BCoctet6 := * , + BCoctet7 := * , + BCoctet7a := * , + BCoctet7b := * + } + + template ProgressIndicatorType mw_ProgressIndicatorType (template ProgressOctet3Type p_ProgressOctet3Type, template ProgressOctet4Type p_ProgressOctet4Type) := { + ProgressOctet3 := p_ProgressOctet3Type, + ProgressOctet4 := p_ProgressOctet4Type + } + + template LowLayerCompatibilityType mw_LowLayerCompatibilityType + (template LLOctet3Type p_LLOctet3, template LLOctet4Type p_LLOctet4, template LLOctet7Type p_LLOctet7) := { + LLOctet3 := p_LLOctet3, + LLOctet3a := * , + LLOctet4 := p_LLOctet4, + LLOctet4_1 := * , + LLOctet5 := * , + LLOctet5a := * , + LLOctet5bV110 := * , + LLOctet5bV120 := * , + LLOctet5c := * , + LLOctet5d := * , + LLOctet6 := * , + LLOctet6aHDLC := * , + LLOctet6aUserSpecific := * , + LLOctet6b := * , + LLOctet7 := p_LLOctet7, + LLOctet7aUserSpecific := * , + LLOctet7aX25 := * , + LLOctet7bX25 := * , + LLOctet7c := * , + LLOctet7aTR9577 := * , + LLOctet7bTR9577 := * + } + + template HighLayerCompatibilityType mw_HighLayerCompatibilityType + (template HLOctet3Type p_HLOctet3, template HLOctet4Type p_HLOctet4):= { + HLOctet3 := p_HLOctet3, + HLOctet4 := p_HLOctet4, + HLOctet4aMaintenance := *, + HLOctet4Audio := * + } + +} //end group PSTNTemplates +} // end group MessageBodyTemplates + +group MessageTemplates { + +group modified_templates { + +group request_send { + + template BYE_Request m_BYE_Request_IMS + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + route := p_route + } + } + + template BYE_Request m_BYE_Request_Reason_IMS + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route, integer p_cause) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template BYE_Request m_BYE_Request_UE + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_Reason_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route, integer p_cause) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_UE (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + route := p_route + } + } + + template INVITE_Request m_INVITE_Request_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_Mime_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_IMS + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_mimeMultipart} + } + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template AcceptContact p_acceptContact, template PAssertedID p_pAssertedID, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + acceptContact := p_acceptContact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template PAssertedID p_pAssertedID, template Privacy p_privacy, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + privacy := p_privacy, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAssertedService_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template PAssertedService p_pAssertedService) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + pAssertedService := p_pAssertedService + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PEarlyMedia_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + pEarlyMedia := m_pEarlyMedia_sup, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template INVITE_Request m_INVITE_Request_PPreferred_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb,template PPreferredID p_pPreferredID ) + modifies m_INVITE_Request_UE + := + { + msgHeader := + { + pPreferredID := p_pPreferredID + } + } + + template INVITE_Request m_INVITE_Request_SessionExpires_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb, template SessionExpires p_se) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported, + sessionExpires := p_se + }, + messageBody := p_mb + } + + template INVITE_Request m_INVITE_Request_minSE_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb, template MinSE p_minSE) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_minSE_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template MinSE p_minSE) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + template MESSAGE_Request m_MESSAGE_Request_NoBody_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PCharging_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingVector_fixedValue(PX_IMS_SUT_UE1_HOME_DOMAIN), + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PCharging_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported, + template PChargingVector p_pChargingVector) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pMediaAuthorization := m_pMediaAuthorization_fixedValue, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PPreferred_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported, template PPreferredID p_pPreferredID) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pPreferredID := p_pPreferredID, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_TextPlainLength(valueof(m_MBody_longPlainText))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_plainText}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported + }, + messageBody := m_MBody_longPlainText + } + + template REGISTER_Request m_REGISTER_Request_UE (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization, + template ProxyRequire p_proxyRequire, template Require p_require, + template SecurityClient p_securityClient, template SecurityVerify p_securityVerify, template Supported p_supported) + modifies m_REGISTER_Request_Base := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + proxyRequire := p_proxyRequire, + require := p_require, + securityClient := p_securityClient, + securityVerify := p_securityVerify, + supported := p_supported, + toField := p_to, + via := p_via + + } + } + + + template REGISTER_Request m_REGISTER_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization) + modifies m_REGISTER_Request_Base := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + + } + } + template REGISTER_Request m_REGISTER_Request_expires_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization, template DeltaSec p_deltaSec) + modifies m_REGISTER_Request_IMS := + { + msgHeader := + { + expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec} + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_UE (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact) modifies m_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + event := m_Event_reg, + expires := m_Expires_600000 + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact) modifies m_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := + { + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + event := m_Event_reg, + expires := m_Expires_600000 + } + } + +}//end group request_send + +group request_receive { + + template ACK_Request mw_ACK_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + + template ACK_Request mw_ACK_Request_PchargingVector (template CallId p_callId, template PChargingVector p_pChargingVector) + modifies mw_ACK_Request_Base + := + { + msgHeader := { pChargingVector := p_pChargingVector} + } + + template BYE_Request mw_BYE_Request_noPChargingFunction_UE(template CallId p_callId) modifies mw_BYE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template BYE_Request mw_BYE_Request_via_PChargingVector_UE(template CallId p_callId, template PChargingVector p_pChargingVector, template Via p_via) modifies mw_BYE_Request_Base + := + { + msgHeader := {pChargingVector := p_pChargingVector, + via := p_via} + } + + template INVITE_Request mw_INVITE_Request_noPChargingFunction modifies mw_INVITE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := omit} + } + template INVITE_Request mw_INVITE_Request_PChargingFunction modifies mw_INVITE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := ?} + } + + template INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred (template PAssertedID p_pAssertedID)modifies mw_INVITE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact (template PAssertedID p_pAssertedID, template AcceptContact p_acceptContact) modifies mw_INVITE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + acceptContact := p_acceptContact + } + } + + template INVITE_Request mw_INVITE_Request_RecordRoute_Via (template RecordRoute p_recordRoute, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := {recordRoute := p_recordRoute, + via := p_via} + } + + template INVITE_Request mw_INVITE_Request_route (template Route p_route) modifies mw_INVITE_Request_Base + := + { + msgHeader := {route := p_route} + } + + + template INVITE_Request mw_INVITE_Request_SessionExpires (template SessionExpires p_sessionExpires) modifies mw_INVITE_Request_Base + := + { + msgHeader := {sessionExpires := p_sessionExpires} + } + + template INVITE_Request mw_INVITE_Request_IMS (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template INVITE_Request mw_INVITE_Request_IMS_mb (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + }, + messageBody := ? + } + + template INVITE_Request mw_INVITE_Request_IMS_pstn (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via, template PSTN_transit p_pstn ) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + }, + messageBody := (mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)))//m_MBody_PSTN(p_pstn)//PSTN_transit + } + + /* + * + * @desc Await INVITE using topology hiding + */ + template INVITE_Request mw_INVITE_Request_TH modifies mw_INVITE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + + + template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred (template CallId p_callId, template PAssertedID p_pAssertedID)modifies mw_MESSAGE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template MESSAGE_Request mw_MESSAGE_Request_PchargingVector (template CallId p_callId,template charstring p_id, template charstring p_paramValue) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingVector := mw_pChargingVector(p_id,p_paramValue)} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pMediaAuthorization := omit} + } + + template PUBLISH_Request mw_PUBLISH_Request_PchargingVector(template CallId p_callId, template PChargingVector p_pChargingVector) modifies mw_PUBLISH_Request_Base := + { + msgHeader := { pChargingVector := p_pChargingVector} + } + + template REGISTER_Request mw_REGISTER_Request_IMS (template Path p_Path, template PChargingVector p_pChargingVector, template PVisitedNetworkID p_pVisitedNetworkID) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := ?, + path := p_Path, + pChargingVector := p_pChargingVector, //mw_pChargingVector(p_id,p_paramValue) + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + securityClient := omit, + securityVerify := omit + } + } + + + + template REGISTER_Request mw_REGISTER_authorizedRequest_IMS (template Authorization p_authorization) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := p_authorization + } + } + + template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS (template Authorization p_authorization) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := p_authorization, + securityClient := omit + } + } + template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { securityVerify := omit, + securityClient := omit + } + } + + template REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := omit + } + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS (template From p_from, To p_to, template PAssertedID p_pAssertedID, template PChargingVector p_pChargingVector) modifies mw_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E + }, + msgHeader := + { fromField := p_from, + toField := p_to, + event := m_Event_reg, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pChargingVector := p_pChargingVector + } + } + +}//end group request_receive +group response_send +{ + template Response m_Response_2xxonBYE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_18XonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + //contact := p_contact, + //maxForwards := omit, + //rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + template Response m_Response_18XonINVITE_sdp_require (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb,template Require p_require ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + require := p_require, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + }, + messageBody := p_mb + } + + template Response m_Response_18XonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + + template Response m_Response_18XonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via ) modifies m_Response_Base:= + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + + } + } + + template Response m_Response_18XonINVITE_pEearlyMedia (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PEarlyMedia p_pEarlyMedia ) modifies m_Response_Base:= + { + msgHeader := + { + pEarlyMedia := p_pEarlyMedia + } + } + + + template Response m_Response_18XonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + pPreferredID := p_pPreferredID, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + template Response m_Response_18XonINVITE_recordRoute_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999},//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + recordRoute := p_recordRoute//for INVITE response + } + } + + template Response m_Response_18XonINVITE_Xml (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_xmlAplication}, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_Mime (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_mimeMultipart}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via,MessageBody p_mb ) modifies m_Response_mbody := + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + + } + } + + template Response m_Response_2XXonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID, template RecordRoute p_recordRoute, template MessageBody p_mb) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + pPreferredID := p_pPreferredID, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonREGISTER_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, SipUrl p_serviceroute_sip_url) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + serviceRoute := {fieldName:=SERVICE_ROUTE_E, + routeBody:={{ nameAddr:= {displayName:=omit,addrSpec:=p_serviceroute_sip_url},rrParam:=omit}}} + } + } + + + template Response m_Response_2xxonSUBSCRIBE_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact + } + } + + + template Response m_Response_2xxonSUBSCRIBE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact + } + } + + template Response m_Response_onMESSAGE_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + contact := p_contact + } + } + + template Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a + } + } + + template Response m_Response_2xxonMESSAGE_PCharging_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + } + } + + + template Response m_Response_2xxonMESSAGE_PCharging_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template Response m_Response_2xxonMESSAGE_PMediaAuth_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template Response m_Response_2xxonMESSAGE_pPreferredID_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PPreferredID p_pPreferredID) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pPreferredID := p_pPreferredID + } + } + + template Response m_Response_2xxonUPDATE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute + }, + messageBody := p_mb + } + + template Response m_Response_4XXonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_4XXonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_WWWauthenticate_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template WwwAuthenticate p_wwwAuthenticate) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + wwwAuthenticate := p_wwwAuthenticate + } + } + +}//end group response_send + +group response_receive +{ + + template Response mw_Response_200onINVITE_noPChargingVector_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingVector := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPCharging_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPCharging_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + + template Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAccessNetworkInfo := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pMediaAuthorization := omit + } + } + + template Response mw_Response_401onREGISTER_securityServer_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + securityServer := ?, + wwwAuthenticate := ? + } + } + + template Response mw_Response_401onREGISTER_WWWauthenticate_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template WwwAuthenticate p_wwwAuthenticate) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + wwwAuthenticate := p_wwwAuthenticate + } + } + + template Response mw_Response_200onREGISTER_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template SipUrl p_ue_uri, template Contact p_contact, template SipUrl p_sut_scscf_uri) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAssociatedURI := {fieldName := P_ASSOCIATED_URI_E, nameAddrList:={*,{nameAddr:={displayName:=*,addrSpec:=p_ue_uri},genericParams:=*},*}}, + path := ?, + serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={displayName:=*,addrSpec:=p_sut_scscf_uri},rrParam:=*}}}, + pChargingFunctionAddresses := ?, + pChargingVector := ?, + contact := p_contact + } + } + + template Response mw_Response_PpreferredID_PassertedID(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template PPreferredID p_pPreferredID, template PAssertedID p_pAssertedID) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAssertedID := p_pAssertedID, + pPreferredID := p_pPreferredID + } + } + + template Response mw_Response_PchargingVector(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template PChargingVector p_chargingVector) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingVector := p_chargingVector // mw_pChargingVector(p_id,p_paramValue) + } + } + +} // end response_receive + +}//end modified_templates + +}//end Message_templates + +} // end module LibIms_Templates diff --git a/LibSip/LibSip_Interface.ttcn b/LibSip/LibSip_Interface.ttcn new file mode 100644 index 0000000..cd55e33 --- /dev/null +++ b/LibSip/LibSip_Interface.ttcn @@ -0,0 +1,175 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibSip_Interface +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + + import from LibSip_PIXITS all; + //AtsIms + import from SipIsup_PIXITS all; + //LibIms + import from LibIms_SIPTypesAndValues all; + + group AdressTypes + { + type record address4SIP + { + //HostPort + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } with { encode "SIPCodec" } + + type address4SIP address; + +// type address WorkaroundAddress; //Remove it later + }// end group AdressTypes + + type port SipPort message { + inout Request, + REGISTER_Request, + INVITE_Request, + OPTIONS_Request, + BYE_Request, + CANCEL_Request, + ACK_Request, + PRACK_Request, + NOTIFY_Request, + SUBSCRIBE_Request, + PUBLISH_Request, + UPDATE_Request, + REFER_Request, + MESSAGE_Request, + INFO_Request, + Response, + Raw } with { extension "address" }; + + signature s_SIP_conversation (in charstring text, out boolean answer); + signature s_SIP_ringing (in charstring text, out boolean answer); + type port operatorPort procedure {inout s_SIP_conversation; inout s_SIP_ringing}; + + // Solution for building error problem. (Important for validation) + //type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module + //With this solution TAU compiler error. +// type component ImsComponent extends SipComponent +// { +// // general variables +// var ImsInterfaceProfile vc_interfaceprofile +// } // end ImsComponent + + type component SipComponent + { + //port + port SipPort SIPP; + // used for communication with the operator + port operatorPort opPort; + + // current address to send TCP/UDP messages + var SipUserProfile vc_userprofile; // PIXIT userinformation + var address vc_sent_label := {host := PX_SIP_SUT_IPADDR, portField := PX_SIP_SUT_PORT}; + + // last incoming message + var Response vc_response; // last incoming response message + var boolean vc_boo_response := false; // to check if response received or not + var Request vc_request; // last incoming request message + var boolean vc_boo_request := false; // to check if request received or not + var Request vc_requestFor407; // last INVITE request to be authorized if 407/401 received from Proxy + + var SipUrl vc_requestUri := c_empty_RequestUri; + var charstring vc_branch := ""; + var charstring vc_branch_ICSCF := ""; + var charstring vc_branch_SCSCF := ""; + + // SIP message header fields (for building next message) + var CallId vc_callId := c_empty_CallId; + var CallId vc_callIdReg := c_empty_CallId; + var From vc_from := c_empty_From; + var To vc_to := c_empty_To; + var To vc_cancel_To := c_empty_To; // used for next CANCEL + var Via vc_via := c_empty_Via; + var Via vc_via_REG := c_empty_Via; // via used in last REGISTER + + var RecordRoute vc_recordRoute; // value of RecordRoute header + var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute + var Route vc_route; // value of Route header + var boolean vc_boo_route := false; // boolean indicates valid Route + + var Contact vc_contact; // value of Contact header + var CSeq vc_cSeq := c_empty_cSeq; // value of CSeq header + var RAck vc_rAck := { fieldName := RACK_E, responseNum := 1, seqNumber := 1, method := "INVITE"}; // value of RAck header + var HostPort vc_reqHostPort := {host:=PX_SIP_SUT_IPADDR, portField:=PX_SIP_SUT_PORT}; // address to send request + var Privacy vc_privacy; + var HistoryInfo_List vc_historyInfoList := {}; // value of history list according to RFC4244 + var SipUrl vc_confURI; // conference URI according to TS124147 ch. 5.3.1.3.2 + var SDP_Message vc_sdp_remote; // incoming SDP offers + var SDP_Message vc_sdp_local; // SDP values to be sent + var XmlBody vc_xml_remote; // incoming XML value + var XmlBody vc_xml_local; //SDP values to be sent + + var CSeq vc_iut_CSeq := c_empty_cSeq; // value of last CSeq header used by the IUT in request + // To/From header-fields to be used if the callee will release the session + var To vc_callee_To := c_empty_To; + var From vc_callee_From := c_empty_From; + // To/From header-fields to be used if the caller will release the session + var To vc_caller_To := c_empty_To; + var From vc_caller_From := c_empty_From; + var Authorization vc_authorization; + + // variables for storing default references + var default vc_default; + var default vc_def_catchSyncStop; + + // general timers + timer tc_T1 := PX_SIP_T1; + timer tc_Tf := PX_SIP_TF; + timer tc_wait := PX_SIP_TWAIT; + timer tc_ack := PX_SIP_TACK; + timer tc_resp := PX_SIP_TRESP; + timer tc_noAct := PX_SIP_TNOACT; // time for SUT to get idle state +// timer TRept; +// timer TSync := PX_SIP_TSYNC; +// timer TGuard := PX_SIP_TGUARD; + timer tc_tDelay := 32.0; + + var float vc_tcRESP := PX_SIP_TRESP; // standard value for TRESP (may be modified in particular tests) + + // indicators set/used parameter status or state handling in default + var boolean vc_sdp_remote_is_valid := false; // true if there is a value in v_SDP_remote + var boolean vc_history_is_valid := false; // true if there is a HistoryList in response message + var boolean vc_send_SDP := false; // send SDP in the next outgoing message + var boolean vc_ignore_bye := false; // enable ignore of repeated bye in default + var boolean vc_ignore_invite := false; // enable ignore invite in default + var boolean vc_ignore181 := false; // enable ignore of 181 in default + var boolean vc_ignore484 := false; // enable ignore of 484 in default + var boolean vc_ignore4xx := false; // enable ignore of 4xx in default + var boolean vc_ignore200OKinv := false; // enable ignore of 200OKinv in default + var boolean vc_supported_100rel := false; // true if the received invite contains 100rel + var boolean vc_supported_precondition:= false; // true if the received invite contains precondition + var boolean vc_MESSAGEreceived := false; // true if MESSAGE received during altstep + var boolean vc_first_recv := false; // true after receipt of first incomming SIP message + var boolean vc_firstREGISTER_sent := false; // true after sent of first REGISTER message + + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack := c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + +// // used for communication with the operator +// port operatorPort_SIP opPort; + + } // end SipComponent + +} // end module AtsIms_TestSystem diff --git a/LibSip/LibSip_PIXITS.ttcn b/LibSip/LibSip_PIXITS.ttcn new file mode 100644 index 0000000..c664cfa --- /dev/null +++ b/LibSip/LibSip_PIXITS.ttcn @@ -0,0 +1,364 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + * NOTE: PIXITS in folowing groups can be ignored if this information + * is provided in other modules of the ATS that uses this SIP library + * - Ports_and_addresses_of_the_SUT + * - PortsAndAddressesOfTheTS1 + * - PortsAndAddressesOfTheTS2 + * - PortsAndAddressesOfTheTS3 + * - ParametersForHTTP_Authentication + */ + +module LibSip_PIXITS +{ + //LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + +// _____________________________ PIXIT-S_______________________________ + group SIP_PIXITparameters{ + group SDPParameter { + modulepar { + + /** @desc charstring for SDP dynamic port + */ + charstring PX_SIP_SDP_dyn := "0"; + + /** @desc charstring for SDP bandwidth modifier + */ + charstring PX_SIP_SDP_b_modifier := "AS"; + + /** @desc integer for SDP bandwidth value + */ + integer PX_SIP_SDP_b_bandwidth := 64; + + /** @desc charstring for SDP media attribute encoding supported by the IUT + */ + charstring PX_SIP_SDP_encoding := "PCMU/8000"; + + /** @desc charstring for SDP media attribute encoding unavailable by the IUT + */ + charstring PX_SIP_SDP_encoding_unavail := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 + + /** @desc charstring for SDP media attribute encoding unsupported by the IUT + */ + charstring PX_SIP_SDP_encoding_unsup := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 + + /** @desc charstring for SDP media T.38 transport (used in TC2101_IS___AU__09) + */ + charstring PX_SIP_SDP_transport := "udptl"; + } // modulepar + } //group SDP Parameter + + group ISUPinterworkingParameters{ + modulepar { + /** @desc charstring for Used CPC language + */ + charstring PX_SIP_ISUP_LANGUAGE := "English"; + /** @desc charstring for Used CPC language + */ + charstring PX_SIP_ISUP_CPC_VALUE := "prison"; + }//modulepar + } // goup PSTNParameters + + group SupportedOptions{ + modulepar { + + /** @desc boolean for True if 100rel mechanism is supported in SIP + */ + boolean PX_SIP_100rel := false; + + /** @desc boolean for True if precondition mechanism is supported in SIP + */ + boolean PX_SIP_precondition := false; + + /** @desc boolean for True if UDP Transport is used by the IUT to run campaign + */ + boolean PX_SIP_UDP := true; + + /** @desc charstring for Used Transport in upper case "UDP"/"TCP" + */ + charstring PX_SIP_TRANSPORT := "UDP"; + }//modulepar + }// group SupportedOptions{ + + // PIXITS in group Ports_and_addresses_of_the_SUT can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group Ports_and_addresses_of_the_SUT{ + modulepar{ + + /** @desc integer for SUT port number to exchange SIP messages + */ + integer PX_SIP_SUT_PORT := 5060; + + /** @desc charstring for SUT IP address to exchange SIP messages + */ + charstring PX_SIP_SUT_IPADDR := "172.27.16.115"; + + /** @desc charstring for SUT domain + */ + charstring PX_SIP_SUT_HOME_DOMAIN := "172.27.16.115"; + + /** @desc charstring for unknown SUT domain + */ + charstring PX_SIP_SUT_HOME_DOMAIN_UNKNOWN := "172.88.88.88"; + + } //modulepar + } + + // PIXITS in group PortsAndAddressesOfTheTS1 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS1 { +// Ports and addresses of the TS1 (tester), first access + modulepar { + /** @desc integer for port number used by the TS1 to exchange SIP messages + */ + integer PX_SIP_TS1_PORT := 5060; + + /** @desc charstring for IP address used by the TS1 to exchange SIP messages + */ + charstring PX_SIP_TS1_IPADDR := "172.27.1.218"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS1_LOCAL_DOMAIN := "172.27.1.218"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS1_LOCAL_USER := "2910"; + + /** @desc charstring for identity of the user with active call diversion service + */ + charstring PX_SIP_TS1_LOCAL_USER_DIV := "2907"; + + /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) + */ + charstring PX_SIP_TS1_LOCAL_USER_FULL := "+ 33492941111"; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS1_BEARER_PORT := 52000; + + /** @desc charstring for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS1_BEARER_PORT2 := 62000; + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring PX_SIP_TS1_BEARER_IPADDR := "172.27.1.218"; + }//modulepar + }// group PortsAndAddressesOfTheTS + + // PIXITS in group PortsAndAddressesOfTheTS2 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS2 { +// Ports and addresses of the TS2 (tester), second access + modulepar { + + /** @desc integer for port number used by the TS2 to exchange SIP messages + */ + integer PX_SIP_TS2_PORT := 5060; + + /** @desc charstring for IP address used by the TS2 to exchange SIP messages + */ + charstring PX_SIP_TS2_IPADDR := "172.27.1.219"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS2_LOCAL_DOMAIN := "172.27.1.219"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS2_LOCAL_USER := "2911"; + + /** @desc charstring for identity of the user with active call diversion service + */ + charstring PX_SIP_TS2_LOCAL_USER_DIV := "2011"; + + /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) + */ + charstring PX_SIP_TS2_LOCAL_USER_FULL := "+ 33 4 92941111"; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS2_BEARER_PORT := 53000; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS2_BEARER_PORT2 := 63000; + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring PX_SIP_TS2_BEARER_IPADDR := "172.27.1.218"; + + } // modulepar + }//group PortsAndAddressesOfTheTS2 + + // PIXITS in group PortsAndAddressesOfTheTS3 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS3 { +// Ports and addresses of the TS3 (tester), second access + modulepar{ + /** @desc integer for Port number used by the TS3 to exchange SIP messages + */ + integer PX_SIP_TS3_PORT := 5060; + + /** @desc charstring for IP address used by the TS3 to exchange SIP messages + */ + charstring PX_SIP_TS3_IPADDR := "172.27.1.220"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS3_LOCAL_DOMAIN := "172.27.1.220"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS3_LOCAL_USER := "2012"; + + } //modulepar + } //group PortsAndAddressesOfTheTS3 + + group RegistrationParameters { + modulepar { + + /** @desc boolean for the SIP user if it have to register itself before executing a test case + */ + boolean PX_SIP_REGISTRATION := false; + + /** @desc integer for the minimun SIP user registration expires-value + */ + integer PX_SIP_REGISTRATION_exp_min := 3600; + + /** @desc charstring for REGISTRAR domain + */ + charstring PX_SIP_SUT_REGISTRAR_DOMAIN := "172.27.16.115"; + }// modulepar + }// group Registration parameters + + group ReleaseCause{ + modulepar { + /** @desc integer for Release cause to be used in BYE and in Failure messages + */ + integer PX_SIP_BYE_CAUSE := 16; + }//modulepar + }//group ReleaseCause + + group RTPStreamControlAndCheck{ + modulepar { + /** @desc boolean for True, if conversation check is implemented. + */ + boolean PX_SIP_CheckConversation := false; + + /** @desc boolean for True, if DTMF check is implemented. + */ + boolean PX_SIP_CheckDTMF := false; + + /** @desc boolean for True, if Announcement sending is implemented. + */ + boolean PX_SIP_SendAnnouncement := false; + + /** @desc boolean for True, if ringing check is implemented. + */ + boolean PX_SIP_CheckRinging := false; + }//modulepar + }//group RTPStreamControlAndCheck + + group SwitchToEnableAuthentication { + modulepar{ + /** @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages + */ + boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; + + /** @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages + */ + boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; + } + } + + // PIXITS in group ParametersForHTTP_Authentication can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group ParametersForHTTP_Authentication { + modulepar{ + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_SIP_SUT_UE1_QOP := "auth"; + + /** @desc charstring for RFC 2617 3.2.2 username + * The name of user in the specified realm + */ + charstring PX_SIP_SUT_UE1_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring PX_SIP_SUT_UE1_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_SIP_SUT_UE2_QOP := "auth"; + + /** @desc charstring for RFC 2617 3.2.2 username + * The name of user in the specified realm + */ + charstring PX_SIP_SUT_UE2_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring PX_SIP_SUT_UE2_PASSWD := "1234"; + + }//modulepar + }//group ParametersForHTTP_Authentication + + group SIP_Timers { + modulepar { + /** @desc float for T1 RTT estimate (500 ms) + */ + float PX_SIP_T1 := 0.5; + + /** @desc float for T2 Maximum retransmit interval for non-INVITE requests and INVITE response (4000 ms) + */ + float PX_T2 := 4.0; + + /** @desc float for T4 Maximum duration a message will remain in the network + */ + float PX_T4 := 1.0; + + /** @desc float for TDELAY default value for timeout on outgoing SIP request (ie 64*T1) + */ + float PX_SIP_TF := 32.0; + + /** @desc float for TWait default value for waiting an operator action + */ + float PX_SIP_TWAIT := 30.0; + + /** @desc float for TAck default value for waiting an acknowledgement + */ + float PX_SIP_TACK := 8.0; + + /** @desc float for TResp default value for waiting for a response from the IUT + */ + float PX_SIP_TRESP := 15.0; + + /** @desc float for TNoAct default value for waiting no message from the IUT + * Value given for PX_TNOACT should be less than value of + * SHORT_REGISTRATION constant (which is currently "3" (seconds)) + */ + float PX_SIP_TNOACT := 1.0; + + /** @desc float for TSYNC default value to synchronise ptc + */ + float PX_SIP_TSYNC := 10.0; + + /** @desc float for TGUARD default value for an extra long timer to limit test execution + */ + float PX_SIP_TGUARD := 120.0; + + /** @desc float for TRespRetention minimum time that a Proxy will wait before sending a final response + */ + float PX_TRespRetention := 1.0; + }//modulepar + }//group SIP_Timers + } //group SIP_PIXITparameters +} // end module LibSip_PIXITS diff --git a/LibSip/LibSip_SDPTypes.ttcn b/LibSip/LibSip_SDPTypes.ttcn new file mode 100644 index 0000000..9ee80e1 --- /dev/null +++ b/LibSip/LibSip_SDPTypes.ttcn @@ -0,0 +1,301 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the SDP type system for SIP tests. + * Module become from STF306 and STF334-336 + */ + +module LibSip_SDPTypes +{ + group Constants + { + group SimpleConstants + { + // SDP net_type + const charstring c_in := "IN"; + + // SDP addr_type + const charstring c_ip4 := "IP4"; + + //SDP_media_desc: media + const charstring c_audio := "audio"; + const charstring c_image := "image"; + const charstring c_video := "video"; + + //SDP_media_desc: transport + const charstring c_rtpAvp := "RTP/AVP"; + const charstring c_udptl := "Udptl"; + + //SDP_attribute_list constants: + const charstring c_local := "local"; + const charstring c_mandatory := "mandatory"; + const charstring c_none := "none"; + const charstring c_qos := "qos"; + const charstring c_remote := "remote"; + const charstring c_sendrecv := "sendrecv"; + } + } + group Types + { + group SubTypes + { + group AttributeTypes + { + type record SDP_attribute_cat { + charstring attr_value + } + + type record SDP_attribute_keywds { + charstring attr_value + } + + type record SDP_attribute_tool { + charstring attr_value + } + + type record SDP_attribute_ptime { + charstring attr_value + } + + type record SDP_attribute_recvonly { + } + + type record SDP_attribute_sendrecv { + } + + type record SDP_attribute_sendonly { + } + + type record SDP_attribute_inactive { + } + + type record SDP_attribute_orient { + charstring attr_value + } + + type record SDP_attribute_type { + charstring attr_value + } + + type record SDP_attribute_charset { + charstring attr_value + } + + type record SDP_attribute_sdplang { + charstring attr_value + } + + type record SDP_attribute_lang { + charstring attr_value + } + + type record SDP_attribute_framerate { + charstring attr_value + } + + type record SDP_attribute_quality { + charstring attr_value + } + + type record SDP_attribute_fmtp { + charstring attr_value + } + + type record SDP_attribute_curr { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_des { + charstring preconditionType, + charstring strength, + charstring statusType, + charstring direction + } + + type record SDP_attribute_conf { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_rtpmap { + charstring attr_value + } + + type record SDP_attribute_rtcp { + charstring attr_value + } + + type record SDP_attribute_unknown { + charstring name, + charstring attr_value optional + } + + + type union SDP_attribute { + SDP_attribute_cat cat, + SDP_attribute_keywds keywds, + SDP_attribute_tool tool, + SDP_attribute_ptime ptime, + SDP_attribute_recvonly recvonly, + SDP_attribute_sendrecv sendrecv, + SDP_attribute_sendonly sendonly, + SDP_attribute_inactive inactive, + SDP_attribute_orient orient, + SDP_attribute_type sdp_type, + SDP_attribute_charset charset, + SDP_attribute_sdplang sdplang, + SDP_attribute_lang lang, + SDP_attribute_framerate framerate, + SDP_attribute_quality quality, + SDP_attribute_fmtp fmtp, + SDP_attribute_curr curr, + SDP_attribute_des des, + SDP_attribute_conf conf, + SDP_attribute_rtpmap rtpmap, + SDP_attribute_rtcp rtcp, + + // unknown has to be the last else encoding/decoding won't work! + SDP_attribute_unknown unknown + } + } // group AttributeTypes + + type set of SDP_attribute SDP_attribute_list; + + type record SDP_bandwidth { + charstring modifier, + integer bandwidth + } + + type set of SDP_bandwidth SDP_bandwidth_list; + + type record SDP_connection { + charstring net_type, + charstring addr_type, + SDP_conn_addr conn_addr + } + + type record SDP_conn_addr { + charstring addr, + integer ttl optional, + integer num_of_addr optional + } + + type set of SDP_connection SDP_connection_list; + + type record SDP_contact { + charstring addr_or_phone, + charstring disp_name optional + } + + type SDP_contact SDP_contact_tel; + + type SDP_contact SDP_contact_email; + + type set of SDP_contact_email SDP_email_list; + + type record of charstring SDP_fmt_list ; + + type record SDP_key { + charstring method, + charstring key optional + } + + type record SDP_media_desc { + SDP_media_field media_field, + charstring information optional, + SDP_connection_list connections optional, + SDP_bandwidth bandwidth optional, + SDP_key key optional, + SDP_attribute_list attributes optional + } + + type set of SDP_media_desc SDP_media_desc_list; + + type record SDP_media_port { + integer port_number, + integer num_of_ports optional + } + + type record SDP_media_field { + charstring media, + SDP_media_port ports, + charstring transport, + SDP_fmt_list fmts + } + + type record SDP_time{ + SDP_time_field time_field, + SDP_repeat_list time_repeat optional + } + + type record SDP_time_field{ + // due to the limitation of integer value a charstring shall be used + // to represent 32 bit long unsigned int + charstring start_time, + charstring stop_time + } + + type record SDP_repeat{ + SDP_typed_time repeat_interval, + SDP_typed_time active, + SDP_typed_time_list offsets + } + + type set of SDP_repeat SDP_repeat_list; + + type record SDP_typed_time{ + integer time, + charstring unit optional + } + + type set of SDP_typed_time SDP_typed_time_list; + + type set of SDP_time SDP_time_list; + + type record SDP_timezone{ + charstring adjustment_time, + SDP_typed_time offset + } + + type set of SDP_timezone SDP_timezone_list; + + type record SDP_Origin{ + charstring user_name, +// the following 2 fields are numeric strings that may not fit into 32-bit signed int + charstring session_id, + charstring session_version, + charstring net_type, + charstring addr_type, + charstring addr + } + + type set of SDP_contact_tel SDP_phone_list; + } // group SubTypes + + + group MessageTypes + { + type record SDP_Message{ + integer protocol_version, + SDP_Origin origin, + charstring session_name, + charstring information optional, + charstring uri optional, + SDP_email_list emails optional, + SDP_phone_list phone_numbers optional, + SDP_connection connection optional, + SDP_bandwidth_list bandwidth optional, + SDP_time_list times, + SDP_timezone_list timezone_adjustments optional, + SDP_key key optional, + SDP_attribute_list attributes optional, + SDP_media_desc_list media_list optional + }// with { encode "SDPCodec" } + } // group MessageTypes + } // group Types + + +} //end module LibSip_SDPTypes diff --git a/LibSip/LibSip_SIPTypesAndValues.ttcn b/LibSip/LibSip_SIPTypesAndValues.ttcn new file mode 100644 index 0000000..290de8c --- /dev/null +++ b/LibSip/LibSip_SIPTypesAndValues.ttcn @@ -0,0 +1,1658 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types and constants used by the test component + * for SIP tests. Module become from STF306 and STF334-336 + */ + +module LibSip_SIPTypesAndValues +{ + // SipAts + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + +group Constants +{ +group SimpleConstants + { + // SIP name protocol plus version + const charstring c_sipNameVersion := "SIP/2.0"; + + // SIP name protocol + const charstring c_sipName := "SIP"; + + // SIP version + const charstring c_sipVersion := "2.0"; + + // SIP scheme + const charstring c_sipScheme := "sip"; + + // TEL scheme + const charstring c_telScheme := "tel"; + + // TAG_ID + const charstring c_tagId := "tag"; + + // BRANCH_ID + const charstring c_branchId := "branch"; + + // BRANCH_COOKIE + const charstring c_brenchCookie := "z9hG4bK"; + + // EXPIRES_ID + const charstring c_expiresId := "expires"; + + // MADDR_ID + const charstring c_maddrId := "maddr"; + + // METHOD_ID + const charstring c_methodId := "method"; + + // RECEIVED_ID + const charstring c_receivedId := "received"; + + // TTL_ID + const charstring c_ttlId := "ttl"; + + // USER_ID + const charstring c_userId := "user"; + + // SDP name application + const charstring c_sdpAplication := "application/sdp"; + + // XML name application + const charstring c_xmlAplication := "application/xml"; + + // MIME name application + const charstring c_mimeMultipart := "multipart/mixed"; + + // OCTET-STREAM name application + const charstring c_octetAplication := "application/octet-stream"; + + // PLAIN-TEXT name application + const charstring c_plainText := "text/plain"; + + //text content of 1300 bytes for messages with message body + const charstring c_longMessageContent_1300Bytes := + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; + + + // Default SIP port number : 5060 + const integer c_defaultSipPort := 5060; + + // Default SIP protocol : UDP + const charstring c_defaultSipProt := "UDP"; + + // Fixed IP multicast address + const charstring c_mcastSipIpaddr := "224.0.1.75"; + + // Short delta-second used in expires parameter to acknowledge a registration + const charstring c_shortRegistration := "3600"; + + // option tag 100rel (reliable provisional response [RFC3262]) + const charstring c_tag100rel := "100rel"; + + // option tag precondition (ch.11 [RFC3312]) + const charstring c_tagPrecond := "precondition"; + + // due to problem with TAU compiler because hardcoded return statement constant is created + const HostPort c_hostport_dummy := {host:="", portField:=c_defaultSipPort}; + + // CLIP/CLIR information + const PrivacyValue c_privacy_none := "none"; + const PrivacyValue c_privacy_id := "id"; + const PrivacyValue c_privacy_header := "header"; + const PrivacyValue c_privacy_user := "user"; + + // @ (at) sign + const charstring c_AT := "@"; + + // * (wildchard) sign + const charstring c_WILDCARD := "*"; + + const integer c_CRlen := 2; // length of new line (0d0a) + + const GenericParam c_Integrity_protected_yes := {"Integrity protected","yes"} + const GenericParam c_Integrity_protected_no := {"Integrity protected","no"} + +} //end group SimpleConstants + +group AuthorizationConstants { + + const charstring c_ik := ""; + const charstring c_ck := ""; + const charstring c_algorithm := "MD5"; + const charstring c_nonce := "" + +} //end group AuthorizationConstants + +group HeaderFieldConstants { + + const CallId c_empty_CallId := + { + fieldName := CALL_ID_E, + callid := "" + }; + + const CSeq c_empty_cSeq := { + fieldName := CSEQ_E, + seqNumber:=0, + method:="" }; + + const From c_empty_From := { + fieldName := FROM_E, + addressField := {nameAddr := + {displayName := omit, + addrSpec := { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + } + } + }, + fromParams := omit + }; + + const MaxForwards c_maxForwards70 := {fieldName:=MAX_FORWARDS_E, forwards:=70} + + const SipUrl c_empty_RequestUri := + { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + }; + + const To c_empty_To := + { // value of To header + fieldName := TO_E, + addressField := + { + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + } + } + }, + toParams := omit + }; + + const Via c_empty_Via := { + fieldName := VIA_E, + viaBody :={ + {sentProtocol := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := c_defaultSipProt + }, + sentBy := {host:="", portField:=c_defaultSipPort}, + viaParams:= omit + } + }}; + + +} + + +group UserProfileConstants +{ + // number of user profile from 1-10 for SIP profile + const integer c_userProfile_SIP1_home := 1; + const integer c_userProfile_SIP2_home := 2; + +} //end group UserProfileConstants + +group StatusLines + { + const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; + const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; + const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call is Being Forwarded"}; + const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; + const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; + + const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; + + const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multible Choices"}; + const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; + const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Move Temporarily"}; + const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; + const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; + + const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; + const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorised"}; + const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; + const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; + const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; + const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Alllowed"}; + const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Accetable"}; + const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy authentication required"}; + const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; + const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; + const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity too long"}; + const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-uri too long"}; + const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media type"}; + const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI scheme"}; + const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; + const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension required"}; + const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; + const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; + const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporatily Unavailable"}; + const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction doesnot exist"}; + const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; + const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too many hops"}; + const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; + const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; + const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; + const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; + const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not acceptable here"}; + const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; + const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal error"}; + const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; + const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; + const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; + const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server timeout"}; + const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version not supported"}; + const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message too long"}; + const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition failure"}; + const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; + const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; + const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does not exist anywhere"}; + const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not acceptable"}; + +} //end StatusLines +} //end group Constants + +group Types { +group SubTypes{// Subtypes + + group TokenTypes // TokensTypes + { + // [20] + type enumerated FieldName + { + ACCEPT_E, + ACCEPT_ENCODING_E, + ACCEPT_LANGUAGE_E, + ALERT_INFO_E, + ALLOW_E, + AUTHENTICATION_INFO_E, + AUTHORIZATION_E, + CALL_ID_E, + CALL_INFO_E, + CONTACT_E, + CONTENT_DISPOSITION_E, + CONTENT_ENCODING_E, + CONTENT_LANGUAGE_E, + CONTENT_LENGTH_E, + CONTENT_TYPE_E, + CSEQ_E, + DATE_E, + ERROR_INFO_E, + EXPIRES_E, + FROM_E, + IN_REPLY_TO_E, + MAX_FORWARDS_E, + MIME_VERSION_E, + MIN_EXPIRES_E, + ORGANIZATION_E, + PRIORITY_E, + PROXY_AUTHENTICATE_E, + PROXY_AUTHORIZATION_E, + PROXY_REQUIRE_E, + RECORD_ROUTE_E, + REPLY_TO_E, + REQUIRE_E, + RETRY_AFTER_E, + ROUTE_E, + SERVER_E, + SUBJECT_E, + SUPPORTED_E, + TIMESTAMP_E, + TO_E, + UNSUPPORTED_E, + USER_AGENT_E, + VIA_E, + WARNING_E, + WWW_AUTHENTICATE_E, + + // [3262/7.1] + RACK_E, + RSEQ_E, + + // [3265/7.2] + ALLOW_EVENTS_E, + EVENT_E, + SUBSCRIPTION_STATE_E, + + // [3313] + P_MEDIA_AUTHORIZATION_E, + + // [3323] + PRIVACY_E, + + // [3325] + P_ASSERTED_ID_E, + P_PREFERRED_ID_E, + + // [3326] + REASON_E, + + // [3515] - REFER method + REFER_TO_E, + + // [3892] - REFER method + REFERRED_BY_E, + + // [4244] + HISTORY_INFO_E, + + // [3313] + P_MEDIA_AUTH_E, + + // [3327] + PATH_E, + + // [3329] + SECURITY_CLIENT_E, + SECURITY_SERVER_E, + SECURITY_VERIFY_E, + + // [3455] + P_ACCESS_NETWORK_INFO_E, + P_ASSOCIATED_URI_E, + P_CALLED_PARTY_E, + P_CHARGING_FUNCTION_ADDRESSES_E, + P_CHARGING_VECTOR_E, + P_VISITED_NETWORK_E, + + // [3608] + SERVICE_ROUTE_E, + + // [3841] + ACCEPT_CONTACT_E, + + // [4028] + MIN_SE_E, + SESSION_EXPIRES_E, + + P_ASSERTED_SERVICE_E, + + //[5009] + P_EARLY_MEDIA_E + + } + + // [7.1] + type enumerated Method { + ACK_E, + BYE_E, + CANCEL_E, + INVITE_E, + OPTIONS_E, + REGISTER_E, + PRACK_E, // Note: this element is not defined in [5] + SUBSCRIBE_E, NOTIFY_E, // [3265] + PUBLISH_E, // [3903/12] + REFER_E, // [3515] + UPDATE_E, // [3311] + MESSAGE_E, // [3428] + INFO_E // [2976] + } + + // [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, + // 20.33, 20.34, 20.39, 20.42, 20.44] + type record GenericParam + { + charstring id, + charstring paramValue optional + } + + // [?] + type set of GenericParam SemicolonParam_List; + + // [?] + type set of GenericParam AmpersandParam_List; + + // [?] + type set of GenericParam CommaParam_List; + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43] + type record HostPort + { + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record UserInfo + { + charstring userOrTelephoneSubscriber, + charstring password optional + } + + // [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record SipUrl + { + charstring scheme, // contains "sip:" + UserInfo userInfo optional, + HostPort hostPort optional, + SemicolonParam_List urlParameters optional, + AmpersandParam_List headers optional + } + + // [20.1, RFC2616 14.1] + type record AcceptBody + { + charstring mediaRange, + SemicolonParam_List acceptParam optional + } + + // [20.1, RFC2616 14.1] + type set of AcceptBody AcceptBody_List; + + // [20.4] + type record AlertInfoBody + { + charstring url, // any URI + SemicolonParam_List genericParams optional + } + + // [20.4] + type set of AlertInfoBody AlertInfoBody_List; + + // [20.8] + type charstring CallidString; // token ["@" token] + + // [20.8] + type set of CallidString CallidString_List; + + // [20.9] + type record CallInfoBody + { + charstring url, // any URI + SemicolonParam_List infoParams optional + } + + // [20.9] + type set of CallInfoBody CallInfoBody_List; + + // [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2] + type union Challenge + { + CommaParam_List digestCln, + OtherAuth otherChallenge + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record NameAddr + { + charstring displayName optional, + SipUrl addrSpec + } + + // [20.10, 20.20, 20.31, 20.39] + type union Addr_Union + { + NameAddr nameAddr, + SipUrl addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field + } + + // [20.10] + type record ContactAddress + { + Addr_Union addressField, + SemicolonParam_List contactParams optional + } + + // [20.10] + type set of ContactAddress ContactAddress_List; // 1 or more elements + + // [20.10] + type union ContactBody + { + charstring wildcard, + ContactAddress_List contactAddresses + } + + // [20.2, 20.12; RFC2616 14.3, 14.11] + type charstring ContentCoding; + + // [20.2, 20.12; RFC2616 14.3, 14.11] + type set of ContentCoding ContentCoding_List; + + // [20.7, 20.28; RFC2616 14.35 RFC2617 1.2] + type union Credentials + { + CommaParam_List digestResponse, + OtherAuth otherResponse + } + + // [20.19, 20.23, 20.33] + type charstring DeltaSec; // an external operation can handle this field + + // [20.18] + type record ErrorInfoBody + { + charstring uri, // any URI + SemicolonParam_List genericParams optional + } + + // [20.18] + type set of ErrorInfoBody ErrorInfoBody_List; + + // [20.3 RFC2616 14.4] + type record LanguageBody + { + charstring languageRange, + SemicolonParam_List acceptParam optional + } + + // [20.3 RFC2616 14.4] + type set of LanguageBody LanguageBody_List; + + // [20.13; RFC2616 14.12] + type charstring LanguageTag; + + // [20.13; RFC2616 14.12] + type set of LanguageTag LanguageTag_List; + + // [20.5] + type set of charstring Method_List; + + + // [20.29, 20.32, 20.37, 20.40] + type charstring OptionTag; + + // [20.29, 20.32, 20.37, 20.40] + type set of OptionTag OptionTag_List; + + + // [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2] + type record OtherAuth + { + charstring authScheme, + CommaParam_List authParams + } + + type record Payload + { + integer payloadlength, + charstring payloadvalue + } + + // [20.30,20.34] + type record RouteBody + { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + // [20.30,20.34] + type record of RouteBody RouteBody_List; + + // [20.42] + type record SentProtocol + { + charstring protocolName, + charstring protocolVersion, + charstring transport + } + + // [20.35, 20.41; RFC2616 14.43] + type charstring ServerVal; + + // [20.35, 20.41; RFC2616 14.43] + type set of ServerVal ServerVal_List; + + // [20.38] + type record TimeValue + { + integer majorDigit, // represented as an integer + integer minorDigit optional // represented as an integer + } + + // [20.42] + type record ViaBody + { + SentProtocol sentProtocol, + HostPort sentBy, + SemicolonParam_List viaParams optional + } + + // [20.42] + type record of ViaBody ViaBody_List; + + // [20.43] + type union WarnAgent + { + HostPort hostPort, + charstring pseudonym + } + + // [20.43] + type record WarningValue + { + integer warnCode, // represented as an integer + WarnAgent warnAgent, + charstring WarnText + } + + // [20.43] + type set of WarningValue WarningValue_List; + + type Addr_Union PAssertedIDValue; + + type record of PAssertedIDValue PAssertedIDValue_List; + + type charstring PAssertedServiceValue; + + type Addr_Union PPreferredIDValue; + + type record of PPreferredIDValue PPreferredIDValue_List; + + type charstring PrivacyValue; + + type record of PrivacyValue PrivacyValue_List; + + + } // end group TokensType + + + group HeaderFieldTypes // Header Fields + { + group CommonHeaderFieldTypes + { + // [20.1, RFC2616 14.1] + type record Accept + { + FieldName fieldName (ACCEPT_E), + AcceptBody_List acceptArgs optional + } + + // [20.2, RFC2616 14.3] + type record AcceptEncoding + { + FieldName fieldName (ACCEPT_ENCODING_E), + ContentCoding_List contentCoding optional + } + + // [20.3, RFC2616 14.4] + type record AcceptLanguage + { + FieldName fieldName (ACCEPT_LANGUAGE_E), + LanguageBody_List languageBody optional + } + + // [20.4] + type record AlertInfo + { + FieldName fieldName (ALERT_INFO_E), + AlertInfoBody_List alertInfoBody optional + } + + // [20.5] + type record Allow + { + FieldName fieldName (ALLOW_E), + Method_List methods optional + } + + // [20.6] + type record AuthenticationInfo + { + FieldName fieldName (AUTHENTICATION_INFO_E), + CommaParam_List ainfo + } + + // [20.7 RFC2617 3.2.2] + type record Authorization + { + FieldName fieldName (AUTHORIZATION_E), + Credentials body + } + + // [20.8] + type record CallId + { + FieldName fieldName (CALL_ID_E), + CallidString callid + } + + // [20.9] + type record CallInfo + { + FieldName fieldName (CALL_INFO_E), + CallInfoBody_List callInfoBody optional + } + + // [20.10] + type record Contact + { + FieldName fieldName (CONTACT_E), + ContactBody contactBody + } + + // [20.11] + type record ContentDisposition + { + FieldName fieldName (CONTENT_DISPOSITION_E), + charstring dispositionType, + SemicolonParam_List dispositionParams optional + } + + // [20.12 RFC2616 14.11] + type record ContentEncoding + { + FieldName fieldName (CONTENT_ENCODING_E), + ContentCoding_List contentCoding + } + + // [20.13 RFC2616 14.12] + type record ContentLanguage + { + FieldName fieldName (CONTENT_LANGUAGE_E), + LanguageTag_List languageTag + } + + // [20.14] + type record ContentLength + { + FieldName fieldName (CONTENT_LENGTH_E), + integer len // this field is represented as an integer + } + + // [20.15] + type record ContentType + { + FieldName fieldName (CONTENT_TYPE_E), + charstring mediaType + } + + // [20.16] + type record CSeq + { + FieldName fieldName (CSEQ_E), + integer seqNumber, // this field is represented as an integer + charstring method + } + + // [20.17] + type record Date + { + FieldName fieldName (DATE_E), + charstring sipDate + } + + // [20.18] + type record ErrorInfo + { + FieldName fieldName (ERROR_INFO_E), + ErrorInfoBody_List errorInfo optional + } + + // [20.19] + type record Expires + { + FieldName fieldName (EXPIRES_E), + DeltaSec deltaSec + } + + // [20.20] + type record From + { + FieldName fieldName (FROM_E), + Addr_Union addressField, + SemicolonParam_List fromParams optional + } + + // [20.21] + type record InReplyTo + { + FieldName fieldName (IN_REPLY_TO_E), + CallidString_List callids + } + + // [20.22] + type record MaxForwards + { + FieldName fieldName (MAX_FORWARDS_E), + integer forwards // this field is represented as an integer + } + + // [20.23] + type record MinExpires + { + FieldName fieldName (MIN_EXPIRES_E), + DeltaSec deltaSec + } + + // [20.24 RFC2616 19.4.1] + type record MimeVersion + { + FieldName fieldName (MIME_VERSION_E), + integer majorNumber, // this field is represented as an integer + integer minorNumber // this field is represented as an integer + } + + // [20.25] + type record Organization + { + FieldName fieldName (ORGANIZATION_E), + charstring organization + } + + // [20.26] + type record Priority + { + FieldName fieldName (PRIORITY_E), + charstring priorityValue + } + + // [20.27 RFC2616 14.33 RFC2617 1.2] + type record ProxyAuthenticate + { + FieldName fieldName (PROXY_AUTHENTICATE_E), + Challenge challenge + } + + // [20.28 RFC2616 14.35 RFC2617 1.2] + type record ProxyAuthorization + { + FieldName fieldName (PROXY_AUTHORIZATION_E), + Credentials credentials + } + + // [20.29] + type record ProxyRequire + { + FieldName fieldName (PROXY_REQUIRE_E), + OptionTag_List optionsTags + } + + // [20.30] + type record RecordRoute + { + FieldName fieldName (RECORD_ROUTE_E), + RouteBody_List routeBody + } + + // [20.31] + type record ReplyTo + { + FieldName fieldName (REPLY_TO_E), + Addr_Union addressField, + SemicolonParam_List replyToParams optional + } + + // [20.32] + type record Require + { + FieldName fieldName (REQUIRE_E), + OptionTag_List optionsTags + } + + // [20.33] + type record RetryAfter + { + FieldName fieldName (RETRY_AFTER_E), + DeltaSec deltaSec, + charstring comment optional, + SemicolonParam_List retryParams optional + } + + // [20.34] + type record Route + { + FieldName fieldName (ROUTE_E), + RouteBody_List routeBody + } + + // [20.35 RFC2616 14.38] + type record Server + { + FieldName fieldName (SERVER_E), + ServerVal_List serverBody + } + + // [20.36] + type record Subject + { + FieldName fieldName (SUBJECT_E), + charstring summary + } + + // [20.37] + type record Supported + { + FieldName fieldName (SUPPORTED_E), + OptionTag_List optionsTags optional + } + + // [20.38] + type record Timestamp + { + FieldName fieldName (TIMESTAMP_E), + TimeValue timeValue optional, + TimeValue delay optional + } + + // [20.39] + type record To + { + FieldName fieldName (TO_E), + Addr_Union addressField, + SemicolonParam_List toParams optional + } + + // [20.40] + type record Unsupported + { + FieldName fieldName (UNSUPPORTED_E), + OptionTag_List optionsTags + } + + // Undefined header field + type record UndefinedHeader + { + charstring headerName, + charstring headerValue + } + + type set of UndefinedHeader UndefinedHeader_List; + + // [20.41 RFC2616 14.43] + type record UserAgent + { + FieldName fieldName (USER_AGENT_E), + ServerVal_List userAgentBody + } + + // [20.42] + type record Via + { + FieldName fieldName (VIA_E), + ViaBody_List viaBody + } + + // [20.43] + type record Warning + { + FieldName fieldName (WARNING_E), + WarningValue_List warningValue + } + + // [20.44 RFC2616 14.47 RFC2617 1.2] + type record WwwAuthenticate + { + FieldName fieldName (WWW_AUTHENTICATE_E), + Challenge challenge + } + }//end group CommonHeaderFieldTypes + group RFC3262HeaderFieldTypes + { + // [3262/7.1] + type record RSeq { + FieldName fieldName(RSEQ_E), + integer responseNum + } + + // [3262/7.2] + type record RAck { + FieldName fieldName(RACK_E), + integer responseNum, + integer seqNumber, + charstring method + } + }//end group RFC3262HeaderFieldTypes + + group RFC3265HeaderFieldTypes + { + // [3265/7.2] + type record AllowEvents { + FieldName fieldName(ALLOW_EVENTS_E), + EventType_List eventTypes + } + + type set of EventType EventType_List; + type charstring EventType; + + // [3265/7.2] + type record Event { + FieldName fieldName(EVENT_E), + EventType eventType, + SemicolonParam_List eventParams optional + } + + // [3265/7.2] + type record SubscriptionState { + FieldName fieldName(SUBSCRIPTION_STATE_E), + SubState subState, + SemicolonParam_List substateParams optional + } + + type charstring SubState; + }//end group RFC3265HeaderFieldTypes + + group RFC3313HeaderFieldTypes + { + // [3313/5] + type record PMediaAuthorization { + FieldName fieldName(P_MEDIA_AUTHORIZATION_E), + PMediaAuthorization_List pMediaAuthorizations + } + + type charstring PMediaAuthValue; //HEXDIG "0"-"9", "A"-"F" + + type record of PMediaAuthValue PMediaAuthorization_List; + + }//end group RFC3265HeaderFieldTypes + + group RFC3323HeaderFieldTypes + { + // [3323] + type record Privacy { + FieldName fieldName(PRIVACY_E), + PrivacyValue_List privValueList + } + }//end group RFC3323HeaderFieldTypes + + group RFC3325HeaderFieldTypes + { + // [3325] + type record PAssertedID { + FieldName fieldName(P_ASSERTED_ID_E), + PAssertedIDValue_List pAssertedIDValueList + } + + // [3325] + type record PPreferredID { + FieldName fieldName(P_PREFERRED_ID_E), + PPreferredIDValue_List pPreferredIDValueList + } + }//end group RFC3325HeaderFieldTypes + + group RFC3326HeaderFieldTypes + { + //[3326] + type record of ReasonValue ReasonValues; + + type record ReasonValue { + charstring token, + SemicolonParam_List reasonParams optional + } + + type record Reason { + FieldName fieldName(REASON_E), + ReasonValues reasonValues + } + }//end group RFC3326HeaderFieldTypes + + group RFC3327HeaderFieldTypes + { + // [3327] + type record Path { + FieldName fieldName(PATH_E), + PathValues pathValues + } + + type record of PathValue PathValues; + + type record PathValue { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + }//end group RFC3515HeaderFieldTypes + + group RFC3329HeaderFieldTypes + { + // [RFC3329/2.2] + type record SecurityMechanism { + charstring mechName, + SemicolonParam_List mechParams optional + } + + type set of SecurityMechanism SecurityMechanism_List; + + type record SecurityClient { + FieldName fieldName(SECURITY_CLIENT_E), + SecurityMechanism_List securityMech + } + + type record SecurityServer { + FieldName fieldName(SECURITY_SERVER_E), + SecurityMechanism_List securityMech + } + + type record SecurityVerify { + FieldName fieldName(SECURITY_VERIFY_E), + SecurityMechanism_List securityMech + } + }//end group RFC3329HeaderFieldTypes + + group RFC3455HeaderFieldTypes + { + type record of NameAddrParam NameAddrParam_List; + + type record NameAddrParam { + NameAddr nameAddr, + SemicolonParam_List genericParams optional + } + //[3455/5.1] + type record PAssociatedURI { + FieldName fieldName(P_ASSOCIATED_URI_E), + NameAddrParam_List nameAddrList + } + //[3455/5.2] + type record PCalledPartyID { + FieldName fieldName(P_CALLED_PARTY_E), + NameAddrParam nameAddParams + } + + type record of VnetworkSpec VnetworkSpec_List; + + type record VnetworkSpec { + charstring vNetworkSpecToken, + SemicolonParam_List genericParams optional + } + + //[3455/5.3] + type record PVisitedNetworkID { + FieldName fieldName(P_VISITED_NETWORK_E), + VnetworkSpec_List vNetWorkSpec + } + + //[3455/5.4] + type record PAccessNetworkInfo { + FieldName fieldName(P_ACCESS_NETWORK_INFO_E), + charstring accessType, + SemicolonParam_List genericParams optional + } + + //[3455/5.5] + type record PChargingFunctionAddresses { + FieldName fieldName(P_CHARGING_FUNCTION_ADDRESSES_E), + SemicolonParam_List chargeAddrParams optional + } + + //[3455/5.6] + type record PChargingVector { + FieldName fieldName(P_CHARGING_VECTOR_E), + SemicolonParam_List chargeParams optional + } + }//end group RFC33455HeaderFieldTypes + + group RFC3515HeaderFieldTypes + { + // [3515] + type record ReferTo { + FieldName fieldName(REFER_TO_E), + NameAddr nameAddr, + SemicolonParam_List referToParams optional + } + }//end group RFC3515HeaderFieldTypes + + group RFC3608HeaderFieldTypes + { + // [3608] + type record ServiceRoute { + FieldName fieldName(SERVICE_ROUTE_E), + RouteBody_List routeBody + } + }//end group RFC33608HeaderFieldTypes + + + group RFC3841HeaderFieldTypes + { + // [3841] + type record AcceptContact { + FieldName fieldName(ACCEPT_CONTACT_E), + AcRcValue_List acValues + } + + type set of AcRcValue AcRcValue_List; + + type record AcRcValue { + charstring wildcard(c_WILDCARD), + SemicolonParam_List acRcParams optional + } + }// end group RFC3841HeaderFieldTypes + + group RFC3892HeaderFieldTypes + { + // [3892] + type record ReferredBy { + FieldName fieldName(REFERRED_BY_E), + NameAddr nameAddr, + SemicolonParam_List referredbyIdParams optional + } + }//end group RFC3892HeaderFieldTypes + + group RFC4028HeaderFieldTypes + { + // [4028] + type record MinSE { + FieldName fieldName(MIN_SE_E), + DeltaSec deltaSec, + SemicolonParam_List minSeParam optional + } + // [4028] + type record SessionExpires { + FieldName fieldName(SESSION_EXPIRES_E), + DeltaSec deltaSec, + SemicolonParam_List seParam optional + } + }//end group RFC4028HeaderFieldTypes + + group RFC4244HeaderFieldTypes + { + // [4244] + type record HistoryInfo { + FieldName fieldName(HISTORY_INFO_E), + HistoryInfo_List historyInfoList + } + + type record of HistoryInfoEntry HistoryInfo_List; + + type record of integer IntegerList; + + type record HistoryInfoEntry { + NameAddr nameAddr, + IntegerList hiIndex optional, + SemicolonParam_List hiExtention optional + } + }//end group RFC4244HeaderFieldTypes + + group RFC5009PEarlyMediaHeader + { + // [5009] + type record PEarlyMedia { + FieldName fieldName(P_EARLY_MEDIA_E), + record of charstring em_param + } + }//end group RFC5009PEarlyMediaHeader + + type record PAssertedService { + FieldName fieldName(P_ASSERTED_SERVICE_E), + PAssertedServiceValue pAssertedServiceValue + } + + } // end group HeaderFieldTypes + + group MessageHeaderTypes + { + + // Message-Header for all SIP requests and responses [20] + type set MessageHeader + { + Accept accept optional, + AcceptContact acceptContact optional, + AcceptEncoding acceptEncoding optional, + AcceptLanguage acceptLanguage optional, + AlertInfo alertInfo optional, + Allow allow optional, + AllowEvents allowEvents optional, // 3265/7.2 + AuthenticationInfo authenticationInfo optional, // only in responses + Authorization authorization optional, // only in requests + CallId callId optional, // optional only in Invalid test cases mandatory otherwise + CallInfo callInfo optional, + Contact contact optional, // optional in response and all requests except INVITE where mandatory + ContentDisposition contentDisposition optional, + ContentEncoding contentEncoding optional, + ContentLanguage contentLanguage optional, + ContentLength contentLength optional, // optional in responses and all requests except ACK where mandatory + ContentType contentType optional, + CSeq cSeq optional, // optional only in Invalid test cases mandatory otherwise + Date date optional, + ErrorInfo errorInfo optional, // only in responses + Event event optional, // 3265/7.2 + Expires expires optional, + From fromField, + HistoryInfo historyInfo optional, // 4244 + InReplyTo inReplyTo optional, // only in requests + MaxForwards maxForwards optional, // mandatory in requests not required in responses! + MimeVersion mimeVersion optional, + MinExpires minExpires optional, // only in responses + MinSE minSE optional, // 4028 + Organization organization optional, + PAccessNetworkInfo pAccessNetworkInfo optional, // 3455 + PAssertedID pAssertedID optional, // 3325 + PAssertedService pAssertedService optional, + PAssociatedURI pAssociatedURI optional, // 3455 + Path path optional, // 3327 + PCalledPartyID pCalledPartyID optional, // 3455 + PChargingFunctionAddresses pChargingFunctionAddresses optional, // 3455 + PChargingVector pChargingVector optional, // 3455 + PEarlyMedia pEarlyMedia optional, // 5009 + PMediaAuthorization pMediaAuthorization optional, // 3313 + PPreferredID pPreferredID optional, // 3325 + Priority priority optional, // only in requests + Privacy privacy optional, // 3323 + ProxyAuthenticate proxyAuthenticate optional, // only in responses + ProxyAuthorization proxyAuthorization optional, // only in requests + ProxyRequire proxyRequire optional, // only in requests + PVisitedNetworkID pVisitedNetworkID optional, // 3455 + RAck rAck optional, // 3262/7.1 + RSeq rSeq optional, // 3262/7.1 + Reason reason optional, // 3326 + RecordRoute recordRoute optional, + ReferredBy referredBy optional, // 3892 - REFER method + ReferTo referTo optional, // 3515 - REFER method + ReplyTo replyTo optional, // optional in responses and INVITE requests + Require require optional, + RetryAfter retryAfter optional, // only in responses + Route route optional, // only in requests + SecurityClient securityClient optional, // 3329 + SecurityServer securityServer optional, // 3329 + SecurityVerify securityVerify optional, // 3329 + Server server optional, // only in responses + ServiceRoute serviceRoute optional, // 3608 + SessionExpires sessionExpires optional, // 4028 + Subject subject optional, // only in requests + SubscriptionState subscriptionState optional, // 3265/7.2 + Supported supported optional, + Timestamp timestamp optional, + To toField, + Unsupported unsupported optional, // only in responses + UserAgent userAgent optional, + Via via, + Warning warning optional, // only in responses + WwwAuthenticate wwwAuthenticate optional, // only in responses + UndefinedHeader_List undefinedHeader_List optional + } + + } // end group MessageHeaderTypes + + group StartLineTypes + { + // Request-Line [7.1] + type record RequestLine + { + Method method, + SipUrl requestUri, + charstring sipVersion + } + + // Status-Line [7.2] + type record StatusLine + { + charstring sipVersion, + integer statusCode, + charstring reasonPhrase + } + + } // end group StartLineTypes + + + group otherTypes{ + + type record SipUserProfile + { + /** @desc integer for the userprofile identifier + */ + integer id, + + /** @desc integer for Port number to exchange SIP messages + */ + integer currPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring currIpaddr, + + /** @desc integer for Port number to exchange SIP messages + */ + integer contactPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring contactIpaddr, + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring bearerIpaddr, + + /** @desc charstring for identity of the tester local domain + */ + charstring homeDomain, + + /** @desc charstring for identity of the tester local user + */ + charstring publUsername, + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring qop, + + /** @desc charstring for RFC 2617 3.2.2 username for authentication + * The name of user in the specified realm + */ + charstring privUsername, + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring passwd, + + /** @desc charstring for registrar domain for authentication and request line + */ + charstring registrarDomain + + } + + + } // end group otherTypes + + }// end group Subtypes + + + + group MSGtypes{ + + group RequestTypes + { + // [7.1] + type record Request + { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record REGISTER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INVITE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record OPTIONS_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record BYE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record CANCEL_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record ACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3262/7.1] + type record PRACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1] + type record NOTIFY_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1] + type record SUBSCRIBE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3903/11.1] + type record PUBLISH_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3311/7] + type record UPDATE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record REFER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record MESSAGE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record INFO_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + } with { encode "SIPCodec" }// end group RequestTypes + + group ResponseTypes + { + // [7.2] + type record Response + { + StatusLine statusLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + } with { encode "SIPCodec" }// end group ResponseTypes + + // This MSG type is defined for sending synctactic variations, ans syntactically + // erroneous messages, and receving messages failed parsing. + group SyntacticTypes + { + type charstring Raw; + } // end group SyntacticTypes + + // This type is defined for particular SIP message body types like SDP + + group MessageBodyTypes + { + type union MessageBody{ + SDP_Message sdpMessageBody, // if there is only SDP part + XmlBody xmlBody, // if there is XML message body + MIME_Message mimeMessageBody, //if there is SDP and encapsulated ISUP part + charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) + charstring textplain // if content type is text/plain (for testing long messages) + }; + + } // end group MessageBodyTypes + + group MIMETypes + { + group SubTypes + { + + type union MIME_Encapsulated_Parts { + SDP_Message sdpMessageBody, + XmlBody xmlBody // if there is XML message body + } + + type record MIME_Encapsulated_Part { + charstring content_type, + charstring content_disposition optional, + MIME_Encapsulated_Parts mime_encapsulated_part + } + } + + group MessageTypes { + + type record MIME_Message { + charstring boundary, // len: + MimeEncapsulatedList mimeEncapsulatedList + } + + type record of MIME_Encapsulated_Part MimeEncapsulatedList; + + } // group MessageTypes + } // group MIMETypes + + }// end group MSGTypes +}// end group Types + +} // end module LibSip_TypesAndValues diff --git a/LibSip/LibSip_Steps.ttcn b/LibSip/LibSip_Steps.ttcn new file mode 100644 index 0000000..bbb8e22 --- /dev/null +++ b/LibSip/LibSip_Steps.ttcn @@ -0,0 +1,3236 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. + */ + +module LibSip_Steps +{ + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all ; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + +group externalfunctions { + + //Return random charstring + external function fx_rndStr() return charstring; + // Return the equivalent string in lower case + external function fx_putInLowercase(charstring par_string) return charstring; + + external function fx_getIpAddr(charstring host_name) return charstring; + + // External function to generate a digest response. + // References: + // * RFC 2617 HTTP Authentication: Basic and Digest Access + // Authentication, and + // * RFC 1321 The MD5 Message-Digest Algorithm + // See RFC 2617, chapter 5 Sample implementation, for example usage, as + // the signature of calculateDigestResponse is according to the example + // given in the RFC. + // + external function fx_calculateDigestResponse( + charstring nonce, + charstring cnonce, + charstring user, + charstring realm, + charstring passwd, + charstring alg, + charstring nonceCount, + charstring method, + charstring qop, + charstring URI, + charstring HEntity) return charstring; + +} + +group ParameterOperations { + + /** + * + * @desc function to generate a 32 bits random number as a charstring for tag field + * (used as e.g.: tag in from-header field, or branch parameter in via header) + * @return random value with at least 32 bits of randomness + * + */ + function f_getRndTag() return charstring + { + var charstring tag_value; + //tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + tag_value := fx_rndStr()&fx_rndStr(); + return(tag_value); + } + + /** + * + * @desc Function to prepare credentials for request that has an empty + * entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @return Credentials field + */ + function f_calculatecCredentials_empty(in SipUserProfile p_userprofile) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm := p_userprofile.registrarDomain; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + var charstring v_response := ""; + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "uri", paramValue := v_uri }, + { id := "nonce=""""", paramValue := omit }, // already enclosed to " characters + { id := "response=""""", paramValue := omit } // already enclosed to " characters + } + }; + + return v_result; + } + + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, + { id := "response", paramValue := v_response }, + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message. NO RESPONSE value to cause an error! + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials_wo_response(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, +// { id := "response", paramValue := v_response }, // not included to cause an error + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_challenge parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorization(in charstring p_qop, in CommaParam_List p_challenge) return Challenge + { + var Challenge v_result; + + var charstring v_realm; + + var charstring v_qop := p_qop; + + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestCln := + { + { id := "Digest realm", paramValue := v_realm }, + { id := "nonce=", paramValue := c_nonce }, + { id := "algorithm=", paramValue := c_algorithm }, // algorithm is not enclosed to " characters + { id := "ck=", paramValue := c_ck }, + { id := "ik=", paramValue := c_ik }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit }//qop + + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message and at the end put different private name + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentialsAndChangeUserName(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := "DifferentToPrivateUser"}, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, + { id := "response", paramValue := v_response }, + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + + /** + * + * @desc Function to check if param related to id from CommanParam_List exist + * containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm", "ck", "ik"...) + * @return parameter p_id value + */ + function f_checkParamValueFromChallengeIfPresent(in CommaParam_List p_challenge, in charstring p_id) return boolean + { + var boolean v_result := false; + var integer v_len := sizeof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + + for (var integer i := 0; i < v_len; i := i + 1) + { + if (fx_putInLowercase(p_challenge[i].id) == v_id) + { + v_result := true; + } + } + + return v_result; + } + + /** + * + * @desc Function to check if tag is present in SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return boolean true if tag is present + */ + function f_checkTagPresent(SemicolonParam_List p_param_l) runs on SipComponent return boolean { + var integer v_numberOfParams; + var integer i := 0; + + v_numberOfParams := sizeof (p_param_l); + while (i < v_numberOfParams) { + if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { + return (true); + } + i := i + 1; + } + return (false); + } + + /** + * + * @desc Function to extract paramValue related to id from CommanParam_List + * containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm",...) + * @return parameter p_id value + */ + function f_extractParamValueFromChallenge(in CommaParam_List p_challenge, in charstring p_id) return charstring + { + var charstring v_result := ""; + var integer v_len := sizeof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + + for (var integer i := 0; i < v_len; i := i + 1) + { + if (fx_putInLowercase(p_challenge[i].id) == v_id) + { + v_result := p_challenge[i].paramValue; + } + } + + if (v_result == "") + { + if(match(p_id,"algorithm")) + { + v_result := "MD5" + } + else if(match(p_id,"opaque")) + { + v_result := "" + } + else + { + var charstring v_tmpchar := "Cannot acquire value from credentials."; + log ("Cannot acquire value from credentials."); + setverdict(inconc); + stop; + } + } + + return v_result; + } + +}//end group ParameterOperations + +group FieldOperations { + + /** + * + * @desc function adds "Tag"-parameter in "To"-headerfield + * @param p_to To header field that should get a Tag parameter + * + */ + function f_addTagInTo(inout To p_to) runs on SipComponent + { + f_addParameterTagIfNotPresent(c_tagId, f_getRndTag(), p_to); + } + + /** + * + * @desc addition of a single parameter in the via header field + * @param p_parameter_name name of parameter to be added + * @param p_parameter_value value of parameter to be added + * @param p_viaBody the via parameter to be extended + * @verdict + */ + function f_addParameterIfNotPresent( + in charstring p_parameter_name, + in charstring p_parameter_value, + inout ViaBody p_viaBody) + + { + if (ispresent (p_viaBody.viaParams)) { + return; + } + p_viaBody.viaParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * + * @desc function to addd a parameter to the "To" header field (if there is not any parameter) + * @param p_parameter_name name of the parameter to be added + * @param p_parameter_value value of the paramter to be added + * @param p_to "To" header field to be extended + * @verdict + */ + function f_addParameterTagIfNotPresent( + in charstring p_parameter_name, + in charstring p_parameter_value, + inout To p_to) + + { + if (ispresent (p_to.toParams)) { + return; + } + p_to.toParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * + * @desc function compares the IP address of two hosts + * @param p_host1 hostname + * @param p_host2 hostname + * @return boolean value that is true if the IP addresses are identical + * @verdict + */ + function f_equivalentHostAddr(in charstring p_host1, in charstring p_host2) return boolean + { + //A DNS server may be used + return(fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); + } + + + /** + * + * @desc function checks if Require contains Precondition + * @param p_message (request or response) SIP message to be analysed + * @return true if p_id parameter exist + */ + function f_checkRequirePrecondition(in Request p_message) + { + if (ispresent(p_message.msgHeader.require.optionsTags)) + { + var boolean v_precondition_found:=false; + for (var integer v_i:=0; v_i) or omit + */ + function f_getPathHeaderTop(inout Request p_Request) return NameAddr + { + if (ispresent(p_Request.msgHeader.path)) { + if (sizeof(p_Request.msgHeader.path.pathValues)>0) { + return(p_Request.msgHeader.path.pathValues[0].nameAddr)} + }; + return(omit) + } + + /** + * + * @desc function updates first element of a Via headerfield list + * @param p_viaBody_List address list of a Via header field + * @param p_source_address address to be inserted in the top element + */ + function f_getViaReplyAddr(inout ViaBody_List p_viaBody_List, inout address4SIP p_source_address) + runs on SipComponent + { + var ViaBody v_viaBody; + var HostPort v_locAddr; + // The address to send message shall be updated after getting information + // in the Via header fied and according to 18.2.2 + v_viaBody := p_viaBody_List[0]; + + // received parameter has to be addded to the via hader field + // Be careful it could be an Host name and not an IP Address + + if (not f_equivalentHostAddr(valueof (v_viaBody.sentBy.host), + valueof (p_source_address.host))) { + f_addParameterIfNotPresent( + c_receivedId, + valueof (p_source_address.host), + v_viaBody); + } + if (ispresent(v_viaBody.sentBy.portField)) + { + p_source_address.portField := valueof(v_viaBody.sentBy.portField); + } + else + { + p_source_address.portField := c_defaultSipPort; + } + } + + /** + * + * @desc functions give access to an element of the Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of Route record element to be retrieved + * @return HostPort value of the Route element or omit + */ + function f_getRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.route)) { + if (sizeof(p_message.msgHeader.route.routeBody)>p_index) { + return(p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.recordRoute)) { + if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { + return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromResponse(in Response p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.recordRoute)) { + if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { + return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Via header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPort(in Request p_message, in integer p_index) return HostPort + { + + if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { + return(p_message.msgHeader.via.viaBody[p_index].sentBy)} + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Via header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ function f_getViaHeaderElementHostPortResponse(in Response p_message, in integer p_index) return HostPort + { + + if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { + return(p_message.msgHeader.via.viaBody[p_index].sentBy)} + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc function checks indicators if topology hiding (TH) has been applied: + * - second element in via-header record has tokenized-by parameter + * @param p_Request SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHiding(inout Request p_request) runs on SipComponent return boolean + { + var GenericParam v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; // second element + if (not v_viaParameter.id == "tokenized-by") + {return(false)}; + return(true) + } + + /** + * + * @desc function checks indicators if topology hiding (TH) has been applied: + * - any element in via-header record has tokenized-by parameter + * @param Response SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHidingResponse(inout Response p_response) runs on SipComponent return boolean + { + var GenericParam v_viaParameter; + + for (var integer v_i := 0; v_i < sizeof(p_response.msgHeader.via.viaBody); v_i := v_i + 1) { + + v_viaParameter := p_response.msgHeader.via.viaBody[v_i].viaParams[0]; // first parameter + + if (not v_viaParameter.id == "tokenized-by") + {return(false)} + } + return(true); + + } + + + +group SetHeaders { + + + /** + * + * @desc function for setting of component variables related to message header fields + * (message type independent: CSeq, contact, via), function uses information from userprofile + * + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral(inout CSeq p_cSeq_s, in charstring p_method) runs on SipComponent + { + var SemicolonParam_List v_params; + + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method ; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + vc_branch := c_brenchCookie & f_getRndTag(); + vc_via:={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + }// end function f_setHeadersGeneral + + /** + * + * @desc setting of general and basic Bye header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersBYE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + f_addTagInTo(vc_to); + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersBYE + + /** + * + * @desc function sets header field for the next outgoing REGISTER message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_REGISTER(inout CSeq p_cSeq_s) runs on SipComponent + { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + + vc_requestUri:= + { + scheme := c_sipScheme, + userInfo := omit, + hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} + vc_from := {fieldName := FROM_E, + addressField :=vc_to.addressField, + fromParams := v_params + }; + + if(not vc_firstREGISTER_sent) + { + v_params := {{id:=c_expiresId, paramValue:=c_shortRegistration}}; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function + + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_empty(vc_userprofile) + } + + + }// end function setHeaders_REGISTER + + /** + * + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER + + /** + * + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * NO response in Authorization header to cause an error + * @verdict + */ + function f_setHeaders_2ndREGISTER_wo_response() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER_wo_response + + /** + * + * @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName + + + /** + * + * @desc function sets header fields for the next outgoing REGISTER (de-registration) + * @param p_cSeq_s cSeq to be used + * @verdict + */ + function f_setHeaders_deREGISTER(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeaders_REGISTER(p_cSeq_s); + vc_contact := + { + fieldName := CONTACT_E, + contactBody := {wildcard := "*" } + }; + } // end function f_setHeaders_deREGISTER + + + /** + * + * @desc setting of general and basic Invite header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersINVITE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersINVITE + + /** + * + * @desc setting of general and basic Message header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersMESSAGE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersMESSAGE + + /** + * + * @desc function sets header field for the next outgoing SUBSCRIBE message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_SUBSCRIBE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + + vc_requestUri:=valueof(m_SipUrl_currDomain(vc_userprofile)) + + }// end function setHeaders_SUBSCRIBE + + /** + * + * @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer + * @param p_Request REGISTER that has been received + */ + function f_setHeadersOnReceiptOfREGISTER(Request p_Request) + runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + } // end f_setHeadersOnReceiptOfREGISTER + + /** + * + * @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer + * @param p_Request SUBSCRIBE that has been received + */ + function f_setHeadersOnReceiptOfSUBSCRIBE(Request p_Request) + runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + } // end f_setHeadersOnReceiptOfSUBSCRIBE + + /** + * + * @desc function reads all necessary headers from + * the received INVITE message and generate the tag for the answer + * @param p_Request received INVITE message + * @verdict + */ + function f_setHeadersOnReceiptOfINVITE(Request p_Request) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + f_addTagInTo(vc_to); + vc_caller_From := vc_from; + vc_caller_To := vc_to; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := + f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + }; + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + if (ispresent(p_Request.msgHeader.privacy)) { + vc_privacy := p_Request.msgHeader.privacy; + }; + + if (ispresent(p_Request.messageBody)) { + //cleaning of attributes before assignment + if (ispresent(vc_sdp_remote.media_list)) + { + for (var integer i:=0; i0; i:=i-1) + { + if (p_Request.msgHeader.supported.optionsTags[i-1]=="100rel") + { vc_supported_100rel := true }; + if (p_Request.msgHeader.supported.optionsTags[i-1]=="precondition") + { vc_supported_precondition := true } + } + }; + + } // end f_setHeadersOnReceiptOfINVITE + + /** + * + * @desc function reads header field of a received BYE message + * @param p_Request received BYE + */ + function f_setHeadersOnReceiptOfBYE(Request p_BYE_Request) + runs on SipComponent + { + + f_setHeadersOnReceiptOfRequest(p_BYE_Request); + vc_callId := p_BYE_Request.msgHeader.callId; + + } // end f_setHeadersOnReceiptOfBYE + + /** + * + * @desc function reads header field from an incoming Request message + * @param p_Request received Request message + */ + function f_setHeadersOnReceiptOfRequest(Request p_Request) runs on SipComponent { + vc_request := p_Request; + vc_cSeq := p_Request.msgHeader.cSeq; + vc_iut_CSeq := p_Request.msgHeader.cSeq; + vc_from := p_Request.msgHeader.fromField; + vc_to := p_Request.msgHeader.toField; + vc_via := p_Request.msgHeader.via; + // update sent_label according to received via header field + f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); + + // Catch route + vc_boo_recordRoute:=false; + + if (ispresent(p_Request.msgHeader.recordRoute)) + { + vc_boo_recordRoute:=true; + vc_recordRoute := p_Request.msgHeader.recordRoute; + } + } // end f_setHeadersOnReceiptOfRequest + + /** + * + * @desc functions reads header fields from an incoming Response message + * @param p_cSeq + * @param p_response received response message + * @verdict + */ + function f_setHeadersOnReceiptOfResponse(inout CSeq p_cSeq, Response p_response) runs on SipComponent + { + var integer v_i, v_j, v_nbroute; + var Contact v_contact; //only for local purpose + + vc_response := p_response; + //vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq + vc_to :=p_response.msgHeader.toField; + vc_from :=p_response.msgHeader.fromField; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + if (ispresent(p_response.msgHeader.contact)) + { + v_contact := p_response.msgHeader.contact; + if (ischosen(v_contact.contactBody.contactAddresses)) + { + vc_reqHostPort := f_getContactAddr(v_contact.contactBody.contactAddresses[0]); + } + } + else + { + if (ischosen(vc_to.addressField.nameAddr)) + { + vc_reqHostPort := vc_to.addressField.nameAddr.addrSpec.hostPort; + } + else + { + vc_reqHostPort := vc_to.addressField.addrSpecUnion.hostPort; + } + } + + vc_callee_To:={fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From:= {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + vc_via:= p_response.msgHeader.via; + + // Route Management + if (ispresent(p_response.msgHeader.recordRoute)) + { + vc_recordRoute := p_response.msgHeader.recordRoute; + v_nbroute := sizeof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (v_i:=0; v_i<=(v_nbroute - 1); v_i:=v_i+1) + { + v_j:= v_nbroute - 1 - v_i; + vc_route.routeBody[v_j]:=vc_recordRoute.routeBody[v_i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else + { + vc_boo_recordRoute := false; + vc_boo_route := false; + }; + + + // extentions due to new fields in PRACK and UPDATE messages + if (ispresent(p_response.msgHeader.rSeq)) { + vc_rAck := + { fieldName := RACK_E, + responseNum := valueof(p_response.msgHeader.rSeq.responseNum), + seqNumber := valueof(p_response.msgHeader.cSeq.seqNumber), + method := valueof(p_response.msgHeader.cSeq.method) + }; + }; + + // extentions due to new HistoryInfo fields 180 or 200OK messages + if (ispresent(p_response.msgHeader.historyInfo)) { + vc_historyInfoList := valueof(p_response.msgHeader.historyInfo.historyInfoList); + vc_history_is_valid := true + } + else {vc_history_is_valid := false}; + + //sdpMessageBody answer + if (ispresent(p_response.messageBody)) { + if ( ischosen(p_response.messageBody.sdpMessageBody)) + { + vc_sdp_remote := p_response.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + } + + if ( ischosen(p_response.messageBody.xmlBody)) + { + vc_xml_remote := p_response.messageBody.xmlBody; + } + + if ( ischosen(p_response.messageBody.mimeMessageBody)) + { + + for (var integer j:=0; j1) + { + // select the first one + v_PT := vc_sdp_local.media_list[i].media_field.fmts[0]; + vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; + for (j :=0; j 0) //specific media requested + { + if (not(loc_medianum > mn)) {mn := loc_medianum} + }; + for (i :=0; i < mn; i := i+1) + { + //for every single media (that is not omit) + cn := 0; + + if (ispresent(vc_sdp_local.media_list[i].media_field)) + { + + log("vc_sdp_local.media_list[i] ",vc_sdp_local.media_list[i]); +// if (valueof(vc_sdp_local.media_list[i]) != omit) +// { + if (ispresent(vc_sdp_local.media_list[i].attributes)) + { + cn := sizeof(vc_sdp_local.media_list[i].attributes); + }; +// }; + var boolean v_set_direction := false; + //if (sizeof(vc_sdp_local.media_list[i].media_field.fmts)>1) + // select the first one + for (j :=0; j 0) //specific media requested + { + if (loc_medianum > mn) {return false} + else {mn := loc_medianum} + }; + for (i :=loc_medianum-1; i < mn; i := i+1) + { + //for every single media + if (ispresent(vc_sdp_remote.media_list[i].attributes)) + { + cn := sizeof(vc_sdp_remote.media_list[i].attributes); + log (cn); + }; + if (sizeof(vc_sdp_remote.media_list[i].attributes)>0) + { + // select the first one + log(vc_sdp_remote.media_list[i].attributes); + for (j :=0; j value v_request sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfREGISTER(v_request); + } + } + } + + /** + * + * @desc function awaits SUBSCRIBE + * @param p_register expected SUBSCRIBE request + */ + function f_awaitingSUBSCRIBE(in template SUBSCRIBE_Request p_register) runs on SipComponent + { + var Request v_request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_register)-> value v_request sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + } + } + } + + /** + * + * @desc function awaits REGISTER and sends a 200 OK response + * @param p_reply flag used to avoid the 200OK response sending + */ + function f_awaitingREGISTER_sendReply(in template REGISTER_Request p_register, in boolean p_reply) runs on SipComponent + { + var Request v_request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_register)-> value v_request sender vc_sent_label + { + tc_resp.stop; + vc_request := v_request; + f_setHeadersOnReceiptOfREGISTER(v_request); + //Answer to the Request + if (p_reply) {f_send200OK();}; + } + } + } + + + /** + * + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponse(inout CSeq p_cSeq_s) runs on SipComponent + { + + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + setverdict(pass) + } + } + } //end awaitingOkResponse + + /** + * + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponse(in template Response p_Response) runs on SipComponent + { + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (p_Response) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + setverdict(pass) + } + } + } //end f_awaitingResponse + + /** + * + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponsePassOnTimeout(in template Response p_Response) runs on SipComponent + { + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (p_Response) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + vc_boo_response:=true; + //setverdict(pass) + } + [] tc_ack.timeout + { + vc_boo_response:=false; + //setverdict (pass) + } + } + } //end f_awaitingResponsePassOnTimeout + + /** + * + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE(template INVITE_Request p_request) runs on SipComponent + { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt + { + []SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label + { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv:= true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + } + } //end f_awaitingInviteRequest + + /** + * + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_PassOnTimeout(template INVITE_Request p_request) runs on SipComponent + { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt + { + []SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label + { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv:= true; // communication has started + vc_boo_request := true; + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + []tc_wait.timeout + { + vc_boo_request := false; + } + } + } //end f_awaitingInviteRequest + + /** + * + * @desc function awaiting ACK request + */ + function f_awaitingACK(in template ACK_Request p_ACK) runs on SipComponent + { + var Request v_ACK_Request; + tc_ack.start(PX_SIP_TACK); + + alt + { + [] SIPP.receive(p_ACK) -> value v_ACK_Request + { + tc_ack.stop; + } + // INVITE may be repeated and shall be ignored + []SIPP.receive(mw_INVITE_Request_Base) + { + repeat; + } + // Ignore othe message + [] SIPP.receive + { + repeat; + } + } + } //end f_awaitingAckRequest + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE(in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + //f_send200OK(); + } + } + } // end f_awaitingBYE + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply + (in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + } + } // end f_awaitingBYE_sendReply + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply_PassOnTimeout(in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + vc_boo_request := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + []tc_resp.timeout + { + vc_boo_request := false; + } + + } + } // end f_awaitingBYE_sendReply_PassOnTimeout + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE(in template MESSAGE_Request p_MSG) runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + //f_send200OK(); + } + } + } // end of f_awaitingMESSAGE + + /** + * @desc await MESSAGE request + * reply with 200 OK + */ + function f_awaitingMESSAGE_sendReply() runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(mw_MESSAGE_Request_Base(vc_callId))-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + f_send200OK(); + } + } + + } // end of f_awaitingMESSAGE_sendReply + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE_sendReply_PassOnTimeout(in template MESSAGE_Request p_MSG) runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + //f_send200OK(); + vc_boo_request := true; + f_send200OK(); + //setverdict (pass); + } + [] tc_resp.timeout + { + vc_boo_request := false; + //setverdict (pass); + } + } + } // end of f_awaitingMESSAGE_PassOnTimeout + + /** + * @desc await NOTIFY request + * reply with 200 OK + */ + function f_awaitingNOTIFY_sendReply(in template NOTIFY_Request p_MSG) runs on SipComponent + { + var NOTIFY_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the NOTIFY + f_send200OK(); + } + } + } // end of f_awaitingNOTIFY_sendReply + + /** + * @desc await PRACK request + * reply with 200 OK + */ + function f_awaitingPRACK_sendReply(in template PRACK_Request p_MSG) runs on SipComponent + { + var PRACK_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the PRACK + f_send200OK(); + } + } + + } // end of f_awaitingPRACK_sendReply + + /** + * @desc await PUBLISH request + * reply with 200 OK + */ + function f_awaitingPUBLISH_sendReply(in template PUBLISH_Request p_MSG) runs on SipComponent + { + var PUBLISH_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the PUBLISH + f_send200OK(); + } + } + + } // end of f_awaitingPUBLISH_sendReply + + /** + * @desc await UPDATE request + */ + function f_awaitingUPDATE(in template UPDATE_Request p_MSG) runs on SipComponent + { + var UPDATE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingUPDATE + + /** + * @desc await UPDATE request + * reply with 200 OK + */ + function f_awaitingUPDATE_sendReply(in template UPDATE_Request p_MSG) runs on SipComponent + { + var UPDATE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the UPDATE + f_send200OK(); + } + } + + } // end of f_awaitingUPDATE_sendReply + +} // end AwaitingMessage + +group SendMessage { + + /** + * + * @desc send ACK message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendACK(template ACK_Request p_request) runs on SipComponent + { + p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + // n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send BYE message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendBYE(template BYE_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "BYE"); // cseq, contact, branch, via + p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send CANCEL message + * @param p_request template of the message to be sent + */ + function f_SendCANCEL(template CANCEL_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "CANCEL"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send INVITE message + * @param p_request template of the message to be sent + */ + function f_SendINVITE(template INVITE_Request p_request) runs on SipComponent + { + vc_requestFor407 := valueof(p_request); + SIPP.send(p_request) to vc_sent_label; + if(PX_SIP_INVITE_AUTHENTICATION_ENABLED) {a_altstep_401or407();}; + } + + /** + * + * @desc send PRACK message + * @param p_request template of the message to be sent + */ + function f_SendPRACK(template PRACK_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send PUBLISH message + * @param p_request template of the message to be sent + */ + function f_SendPUBLISH(template PUBLISH_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send REGISTER message + * @param p_request template of the message to be sent + */ + function f_SendREGISTER(template REGISTER_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send SUBSCRIBE message + * @param p_request template of the message to be sent + */ + function f_SendSUBSCRIBE(template SUBSCRIBE_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send UPDATE message + * @param p_request template of the message to be sent + */ + function f_SendUPDATE(template UPDATE_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc function send MESSAGE message + * @param p_request template of the message to be sent + */ + function f_SendMESSAGE(template MESSAGE_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc function send NOTIFY message + * @param p_request template of the notify to be sent + */ + function f_SendNOTIFY(template NOTIFY_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send 200 OK + */ + function f_send200OK() runs on SipComponent + { + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + } + + /** + * + * @desc send response + * @param p_request template of the message to be sent + */ + function f_sendResponse(template Response p_response) runs on SipComponent + { + p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_response) to vc_sent_label; + } + +} // end SendMessage + +group GlobalSteps { + /** + * + * @desc component initialization + * @param p_cSeq_s cSeq value to be assigned to the component variable + */ + function f_init_component(inout CSeq p_cSeq_s) runs on SipComponent + { + //Variables + vc_cSeq := p_cSeq_s; + + //Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate (a_clearRegistration()); + } + + /** + * + * @desc component termination + */ + function f_terminate_component() runs on SipComponent + { + deactivate; + stop; + } + + /** + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + */ + function f_init_userprofile(in integer p_user) runs on SipComponent + { + vc_userprofile.id := p_user; + + select(p_user){ + case (c_userProfile_SIP1_home) { //variant c_userProfile_SIP1_home + vc_userprofile.currPort := PX_SIP_TS1_PORT; + vc_userprofile.currIpaddr := PX_SIP_TS1_IPADDR; + vc_userprofile.contactPort := PX_SIP_TS1_PORT; + vc_userprofile.contactIpaddr := PX_SIP_TS1_IPADDR; + vc_userprofile.bearerIpaddr := PX_SIP_TS1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_SIP_TS1_LOCAL_DOMAIN; + vc_userprofile.publUsername := PX_SIP_TS1_LOCAL_USER; + vc_userprofile.qop := PX_SIP_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_SIP_SUT_UE1_USERNAME; + vc_userprofile.passwd := PX_SIP_SUT_UE1_PASSWD; + vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; + } + case (c_userProfile_SIP2_home) { //variant c_userProfile_SIP2_home + vc_userprofile.currPort := PX_SIP_TS2_PORT; + vc_userprofile.currIpaddr := PX_SIP_TS2_IPADDR; + vc_userprofile.contactPort := PX_SIP_TS2_PORT; + vc_userprofile.contactIpaddr := PX_SIP_TS2_IPADDR; + vc_userprofile.bearerIpaddr := PX_SIP_TS2_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_SIP_TS2_LOCAL_DOMAIN; + vc_userprofile.publUsername := PX_SIP_TS2_LOCAL_USER; + vc_userprofile.qop := PX_SIP_SUT_UE2_QOP; + vc_userprofile.privUsername := PX_SIP_SUT_UE2_USERNAME; + vc_userprofile.passwd := PX_SIP_SUT_UE2_PASSWD; + vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; + } + + } + } + + /** + * + * @desc function waits for particular time that allows the SUT to return to idle state + */ + function f_awaitSUTidle() runs on SipComponent + { + vc_ignore4xx := true; // allow 4xx in default + tc_noAct.start; + alt { + [] tc_noAct.timeout{} + } + } + + /** + * + * @desc function waits for particular time before next expected message + */ + function f_wait(float p_time) runs on SipComponent + { + tc_noAct.start(p_time); + alt { + [] tc_noAct.timeout{} + } + } + + /** + * + * @desc function cause termination of a PTC + * @param p_syncPoint dummy parameter (copied from the common lib) + */ + function f_check2Null(in charstring p_syncPoint) runs on SipComponent + { + //!= pass does not work, because in case of "none" execution shall continue + if (getverdict == inconc or getverdict == fail){ + log("**** f_check2Null: Verdict evaluated to fail or inconc. Stopping test execution now "); + f_selfOrClientSyncAndVerdict (p_syncPoint, e_error) ; + }//end if + } + +}// end group GlobalSteps + +group Registration { + + /** + * + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration(inout CSeq p_cSeq_s, template REGISTER_Request p_register, in boolean p_auth) runs on SipComponent + { + var REGISTER_Request v_request := valueof(p_register); + + if (PX_SIP_REGISTRATION) + { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(v_request); //LibSip + + //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + // Re-send protected REGISTER + f_SendREGISTER(v_request);//LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + + }; + }//end function f_Registration + + + /** + * + * @desc remove registration + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration(inout CSeq p_cSeq) runs on SipComponent + { + var CommaParam_List v_challenge; + var Credentials v_credentials; + var REGISTER_Request v_request := valueof(m_REGISTER_Request_expires(vc_requestUri, vc_callId, + p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0")); + + if (PX_SIP_REGISTRATION) + { + f_setHeaders_deREGISTER(p_cSeq); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + // Re-send protected REGISTER + f_SendREGISTER(v_request);//LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq); + } + } + } // end f_RemoveRegistration + + /** + * + * @desc remove registration without authorization + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration_wo_authorization(inout CSeq p_cSeq) runs on SipComponent + { + var SemicolonParam_List tmp_params; + if (PX_SIP_REGISTRATION) + { + f_setHeaders_deREGISTER(p_cSeq); + f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, + vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0" )); + f_awaitingOkResponse(p_cSeq); + } + } // end f_RemoveRegistration_wo_authorization + +}//end group Registration + + group Subscription { + + /** + * + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_register subscribe template + */ + function f_Subscription(inout CSeq p_cSeq_s, template SUBSCRIBE_Request p_subscribe) runs on SipComponent + { + f_setHeaders_SUBSCRIBE(p_cSeq_s); + //send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + f_awaitingOkResponse(p_cSeq_s); + + //await NOTIFY and send reply 200 OK + f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(vc_callId)); + + }//end function f_Subscription + + }//end group Subscription + +group Preambles { + + /** + * + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_SIP_preamble_woREG(in integer p_userprofile, inout CSeq p_cSeq_s) runs on SipComponent + { + //varables and altsteps + f_init_component(p_cSeq_s); + + //Preamble + f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT(PX_SIP_SDP_dyn, PX_SIP_SDP_encoding)), vc_userprofile)); + } + + /** + * + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_SIP_preamble_withREG(in integer p_userprofile, inout CSeq p_cSeq_s, template REGISTER_Request p_register) runs on SipComponent + { + //preamble + f_SIP_preamble_woREG(p_userprofile, p_cSeq_s); + + //Registration, Awaiting + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + } + +}// end group Preambles + +group Postambles { + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on SipComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, PX_SIP_BYE_CAUSE)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + [] tc_resp.timeout + { + stop + } + } + } // end function f_terminateCall + + function f_cancelCall(template CANCEL_Request p_request) + runs on SipComponent + { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + + // Sending of a CANCEL request with the same Cseq + f_SendCANCEL(p_request); + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) + { + tc_resp.stop; + } + } + } + +} // end group Postambles + +group SipChecks +{ + + + /* + * @desc check the presence of conversation at SIP side + * + */ + function f_check_Conversation() runs on SipComponent + { + var boolean v_result; + var charstring v_question := "confirm if conversation at SIP port"; + + if (PX_SIP_CheckConversation) { + opPort.call(s_SIP_conversation:{v_question, -}) + {[] opPort.getreply(s_SIP_conversation:{-, true}) {} + [] opPort.getreply(s_SIP_conversation:{-, false}) + {all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop;} + } + } + + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies + + return + } // end of f_check_Conversation + + /* + * @desc check the presence of conversation at SIP side + * + */ + function f_check_Ringing() runs on SipComponent + { + var boolean v_result; + var charstring v_question := "confirm if ringing at SIP port"; + + if (PX_SIP_CheckRinging) { + opPort.call(s_SIP_ringing:{v_question, -}) + {[] opPort.getreply(s_SIP_ringing:{-, true}) {} + [] opPort.getreply(s_SIP_ringing:{-, false}) + {all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop;} + } + } + + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return + } // end of f_check_Ringing + +} + +group DefaultsTestStep +{ + + + /** + * @desc This default handles receiving of the sync server + * STOP message and calls the RT HUT postamble. (copy from common lib) + */ + altstep a_Sip_catchSyncStop() runs on SipComponent + { + [] syncPort.receive(m_syncServerStop) + { + tc_sync.stop ; + log("**** a_Sip_catchSyncStop: Test component received STOP signal from MTC - going to IDLE state **** "); + //TODO complete postamble + f_terminate_component(); + log("**** a_Sip_catchSyncStop: TEST COMPONENT NOW STOPPING ITSELF! **** ") ; + setverdict(inconc); + stop ; + } + } + + + /** + * + * @desc main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration() runs on SipComponent + { + var Response v_response; + var Request v_request; + + [] any timer.timeout + { + setverdict(fail); + all timer.stop; + //TODO check how to solve release of call + //f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration state or transaction state + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) + { + repeat + } + + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive (mw_BYE_Request_Base(?)) + { + repeat + } + + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)) + { + repeat + } + + // ignore 181 if flag is set (following TS 183004 §4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181,vc_callId, vc_cSeq))-> value v_response sender vc_sent_label + { + f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); + repeat; + } + + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183,vc_callId, vc_cSeq)) + { + repeat; + } + + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484,vc_callId, vc_cSeq)) + { + repeat + } + + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx,vc_callId, ?))-> value v_response sender vc_sent_label + { + f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat + } + + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) + { + repeat + } + + [] SIPP.receive(mw_INFO_Request_Base(vc_callId))->value v_request sender vc_sent_label + { + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + repeat + } + + //awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base)->value v_request sender vc_sent_label + { + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via + f_SendNOTIFY(m_NOTIFY_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + f_awaitingOkResponse(vc_cSeq); + repeat + } + + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?))-> value v_request sender vc_sent_label + { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?))-> value v_request sender vc_sent_label + { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_request); + //Answer to the CANCEL + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + [] SIPP.receive + { + setverdict(fail); + all timer.stop; + f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between registration state or transaction state + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + } + + /** + * + * @desc altstep handle authentication for INVITE message + */ + altstep a_altstep_401or407() runs on SipComponent { + [] any port.check (receive) { + var CommaParam_List v_challenge; + var Credentials v_Credentials; + var Response v_Response; + var Request v_Request := valueof (vc_requestFor407); + + tc_ack.start (PX_SIP_TACK); + alt { + [] SIPP.receive (mw_Response_Base((c_statusLine401,c_statusLine407), + vc_callId, + vc_cSeq)) -> value v_Response { + tc_ack.stop; + // get tag from To header if available + vc_to := v_Response.msgHeader.toField; + if (vc_cSeq.method == "INVITE"){ + // send ACK + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + // resent the INVITE message with Proxyauthorization header include + // Extract challenge and calculate credentials for a response. + if (ischosen (v_Response + .msgHeader + .proxyAuthenticate + .challenge + .otherChallenge // instead of digestCln (changed by axr to comply to alcatel) + )) { + v_challenge := + v_Response + .msgHeader + .proxyAuthenticate + .challenge + .otherChallenge.authParams; + v_Credentials := + f_calculatecCredentials(vc_userprofile, + vc_requestFor407.msgHeader.cSeq.method, + v_challenge); + } else { + log ("No scheme in Proxy Authenticate header!!"); + setverdict (inconc); + stop; + } + + vc_branch := c_brenchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := { + valueof (m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + v_Request.msgHeader.via := vc_via; + // Increment CSeq sequence number of and add the credentials + // to the original saved INVITE message. + vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + v_Request.msgHeader.cSeq.seqNumber := + vc_cSeq.seqNumber; + v_Request.msgHeader.proxyAuthorization.fieldName := + PROXY_AUTHORIZATION_E; + v_Request.msgHeader.proxyAuthorization.credentials := + v_Credentials; + + // Re-send the saved INVITE with Authorization header + // included. + SIPP.send (v_Request) to vc_sent_label; + } + } + } + } + + +} // end of group DefaultsTestStep +} // end module LibSip_Steps diff --git a/LibSip/LibSip_Templates.ttcn b/LibSip/LibSip_Templates.ttcn new file mode 100644 index 0000000..7335e66 --- /dev/null +++ b/LibSip/LibSip_Templates.ttcn @@ -0,0 +1,2323 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibSip_Templates +{ + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + + + group SubFields + { + + template Addr_Union m_AddrUnion_NameAddr(template NameAddr p_nameAddr) := + { + nameAddr := p_nameAddr + } + + template Addr_Union m_AddrUnion_DisplayAndSipUrl(in charstring p_displayName, template SipUrl p_addrSpec) := + { + nameAddr := m_CallingAddr(p_displayName, p_addrSpec) + } + + template NameAddr m_CallingAddr(template charstring p_displayName, template SipUrl p_addrSpec) := + { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template CommaParam_List mw_digestResponse(in GenericParam p_genericParam) := + { + *,p_genericParam,* // c_Integrity_protected_yes + } + + template SemicolonParam_List m_cpc := + {{"cpc",PX_SIP_ISUP_CPC_VALUE}}; + + template SemicolonParam_List m_ReasonParams + (template charstring p_cause, template charstring p_text) := + {m_Cause(p_cause),m_Text(p_text)}; + + template ReasonValue m_ReasonValue + (template charstring p_cause, template charstring p_text) := + { + token := "Q.850", + reasonParams := m_ReasonParams(p_cause,p_text) + }; + + template RouteBody mw_routeBody (template SipUrl p_sipurl):= + { + nameAddr := + { + displayName := *, + addrSpec := p_sipurl + }, + rrParam := * + } + + template SentProtocol m_SentProtocol (charstring p_protocol) := + {protocolName := c_sipName, + protocolVersion:= c_sipVersion, + transport:= p_protocol}; + + template SipUrl m_SipUrl_currDomain(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.homeDomain, // hostname, IPv4 or IPv6 as a charstring + portField := omit //p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_contactIpaddr(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.contactIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.contactPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_contactIpaddrAndCpc(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername & "; cpc=" & PX_SIP_ISUP_CPC_VALUE,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.contactIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.contactPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_currIpaddr(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.currIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_Anonymous := // SIP-URL with a calles party number + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := "Anonymous",// charstring + password := omit // optional charstring + }, + hostPort := + { + host := "Anonymous.invalid", // hostname, IPv4 or IPv6 as a charstring + portField := omit //optional integer + }, + urlParameters := omit, + headers := omit + }; + + template SipUrl m_TelUrl_publUser(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_telScheme, // contains "tel" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := omit, // hostname, IPv4 or IPv6 as a charstring + portField := omit //p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl mw_SipUrl_Number(charstring p_number) := // SIP-URL with a calling party number + { + scheme := c_sipScheme, // contains "sip" + userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, + hostPort := ?, + urlParameters := *, + headers := * + }; + + template SipUrl mw_SipUrl_Anonymous := // SIP-URL with a calles party number + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := "Anonymous",// charstring + password := omit // optional charstring + }, + hostPort := + { + host := "anonymous.invalid", // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := *, + headers := * + }; + + template SipUrl mw_SipUrl_urlParam(template SemicolonParam_List p_urlParameters) := // SIP-URL with a calling party number + { + scheme := c_sipScheme, // contains "sip" + userInfo:= *, + hostPort := *, + urlParameters := p_urlParameters, + headers := * + }; + + template ContactAddress mw_ContactAddress := + { + addressField := ?, + contactParams := * + }; + + template StatusLine mw_statusLine1xx := {sipVersion := c_sipNameVersion, statusCode := (100..199), reasonPhrase := ?}; + template StatusLine mw_statusLine4xx := {sipVersion := c_sipNameVersion, statusCode := (400..499), reasonPhrase := ?}; + template StatusLine mw_statusLineFinal := {sipVersion := c_sipNameVersion, statusCode := (200..699), reasonPhrase := ?}; + + template NameAddr mw_NameAddr_DispName_User_Host(template charstring p_dn, template charstring p_user, template charstring p_host) := + { + displayName := p_dn, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, + hostPort := + { + host := p_host, // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := {m_UserPhone}, + headers := * + } + } + + template Addr_Union mw_AddrUnion_Nameaddr(template charstring p_dn, template charstring p_user, template charstring p_host):= + { + nameAddr:=mw_NameAddr_DispName_User_Host(p_dn,p_user,p_host) + } + + template SipUrl mw_SipUrl_User_Host(template charstring p_user, template charstring p_host) := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, + hostPort := + { + host := p_host, // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := {m_UserPhone}, + headers := * + } + template Addr_Union mw_AddrUnion_SipUrl(template charstring p_user, template charstring p_host):= + { + addrSpecUnion:=mw_SipUrl_User_Host(p_user,p_host) + } + + + } //end group Subfields + + + + + + group HeaderFieldTemplates { + + template GenericParam m_Cause (template charstring p_cause):= + {id:="cause", paramValue:=p_cause} + + template Authorization m_Authorization (template Credentials p_Credentials):= + { + fieldName := AUTHORIZATION_E, + body := p_Credentials + } + + template Authorization m_Authorization_digest (template CommaParam_List p_CommaParam_List):= + { + fieldName := AUTHORIZATION_E, + body := {digestResponse := p_CommaParam_List} + } + + template Authorization m_add_Authorization_digest (in Authorization p_auth, template CommaParam_List p_CommaParam_List):= + { + fieldName := AUTHORIZATION_E, + body := {digestResponse := f_merge_CommaParam_List(p_auth.body.digestResponse,valueof(p_CommaParam_List))} + } + + template Authorization m_Authorization_other := + { + fieldName := AUTHORIZATION_E, + body := {otherResponse := ?} + } + + template Contact m_Contact(template SipUrl p_sipUrl) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := p_sipUrl}, + contactParams := omit + } + } + } //end contactBody + }//end m_Contact + + template Contact m_Contact_profile(in SipUserProfile p_userprofile) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := omit + } + } + } //end contactBody + }//end m_Contact + + + template Contact m_Contact_profile_expires(in SipUserProfile p_userprofile, in charstring p_expires) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := {{"expires",p_expires}} + } + } + } //end contactBody + }//end m_Contact + + template From m_From(template NameAddr p_nameAddr, charstring p_tag_str) := + { + fieldName := FROM_E, + addressField := + {nameAddr := p_nameAddr},//end addressField + fromParams := {{id := c_tagId, paramValue := p_tag_str}} + }; + + template Event m_Event_conference := + { + fieldName := EVENT_E, + eventType := "conference", + eventParams := omit + }; + + template Event m_Event_presence := + { + fieldName := EVENT_E, + eventType := "presence", + eventParams := omit + }; + + template Event m_Event_reg := + { + fieldName := EVENT_E, + eventType := "reg", + eventParams := omit + }; + + template Expires m_Expires_600000 := + { + fieldName := EXPIRES_E, + deltaSec := "600000" + }; + + template Expires m_Expires (charstring p_deltaSec):= + { + fieldName := EXPIRES_E, + deltaSec := p_deltaSec + }; + + template PAssertedID m_PAssertedID(template Addr_Union p_pAssertedIDValue) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + }; + + template PAssertedID m_PAssertedID_2x(template Addr_Union p_pAssertedIDValue1, template Addr_Union p_pAssertedIDValue2) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue1, p_pAssertedIDValue2} + }; + + template PAssertedID mw_PAssertedID(template PAssertedIDValue p_pAssertedIDValue) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + }; + + template PAssertedIDValue mw_PAssertedIDValue(template SipUrl p_SipUrl) := + { + addrSpecUnion := p_SipUrl + }; + + template PPreferredID m_PPreferredID(template Addr_Union p_pPreferredIDValue) := + { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := {p_pPreferredIDValue} + }; + + template Privacy m_Privacy(PrivacyValue p_privacy) := + { + fieldName := PRIVACY_E, + privValueList := {p_privacy} + }; + + template RAck m_RAck(integer p_responseNum, integer p_seqNumber, charstring p_method) := + { + fieldName := RACK_E, + responseNum := p_responseNum, + seqNumber := p_seqNumber, + method := p_method + }; + + template Reason m_Reason(integer p_cause) := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(p_cause),"dummy")} + }; + + template Reason m_Reason21 := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(21),"call reject")} + }; + + template RecordRoute m_recordRoute_currIpAddr (in SipUserProfile p_userprofile):= + { + fieldName := RECORD_ROUTE_E, + routeBody := {{nameAddr := {displayName := omit, + addrSpec := {scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := {host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}, + urlParameters := omit, + headers := omit} + }, + rrParam := omit} + }}; + + template ReferredBy m_ReferredBy_SipUrl(template SipUrl p_sipUrl) := + { + fieldName := REFERRED_BY_E, + nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, + referredbyIdParams := omit + } + + template ReferTo m_ReferTo_SipUrl(template SipUrl p_sipUrl) := + { + fieldName := REFER_TO_E, + nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, + referToParams := {{id:="method",paramValue :="INVITE"}} + } + + template Require m_Require_100rel := + { + fieldName := REQUIRE_E, + optionsTags := {c_tag100rel} + }; + + template Require m_Require_prec := + { + fieldName := REQUIRE_E, + optionsTags := {c_tagPrecond} + }; + + template Supported m_Supported_prec := + { + fieldName:=SUPPORTED_E, + optionsTags:={c_tagPrecond} + } + + template Supported m_Supported_100rel_prec := + { + fieldName:=SUPPORTED_E, + optionsTags:={c_tag100rel, c_tagPrecond} + } + + template GenericParam m_Text (template charstring p_text):= + {id:="text", paramValue:=p_text} + + template GenericParam m_UserPhone := + { + id := "user", + paramValue := "phone" + } + + template To m_To(template SipUrl p_sipUrl) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := "ETSI Tester", // optional charstring + addrSpec := p_sipUrl // SipUrl + }},//end addressField + toParams := omit + }; + + template To m_To_SipUrl(SipUrl p_sipUrl) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }},//end addressField + toParams := omit + }; + + template To mw_To_NameAddr_SipUrl(template charstring p_dn, template charstring p_user, template charstring p_host) := + { + fieldName := TO_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn,p_user,p_host),mw_AddrUnion_SipUrl(p_user,p_host)), + toParams := omit + } + + template From mw_From(template SipUrl p_sipUrl) := { + fieldName := FROM_E, + addressField := { addrSpecUnion := p_sipUrl}, + fromParams:= * + } + + template ViaBody m_ViaBody_currIpaddr(charstring branch_val,in SipUserProfile p_userprofile) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}, + viaParams:={{id :=c_branchId,paramValue :=branch_val}} + } + + template ViaBody mw_ViaBody_interface(HostPort p_hostport) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_hostport.host, portField:= p_hostport.portField}, + viaParams:=* + } + + template Via mw_Via(template ViaBody p_viabody) := + { + fieldName := VIA_E, + viaBody:= ? // superset(p_viabody) + } + + template CallId mw_CallId_any := + { + fieldName := CALL_ID_E, + callid := ? + } + + template Privacy mw_Privacy_id := + { + fieldName := PRIVACY_E, + privValueList := {*,"id",*} + }; + + template Privacy mw_Privacy_user := + { + fieldName := PRIVACY_E, + privValueList := {*,"user",*} + }; + + template Reason mw_Reason(integer p_cause) := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(p_cause),?)} + }; + + template RecordRoute mw_recordroute (template RouteBody p_routeBody):= + { + fieldName := RECORD_ROUTE_E, + routeBody := ? // superset(p_routeBody) + }; + + template Route mw_route (template RouteBody_List p_routeBody):= + { + fieldName := ROUTE_E, + routeBody := p_routeBody + }; + + } // end of group HeaderFieldTemplates + + +group MessageTemplates { +group dummy_templates { + group dummy_parameter_send { + + template RequestLine m_requestLine_dummy := + { + method := ACK_E, + requestUri := c_empty_RequestUri, + sipVersion := c_sipNameVersion + } + + template MessageHeader m_msgHeader_dummy := + { + accept := omit, + acceptContact := omit, + acceptEncoding := omit, + acceptLanguage := omit, + alertInfo := omit, + allow := omit, + allowEvents := omit, // RFC3265 + authenticationInfo := omit, + authorization := omit, + callId := c_empty_CallId, + callInfo := omit, + contact := omit, + contentDisposition := omit, + contentEncoding := omit, + contentLanguage := omit, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= 0}, + contentType := omit, //if message body present m, else not present + cSeq := c_empty_cSeq, + date := omit, + errorInfo := omit, + event := omit, // RFC3265 + expires := omit, + fromField := c_empty_From, + historyInfo := omit, // RFC4244 + inReplyTo := omit, + maxForwards := c_maxForwards70, + mimeVersion := omit, + minExpires := omit, + minSE := omit, // RFC4028 + organization := omit, + pAccessNetworkInfo := omit, // RFC3455 + pAssertedID := omit, + pAssertedService := omit, + pAssociatedURI := omit, + path := omit, // RFC3327 + pCalledPartyID := omit, // RFC3455 + pChargingFunctionAddresses := omit, // RFC3455 + pChargingVector := omit, // RFC3455 + pEarlyMedia := omit, // RFC5009 + pMediaAuthorization := omit, // RFC3313 + pPreferredID := omit, + priority := omit, + privacy := omit, + proxyAuthenticate := omit, + proxyAuthorization := omit, + proxyRequire := omit, + pVisitedNetworkID := omit, // RFC3455 + rAck := omit, + rSeq := omit, + reason := omit, + recordRoute := omit, + referredBy := omit, // RFC3892 - REFER method + referTo := omit, // RFC3515 - REFER method + replyTo := omit, + require := omit, + retryAfter := omit, + route := omit, + securityClient := omit, // RFC3329 + securityServer := omit, // RFC3329 + securityVerify := omit, // RFC3329 + server := omit, + serviceRoute := omit, // RFC3608 + sessionExpires := omit, // RFC4028 + subject := omit, + subscriptionState := omit, // RFC3265 + supported := omit, + timestamp := omit, + toField := c_empty_To, + unsupported := omit, + userAgent := omit, + via := c_empty_Via, + warning := omit, + wwwAuthenticate := omit, + undefinedHeader_List := omit + } + } // group dummy_parameter_send + + group dummy_parameter_receive { + + template RequestLine mw_requestLine_dummy := + { + method := ACK_E, + requestUri := ?, + sipVersion := c_sipNameVersion + } + + template MessageHeader mw_msgHeader_dummy := + { + accept := *, + acceptContact := *, + acceptEncoding := *, + acceptLanguage := *, + alertInfo := *, + allow := *, + allowEvents := *, // RFC3265 + authenticationInfo := *, + authorization := *, + callId := ?, + callInfo := *, + contact := *, + contentDisposition := *, + contentEncoding := *, + contentLanguage := *, + contentLength := ?, + contentType := *, + cSeq := ?, + date := *, + errorInfo := *, + event := *, // RFC3265 + expires := *, + fromField := ?, + historyInfo := *, // RFC4244 + inReplyTo := *, + maxForwards := ?, + mimeVersion := *, + minExpires := *, + minSE := *, // RFC4028 + organization := *, + pAccessNetworkInfo := *, // RFC3455 + pAssertedID := *, + pAssertedService := *, + pAssociatedURI := *, + path := *, // RFC3327 + pCalledPartyID := *, // RFC3455 + pChargingFunctionAddresses := *, // RFC3455 + pChargingVector := *, // RFC3455 + pEarlyMedia := *, // RFC5009 + pMediaAuthorization := *, // RFC3313 + pPreferredID := *, + priority := *, + privacy := *, + proxyAuthenticate := *, + proxyAuthorization := *, + proxyRequire := *, + pVisitedNetworkID := *, // RFC3455 + rAck := *, + rSeq := *, + reason := *, + recordRoute := *, + referredBy := *, // RFC3892 - REFER method + referTo := *, // RFC3515 - REFER method + replyTo := *, + require := *, + retryAfter := *, + route := *, + securityClient := *, // RFC3329 + securityServer := *, // RFC3329 + securityVerify := *, // RFC3329 + server := *, + serviceRoute := *, // RFC3608 + sessionExpires := *, // RFC4028 + subject := *, + subscriptionState := *, // RFC3265 + supported := *, + timestamp := *, + toField := ?, + unsupported := *, + userAgent := *, + via := ?, + warning := *, + wwwAuthenticate := *, + undefinedHeader_List := * + } + }//end group dummy_parameter_receive + + group dummy_request_templates_send { + + template ACK_Request m_ACK_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template BYE_Request m_BYE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template CANCEL_Request m_CANCEL_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template INVITE_Request m_INVITE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template MESSAGE_Request m_MESSAGE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template NOTIFY_Request m_NOTIFY_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template PRACK_Request m_PRACK_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template PUBLISH_Request m_PUBLISH_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template REGISTER_Request m_REGISTER_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template REFER_Request m_REFER_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template UPDATE_Request m_UPDATE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + }//end group dummy_request_templates_send + group dummy_request_templates_receive{ + + template ACK_Request mw_ACK_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template BYE_Request mw_BYE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template CANCEL_Request mw_CANCEL_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template INFO_Request mw_INFO_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template INVITE_Request mw_INVITE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template MESSAGE_Request mw_MESSAGE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template NOTIFY_Request mw_NOTIFY_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template PRACK_Request mw_PRACK_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template PUBLISH_Request mw_PUBLISH_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template REFER_Request mw_REFER_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template REGISTER_Request mw_REGISTER_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template UPDATE_Request mw_UPDATE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + }//end group dummy_request_templates_receive + + group dummy_response_templates_send{ + + template Response m_Response_Dummy := + { + statusLine := c_statusLine100, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + } // group dummy_response_templates_send + + group dummy_response_templates_receive{ + template Response mw_Response_Dummy := + { + statusLine := ?, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + } // group dummy_response_templates_receive +} + +group base_templates{ + + group request_send { + + + template ACK_Request m_ACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_ACK_Dummy := + { + requestLine := + { + method := ACK_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "ACK"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template BYE_Request m_BYE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via) modifies m_BYE_Dummy := + { + requestLine := + { + method := BYE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template CANCEL_Request m_CANCEL_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via) modifies m_CANCEL_Dummy := + { + requestLine := + { + method := CANCEL_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template INVITE_Request m_INVITE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) modifies m_INVITE_Dummy := + { + requestLine := + { + method := INVITE_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template MESSAGE_Request m_MESSAGE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_MESSAGE_Dummy := + { + requestLine := + { + method := MESSAGE_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template NOTIFY_Request m_NOTIFY_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_NOTIFY_Dummy := + { + requestLine := + { + method := NOTIFY_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + //contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + //contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "NOTIFY"}, + fromField := p_from, + toField := p_to, + via := p_via + }//, + //messageBody := p_mb + } + + template PRACK_Request m_PRACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, RAck p_RAck) + modifies m_PRACK_Dummy := + { + requestLine := + { + method := PRACK_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PRACK"}, + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := omit + } + + //in reality PUBLISH request contain xml in content + template PUBLISH_Request m_PUBLISH_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template Event p_event, template RAck p_RAck, template MessageBody p_mb) + modifies m_PUBLISH_Dummy := + { + requestLine := + { + method := PUBLISH_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PUBLISH"}, + event := p_event, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template REFER_Request m_REFER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, Contact p_contact, + From p_from, template To p_to, Via p_via, template ReferTo p_referTo, template ReferredBy p_referredBy) + modifies m_REFER_Dummy := + { + requestLine := + { + method := REFER_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "REFER"}, + fromField := p_from, + referTo := p_referTo, + referredBy := p_referredBy, + toField := p_to, + via := p_via + } + } + + template REGISTER_Request m_REGISTER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization) modifies m_REGISTER_Dummy := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_Base (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_SUBSCRIBE_Dummy := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template UPDATE_Request m_UPDATE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template MessageBody p_mb) modifies m_UPDATE_Dummy := + { + requestLine := + { + method := UPDATE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "UPDATE"}, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + } // end of group message_send + + group request_receive { + + template ACK_Request mw_ACK_Request_Base (template CallId p_callId) modifies mw_ACK_Dummy := + { + requestLine := + { + method := ACK_E + }, + msgHeader := + { + callId := p_callId + } + } + + template BYE_Request mw_BYE_Request_Base(template CallId p_callId) modifies mw_BYE_Dummy := + { + requestLine := + { + method := BYE_E + }, + msgHeader := + { + callId := p_callId + } + } + + template CANCEL_Request mw_CANCEL_Request_Base (template CallId p_callId) modifies mw_CANCEL_Dummy := + { + requestLine := + { + method := CANCEL_E + }, + msgHeader := + { + callId := p_callId + } + } + + template INFO_Request mw_INFO_Request_Base(template CallId p_callId) modifies mw_INFO_Dummy := + { + requestLine := + { + method := INFO_E + }, + msgHeader := + { + callId := p_callId + } + } + + template INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := + { + requestLine := + { + method := INVITE_E + } + } + + template MESSAGE_Request mw_MESSAGE_Request_Base(template CallId p_callId) modifies mw_MESSAGE_Dummy := + { + requestLine := + { + method := MESSAGE_E + }, + msgHeader := + { + callId := p_callId, + contact := omit + } + } + + template NOTIFY_Request mw_NOTIFY_Request_Base (CallId p_callId) modifies mw_NOTIFY_Dummy := + { + requestLine := + { + method := NOTIFY_E + }, + msgHeader := + { + callId := p_callId + } + } + + template PRACK_Request mw_PRACK_Request_Base(template CallId p_callId) modifies mw_PRACK_Dummy := + { + requestLine := + { + method := PRACK_E + }, + msgHeader := + { + callId := p_callId + } + } + + template PUBLISH_Request mw_PUBLISH_Request_Base(template CallId p_callId) modifies mw_PUBLISH_Dummy := + { + requestLine := + { + method := PUBLISH_E + }, + msgHeader := + { + callId := p_callId + } + } + + template REFER_Request mw_REFER_Request_Base (CallId p_callId) modifies mw_REFER_Dummy := + { + requestLine := + { + method := REFER_E + }, + msgHeader := + { + callId := p_callId + } + } + + template REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := + { + requestLine := + { + method := REGISTER_E + } + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := + { + requestLine := + { + method := SUBSCRIBE_E + } + } + + template UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := + { + requestLine := + { + method := UPDATE_E + }, + msgHeader := + { + callId := p_callId + } + } + + } // end group request_receive + + group response_send { + + template Response m_Response_Base (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Dummy:= + { + statusLine := p_statusLine, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + + + } // end group response_send + + group response_receive { + + template Response mw_Response_Base (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Dummy:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + } // end group message_receive + +} // end group full_templates + +group modified_templates { + +group request_send { + + template ACK_Request m_ACK_Request_route (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Route p_route) + modifies m_ACK_Request_Base + := + { + msgHeader := + { + route := p_route + } + } + + template ACK_Request m_ACK_Request_sdp (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via,template MessageBody p_mb ) + modifies m_ACK_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + + template BYE_Request m_BYE_Request_cause + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via, integer p_cause) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + reason := m_Reason(p_cause) // PIXIT value + } + } + + template INVITE_Request m_INVITE_Request_sdp + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template MessageBody p_mb) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + + template REGISTER_Request m_REGISTER_Request_expires + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, + template Authorization p_authorization, charstring p_expires) + modifies m_REGISTER_Request_Base + := + { + msgHeader := + { + authorization := p_authorization, + expires := { + fieldName := EXPIRES_E, + deltaSec := p_expires } + } + } + + + + +} // end group request_send + + +group request_receive { + + template BYE_Request mw_BYE_Request_Reason(template CallId p_callId, integer p_cause) modifies mw_BYE_Request_Base := + { + msgHeader := + { + reason := mw_Reason(p_cause) + } + } + + template INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base + := + { + msgHeader := {expires := ?} + } + + template INVITE_Request mw_INVITE_Request_callid(CallId p_callid) modifies mw_INVITE_Request_Base + := + { + msgHeader := {callId := p_callid} + } + + template INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_INVITE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + template INVITE_Request mw_INVITE_Request_PaccessNetworkInfo (template CallId p_callId) + modifies mw_INVITE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := ?} + } + + template REGISTER_Request mw_REGISTER_Request_ISC (template PAccessNetworkInfo p_access , template PVisitedNetworkID p_visited )modifies mw_REGISTER_Request_Base := + { + msgHeader := { + pAccessNetworkInfo := p_access, + pVisitedNetworkID := p_visited + } + + } + + + +} // end group request_receive + +group response_send { + + template Response m_Response_ext (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + msgHeader :={ + route := f_route(), + recordRoute := f_recordroute() + } + } + template Response m_Response_mbody (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, MessageBody p_mb) modifies m_Response_ext:= + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + +} // end group response_send + + +group response_receive { + + template Response mw_Response_Expires (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template DeltaSec p_deltaSec) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec} + } + } + + template Response mw_Response_Reason (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, integer p_cause) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + reason := mw_Reason(p_cause) + } + } + + template Response mw_Response_RecordRoute (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template RecordRoute p_recordRoute) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + recordRoute := p_recordRoute + } + } + + template Response mw_Response_Via (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template Via p_via) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + via := p_via + } + } + +} // end group response_receive + + +} // end group modified_templates + +} // end group MessageTemplates + +group SDP_Templates { + + group SDP_Messages { + + group base_templates { + + template SDP_Message m_SDP(SDP_media_desc p_media, in SipUserProfile p_userprofile) := { + protocol_version := 0, // v=0 + origin := { + user_name := "voicesession", + session_id := "30000", + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := p_userprofile.contactIpaddr }, + // o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", // s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } + }, //c=IN IP4 172.27.1.219 + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := {p_media} + }; + + template SDP_Message m_SDP_mediaList(SDP_media_desc_list p_media_list, in SipUserProfile p_userprofile) + := { + protocol_version := 0, // v=0 + origin := { + user_name := "voicesession", + session_id := "30000", + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := p_userprofile.contactIpaddr }, + // o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", // s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } + }, //c=IN IP4 172.27.1.219 + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := p_media_list + }; + + template SDP_Message m_SDP_media_attr_preconditions(SDP_media_desc p_media, in SipUserProfile p_userprofile, SDP_attribute_list p_atribute_list) + modifies m_SDP + := { + media_list := { + { + media_field := { + media := c_audio, + ports := { port_number := 8500, num_of_ports:=omit }, + transport := c_rtpAvp, + fmts := { "0" } + }, //m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := p_atribute_list + }} + } + + template SDP_Message mw_SDP := { + protocol_version := 0, // v=0 + origin := ?, + session_name := ?, + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := ?, + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := ? + }; + + + }//end group base_templates + + group modified_templates{ + template SDP_Message m_SDP_bandwidth(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + + template SDP_Message m_SDP_unacceptable(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + protocol_version := 1, // v=1 unacceptable version of SDP + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + + template SDP_Message m_SDP_encrypted(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + protocol_version := 1, // v=1 unacceptable version of SDP + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + }//end group modified_templates + + } // end group SDP_Messages + + group SDP_Fields { + + template SDP_media_desc m_media(template SDP_media_field p_mf) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + }; + + template SDP_media_desc m_mediaFieldBandwdthAtributes(template SDP_media_field p_mf, template SDP_bandwidth p_bw, template SDP_attribute_list p_attributes) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := p_bw, + key := omit, + attributes := p_attributes + }; + + template SDP_media_desc m_media_dynPT(charstring p_PT, charstring p_encod) := { + media_field := { + media := c_audio,//"audio", + ports := { port_number := 8500, num_of_ports:=omit }, + transport := c_rtpAvp,//"RTP/AVP", + fmts := { p_PT } + }, //m=audio 8500 RTP/AVP 8 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := { { rtpmap := { attr_value := p_PT & " " & p_encod } + } + } //a=rtpmap:8 PCMA/8000 + }; + + template SDP_media_desc m_media_unsupported := { + media_field := { + media := "video", + ports := { port_number := 11500, num_of_ports:=omit }, + transport := "RTP/AVP", + fmts := { "99" } + }, //m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := { { + rtpmap := { attr_value := "99 X-Experimental/180000"} + }} + }; + + template SDP_bandwidth m_bandwidth(template charstring loc_m, template integer loc_b) := { + modifier:=loc_m, + bandwidth:=loc_b + }; + + template SDP_bandwidth m_bandwidth_as_64:= + { + modifier:="AS", + bandwidth:=64 + } + + template SDP_bandwidth mw_bandwidth_rs:= + { + modifier:="RS", + bandwidth:=? + } + + template SDP_bandwidth mw_bandwidth_rr:= + { + modifier:="RR", + bandwidth:=? + } + + template SDP_media_field m_media_field(charstring p_media, integer p_portNum, charstring p_transport, charstring p_fmts) := + { + media := p_media, + ports := { port_number := p_portNum, num_of_ports:=omit }, + transport := p_transport, + fmts := { p_fmts } + } + + template SDP_media_field mw_media_PCMU := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { "0" } + } + + template SDP_media_field mw_media_PCMA := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { "8" } + } + + template SDP_media_field mw_media_PCMA_U_DPT := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { * } + } + + template SDP_media_field mw_media_T38 := + { + media := c_image, + ports := { port_number := ?, num_of_ports:=* }, + transport := pattern "*ptl", //udptl,tcptl + fmts := { "t38" } + } + + template SDP_media_field mw_media_G722 := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := "RTP/AVP", + fmts := { "9" } + } + + template SDP_media_field mw_media_AMR_DPT := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { * } + } + + + template SDP_attribute m_attribute_sendonly := {sendonly:={}}; + template SDP_attribute mw_attribute_sendonly := {sendonly:=*}; + template SDP_attribute m_attribute_recvonly := {recvonly:={}}; + template SDP_attribute mw_attribute_recvonly := {recvonly:=*}; + template SDP_attribute m_attribute_sendrecv := {sendrecv:={}}; + template SDP_attribute mw_attribute_sendrecv := {sendrecv:=*}; + template SDP_attribute m_attribute_inactive := {inactive:={}}; + template SDP_attribute mw_attribute_inactive := {inactive:=*}; + template SDP_attribute m_attribute_AMR_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " AMR" }}; + template SDP_attribute m_attribute_CLEARMODE_DPT := {rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " CLEARMODE/8000" }}; + template SDP_attribute m_attribute_G722 := { rtpmap := { attr_value := "9 G722/8000" }}; + template SDP_attribute m_attribute_PCMU := { rtpmap := { attr_value := "0 PCMU/8000" }}; + template SDP_attribute m_attribute_PCMU_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMU/8000" }}; + template SDP_attribute m_attribute_PCMA := { rtpmap := { attr_value := "8 PCMA/8000" }}; + template SDP_attribute m_attribute_PCMA_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMA/8000" }}; + template SDP_attribute m_attribute_T38 := { unknown := { name:=?, attr_value := pattern "*t38*" }}; + + template SDP_attribute m_attribute_curr (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= + { + curr:={preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction} + }; + template SDP_attribute m_attribute_des (charstring p_preconditionType, charstring p_strength, charstring p_statusType, charstring p_direction):= + { + des:={preconditionType := p_preconditionType, + strength := p_strength, + statusType := p_statusType, + direction := p_direction} + }; + template SDP_attribute m_attribute_conf (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= + { + conf:={preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction} + }; + + } // end group SDP_Fields + +} // end group SDP_Templates + +group MessageBodies { + + template MessageBody m_MBody_SDP(template SDP_Message p_SDP):= + { + sdpMessageBody := p_SDP + }; + + template MessageBody m_MBody_XML(template XmlBody p_xmlBody):= + { + xmlBody := p_xmlBody + }; + + template MessageBody m_MBody_longPlainText:= + { + textplain := c_longMessageContent_1300Bytes + }; + + template MessageBody m_mBody_plainText(charstring p_plaitext):= + { + textplain := p_plaitext + }; + + template MessageBody m_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= + { + mimeMessageBody := {boundary:="PX_SIP_MIME_Boundary", + mimeEncapsulatedList:= { + {content_type:="PX_SIP_SDP_ContentType", + content_disposition:=omit, + mime_encapsulated_part:={sdpMessageBody := p_sdp}}, + {content_type:="PX_SIP_ISUP_ContentType", + content_disposition:=omit, + mime_encapsulated_part:={xmlBody := p_xmlBody}} + } + } + } + + template MessageBody mw_MBody_SDP(template SDP_Message p_SDP):= + { + sdpMessageBody := p_SDP + }; + + template MessageBody mw_MBody_XML(template XmlBody p_xmlBody):= + { + xmlBody := p_xmlBody + }; + + template MessageBody mw_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= + { + mimeMessageBody := {boundary:=?, + mimeEncapsulatedList:= { + {content_type:=?, + content_disposition:=*, + mime_encapsulated_part:={sdpMessageBody := p_sdp}}, + {content_type:=?, + content_disposition:=*, + mime_encapsulated_part:={xmlBody := p_xmlBody}} + } + } + } +} +/* + * + * @desc group TemplatePreparationFunctions contain functions which are used for templates + */ +group TemplatePreparationFunctions { + + group SDPlen_calculation { + /** + * + * @desc Calculation of SDP length + * @param p_mb contain sdp message + * @return sdp_lenght + */ + function f_SDPlength(SDP_Message p_mb) return integer + { + var integer v_result:=2; // due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2+c_CRlen + lengthof(int2str(p_mb.protocol_version)); // "v=" + v_result := v_result + 2+c_CRlen + lengthof(p_mb.origin.user_name & " " & + p_mb.origin.session_id & " " & + p_mb.origin.session_version & " " & + p_mb.origin.net_type & " " & + p_mb.origin.addr_type & " " & + p_mb.origin.addr + ); // "o=" + v_result := v_result + 2+c_CRlen + lengthof(p_mb.session_name); // "s=" + if (ispresent(p_mb.information)) + {v_auxstring:=p_mb.information; v_result := v_result + 2+c_CRlen + lengthof(v_auxstring);}; // "i= " + if (ispresent(p_mb.uri)) + {v_auxstring:=p_mb.uri; v_result := v_result + 2+c_CRlen + lengthof(v_auxstring);}; // "u=" + + if (ispresent(p_mb.emails)) { + for (var integer i:=0; i 3600)) // received expires value should be higher than in 200OK - {setverdict(fail)}; - - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_REG_14_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_14_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_14_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //await subscribe from UE - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_SCSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_14_IMSS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_15_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_15_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_Registration_IMS(vc_cSeq,true); - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of UE in home - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE2); - f_Registration_IMS(vc_cSeq,true); - - // await NOTIFY (network initiated deregistration) - f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_15_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_16_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_16_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization_digest({c_Integrity_protected_no}))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_16_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_17_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_17_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_callId1; - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_Registration_IMS(vc_cSeq,false); - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - v_callId1 := vc_callId; - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of UE in home - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE2); - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization(f_calculatecCredentials_empty(vc_userprofile)))); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - // await NOTIFY (network initiated deregistration) - f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(v_callId1)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_17_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_18_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_18_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - //f_Registration_IMS(vc_cSeq,false); - - - //f_setHeaders_REGISTER_IMSVisited(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));//m_Authorization_digest({c_Integrity_protected_yes}))); //LibSip - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}) - - //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER - - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - - f_awaitingResponse(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)); - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq,mw_pChargingVector("term-ioi",?))); - - //f_setHeaders_SUBSCRIBE(p_cSeq_s); - //f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of the UE in home - f_setHeaders_2ndREGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization(f_calculatecCredentials_empty(vc_userprofile)))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_18_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_19_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_19_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - //f_Registration_IMS(vc_cSeq,false); - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}) - - //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER - - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - - f_awaitingResponse(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)); - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq,mw_pChargingVector("term-ioi",?))); - - - //f_setHeaders_SUBSCRIBE(p_cSeq_s); - //f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of the UE in home - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, omit)); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_19_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_20_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_20_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - vc_contact.contactBody.contactAddresses[0].contactParams:=omit; - f_SendREGISTER(m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization,int2str(360/*PX_SIP_REGISTRATION_exp_min-1*/))); //LibSip - - f_awaitingResponse(mw_Response_Expires(c_statusLine423, vc_callId, p_cSeq_s, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_20_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_21_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_21_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization_digest({c_Integrity_protected_no}))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_21_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_22_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_22_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingResponse(mw_Response_200onREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, f_initSipUrl(c_userProfile_PCSCFwithVisitingUE), vc_contact, f_initSipUrl(c_interfaceProfile_IMS_SUT_SCSCF))); - f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_22_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_23_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_23_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_callId; - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - v_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s)}; - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, v_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 403 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine403,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_23_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_24_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_24_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes,{"auts","invalid SQN"}}))); //LibSip - - // awaiting 401 or 403 response - f_awaitingResponse(mw_Response_PchargingVector(mw_statusLine((401,403)),vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_24_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_25_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_25_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var SipUrl v_sipUrl_To; - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, m_To(v_sipUrl_To), vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 500 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine500,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_25_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_26_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_26_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER_wo_response(); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes,{"auts","no error indicator"}}))); //LibSip - - // awaiting 403 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine403,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_26_IMS - -} // end group Registration - - group InitialRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUTvisiting, p_cSeq_s, v_register); - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_IMSI(in CSeq p_cSeq_s) runs on ImsComponent { - - var float v_expires; - timer t_subscribtion; - var template SipUrl v_sipUrl_From, v_sipUrl_To; - var boolean v_refresh_subscribe_received; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //Awaiting UE1 registration - f_awaitingRegistration_IMS(vc_cSeq); - - // preparation of from and to headers - v_sipUrl_From := f_initSipUrl(c_interfaceProfile_IMS_SUT_PCSCF1); - v_sipUrl_From.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - v_sipUrl_To.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - - // await SUBSCRIBE from P-CSCF - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), m_PAssertedID(m_AddrUnion_NameAddr(vc_request.msgHeader.path.pathValues[0].nameAddr)), mw_pChargingVector("icid-value",?))); - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - v_expires := str2float(vc_request.msgHeader.expires.deltaSec); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - - if (not(v_expires > 1200.0)) // received expires value should be higher than 1200 - {setverdict(inconc)}; - - // TESTBODY - v_refresh_subscribe_received:=false; - // await subscribtion refresh - t_subscribtion.start(v_expires-600.0); - alt - { - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - [] SIPP.receive(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *))-> value vc_request sender vc_sent_label - { - t_subscribtion.stop; - f_setHeadersOnReceiptOfSUBSCRIBE(vc_request); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - v_refresh_subscribe_received:=true; - } - [] t_subscribtion.timeout{ - //setverdict(inconc); - } - } - - // await subscribtion refresh - in case that wait timer expires before refresh, wait default receive time - PX_SIP_TWAIT - if(not (v_refresh_subscribe_received)){ - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_INI_01_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //await subscribe from UE - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_SCSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_01_IMSS - - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUTvisiting, p_cSeq_s, v_register); - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_02_IMSI - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_IMSI(in CSeq p_cSeq_s) runs on ImsComponent { - - var float v_expires; - timer t_subscribtion; - var template SipUrl v_sipUrl_From, v_sipUrl_To; - var boolean v_refresh_subscribe_received; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //Awaiting UE1 registration - f_awaitingRegistration_IMS(vc_cSeq); - - // preparation of from and to headers - v_sipUrl_From := f_initSipUrl(c_interfaceProfile_IMS_SUT_PCSCF1); - v_sipUrl_From.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - v_sipUrl_To.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - - // await SUBSCRIBE from P-CSCF - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), m_PAssertedID(m_AddrUnion_NameAddr(vc_request.msgHeader.path.pathValues[0].nameAddr)), mw_pChargingVector("icid-value",?))); - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - v_expires := str2float(vc_request.msgHeader.expires.deltaSec); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - - if (not(v_expires <= 1200.0)) // received expires value should not be higher than 1200 - {setverdict(inconc)} - // TESTBODY - else{ - v_refresh_subscribe_received:=false; - // await subscribtion refresh - t_subscribtion.start(v_expires * 0.50); - alt - { - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - [] SIPP.receive(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *))-> value vc_request sender vc_sent_label - { - t_subscribtion.stop; - f_setHeadersOnReceiptOfSUBSCRIBE(vc_request); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - v_refresh_subscribe_received:=true; - } - [] t_subscribtion.timeout{ - //setverdict(inconc); - } - } - - // await subscribtion refresh - in case that wait timer expires before refresh, wait default receive time - PX_SIP_TWAIT - if(not (v_refresh_subscribe_received)){ - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - } - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_INI_02_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_02_IMSS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_01_IMSS(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_02_IMSS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, v_notMatchingRoute, omit, m_MBody_SDP(vc_sdp_local))); - - - //await response - 400 or 100 ... - if (PC_PCSCF_handle_initial_request_with_mismatching_Route_header) - { - - f_awaitingResponseSendACK(mw_Response_Base(c_statusLine400,vc_callId, vc_cSeq)); - // send ACK - //LibSip_Steps.f_setHeadersACK(); - //f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)); - //send CANCEL of REQUEST - LibIms_Steps.f_setHeadersCANCEL(vc_cSeq,c_userProfile_ICSCFwithHomeUE); - f_SendCANCEL(m_CANCEL_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, v_notMatchingRoute)); - f_awaitingOkResponse(p_cSeq_s); - // await response - 487 - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - if (not PC_PCSCF_handle_initial_request_with_mismatching_Route_header) { - // await INVITE UE1@SUT - - f_awaitingINVITE(mw_INVITE_Request_route(mw_route({mw_routeBody(f_initSipUrl(c_interfaceProfile_IMS_SUT_SCSCF))}))); // route header from 200OK-serviceroute to UE1 - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - if (not PC_PCSCF_handle_initial_request_with_mismatching_Route_header) { - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - } - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_IMS( - mw_pChargingVector("icid-value",?), - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - mw_route({mw_routeBody(f_initSipUrl(c_userProfile_SCSCFwithHomeUE))}), - mw_Via(mw_ViaBody_interface(f_get_interfaceHostPort(vc_interfaceprofile))) // interfaceProfile_IMS_SUT_PCSCF - )); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_PAsserted_noPPreferred(m_PAssertedID(mw_UE1_Addr_display))); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - //TODO check for Record Route header when sec. association will be known - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 180 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - //TODO check for Record Route header when sec. association will be known - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send BYE await response - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with PPreferred header - f_sendResponse(m_Response_18XonINVITE_pPreferred_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact,f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // TESTBODY - - //await response - 180 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine180,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2XXonINVITE_pPreferred_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))), - vc_recordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_09_UE1 - - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // TESTBODY - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_09_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - timer t; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with not matching via header - f_sendResponse(m_Response_18XonINVITE_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - t.start(1.0); - alt{ - []t.timeout; - } - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - //await response - 180 - f_awaitingResponse(mw_Response_Via(c_statusLine180,vc_callId, vc_cSeq, vc_via)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_awaitingResponse(mw_Response_Base(c_statusLine480, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_10_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_11_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_11_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - timer t; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact, - vc_recordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - } - else - { - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - t.start(1.0); - alt{ - []t.timeout; - } - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_11_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_11_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_11_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - timer t; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - t.start(5.0); - alt{ - []t.timeout; - } - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - //await response - 200 - f_awaitingResponse(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - } - // POSTAMBLE - - else - { - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - f_awaitingResponse(mw_Response_Base(c_statusLine480, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - - vc_boo_route := true; - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } - - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_11_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_12_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_12_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var RecordRoute v_notMatchingRecordRoute := valueof(m_recordRoute_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with not matching via header - f_sendResponse(m_Response_18XonINVITE_recordRoute_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, v_notMatchingRecordRoute)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_12_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_12_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_12_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - //await response - 180 - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - //180 - check of parameters - if ((not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,0),f_get_interfaceHostPort(vc_interfaceprofile)) - or not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,1),f_get_interfaceHostPort(vc_interfaceprofile)))) // IUT_PCSCF - {setverdict(fail)}; - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_12_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_13_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_13_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var RecordRoute v_notMatchingRecordRoute := valueof(m_recordRoute_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - v_notMatchingRecordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_13_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_13_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_13_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - //await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - //200 - check of parameters - if ((not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,0),f_get_interfaceHostPort(vc_interfaceprofile)) - or not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,1),f_get_interfaceHostPort(vc_interfaceprofile)))) // IUT_PCSCF - {setverdict(fail)}; - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - if (PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } else { - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - } - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_13_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_14_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_14_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 480 with not matching via header - f_sendResponse(m_Response_4XXonINVITE_UE(c_statusLine480, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - if (PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - //await CANCEL procedure - f_awaitingCANCEL(mw_CANCEL_Request_Base(vc_callId)); - f_send200OK(); -// vc_cSeq.method := "INVITE"; -// f_sendResponse(m_Response_4XXonINVITE_UE(c_statusLine487, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit)); -// // await ACK -// f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } else - { - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } - - - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_14_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_14_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_14_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - //await response - 480 - f_awaitingResponse(mw_Response_Via(c_statusLine480,vc_callId, vc_cSeq, vc_via)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - if (PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } else { - //send ACK for 4xx reponse - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_14_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_15_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_15_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - //Send INVITE without Session expires header field - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_15_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_15_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_15_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_15_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_16_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_16_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - //Send INVITE without Session expires header and with Min-SE header field - f_SendINVITE(m_INVITE_Request_minSE_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), m_minSE(PX_IMS_SUT_PCSCF_MinSE))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_16_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_16_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_16_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - if (str2int(vc_response.msgHeader.sessionExpires.deltaSec) < str2int(PX_IMS_SUT_PCSCF_MinSE)) - { setverdict (fail);} - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_16_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_18_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_18_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send 480 to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_18_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for f_TC_IMST2_MW_INI_18_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_18_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_18_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_19_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_19_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - if(ispresent(vc_response.msgHeader.sessionExpires.deltaSec)) { - if (str2int(vc_response.msgHeader.sessionExpires.deltaSec) < str2int(PX_IMS_SUT_PCSCF_MinSE)) - { setverdict (fail);} - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send 480 to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_19_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for f_TC_IMST2_MW_INI_19_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_19_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_minSE_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)), m_minSE(PX_IMS_SUT_PCSCF_MinSE))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_19_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_20_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_20_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_20_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_20_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_20_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - f_awaitingResponse(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_20_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_21_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_21_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_200onINVITE_noPChargingVector_UE(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send BYE await response - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_21_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_21_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_21_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE_PchargingVector(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_route, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)), vc_contact, m_pChargingVector_termIoi_fixedValue(vc_userprofile.homeDomain))); - //f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq, m_pChargingVector_termIoi_fixedValue(vc_userprofile.homeDomain))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_21_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_22_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_22_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - -// v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting -// f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY is empty, only registration of UE1 to IUT is necessary - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - // send REGISTER, await 401, send REGISTER, await 200 OK -// f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_22_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_22_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_22_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var UserInfo v_barredUserInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_BARRED_PUBLIC_USER, password:=omit}; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - vc_requestUri.userInfo := v_barredUserInfo; - vc_to.addressField.nameAddr.addrSpec.userInfo := v_barredUserInfo; - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 404 - f_awaitingResponse(mw_Response_Base(c_statusLine404,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(/*m_ACK_Request_Base*/m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via,vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_22_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_23_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_23_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_23_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_23_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_23_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - vc_requestUri.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_INVALID_GRUU, password:=omit}; - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 4xx - f_awaitingResponse(mw_Response_Base((mw_statusLine4xx),vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_23_IMS - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_24_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_24_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_24_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_24_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_24_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_PAssertedService_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)), m_pAssertedService(PX_IMS_SUT_UNSUBSCRIBED_SERVICE))); - - //await response - 403 - f_awaitingResponse(mw_Response_Base(c_statusLine403,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_24_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_25_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_25_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_25_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_25_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_25_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_mBody_plainText("PX_IMS_SUT_UNSUBSCRIBED_SDP_SERVICE")))); - - //await response - 403 - f_awaitingResponse(mw_Response_Base(c_statusLine403,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_25_IMS - - } // end group InitialRequest - - group StandaloneRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_NoBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, v_notMatchingRoute, omit)); - - - //await response - 400 or 100 ... - if (PC_PCSCF_handle_standalone_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base(c_statusLine400,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else{ //if UE2 receive MESSAGE we wait for 200 Ok - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE_sendReply_PassOnTimeout(mw_MESSAGE_Request_Base); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))))); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_PAsserted_noPPreferred(vc_callId, m_PAssertedID(mw_UE1_Addr_display))); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_NoBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit)); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_PchargingVector("icid-value",?)); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_STA_03_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_STA_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_Base); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE); - // TODO check for Via header when sec. association will be known - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - // await response - 200 OK ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - // await response - 200 OK ... - f_awaitingResponsePassOnTimeout(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE); - - //send response - 200 OK with PPreferred header - f_sendResponse(m_Response_2xxonMESSAGE_pPreferredID_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_07_IMS - - } // end group StandaloneRequest - - group SubsequentRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CallId v_orig_callId; - var CSeq v_CSeq; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request with wrong Call-ID - v_orig_callId := vc_callId; - - vc_callId.callid:=f_getRndCallId(p_cSeq_s); - v_CSeq := vc_cSeq; - v_CSeq.seqNumber := p_cSeq_s.seqNumber + 10; - v_CSeq.method := "BYE"; - - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, v_CSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 403 ... - f_awaitingResponse(mw_Response_Base(c_statusLine403, ?, vc_cSeq)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, v_orig_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_SUB_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request not matching Route header - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, v_notMatchingRoute)); - - //await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_via_PChargingVector_UE(vc_callId,*, vc_via)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_SUB_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - // await SUBSCRIBE - - //UE2 has established a SUBSCRIBE dialog with UE1 - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - //f_sendResponse(m_Response_2xxonSUBSCRIBE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); - - //send PUBLISH - LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendPUBLISH(m_PUBLISH_Request_UE(vc_requestUri, vc_callId, vc_cSeq, - vc_from, vc_to, vc_via, m_Event_presence, omit, m_mBody_plainText("I'M PRESENT!"),vc_route_REG)); - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await PUBLISH - f_awaitingPUBLISH_sendReply(mw_PUBLISH_Request_PchargingVector(vc_callId,mw_pChargingVector(c_icid,?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - // POSTAMBLE - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SUB_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_orig_callId; - var CSeq v_CSeq; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request with wrong Call-ID - v_orig_callId := vc_callId; - - vc_callId.callid:=f_getRndCallId(p_cSeq_s); - v_CSeq := vc_cSeq; - v_CSeq.seqNumber := p_cSeq_s.seqNumber + 10; - v_CSeq.method := "BYE"; - - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, v_CSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 403 ... - f_awaitingResponse(mw_Response_Base(c_statusLine403, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - // send original BYE await response to clean the session - f_terminateCall_IMS(vc_requestUri, v_orig_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_headerfieldlist(vc_callId,?,vc_to,vc_from,?,*,f_recordroute(),*)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_orig_callId; - var CSeq v_CSeq; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request not matching Route header - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq/*v_CSeq*/, vc_from, vc_to, vc_via, v_notMatchingRoute)); - - //await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - // await SUBSCRIBE - - //UE2 has established a SUBSCRIBE dialog with UE1 - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - //f_sendResponse(m_Response_2xxonSUBSCRIBE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); - - //await PUBLISH with P-Charging-Vector header and send reply - f_awaitingPUBLISH_sendReply(mw_PUBLISH_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //send PUBLISH - LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; - f_SendPUBLISH(m_PUBLISH_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, - vc_from, vc_to, vc_via, m_Event_presence, omit, m_mBody_plainText("I'M PRESENT!"),vc_route,vc_recordRoute, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - // POSTAMBLE - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SUB_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1); - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_via_PChargingVector_UE( - vc_callId, - mw_pChargingVector(complement("icid-value"),?) ifpresent, - mw_Via(mw_ViaBody_interface(mw_hostPort((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN), *)) - ) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE - f_awaitingBYE(mw_BYE_Request_Base(vc_callId)); - - // send response - 200 OK with not matching Via header - f_sendResponse(m_Response_2xxonBYE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 200 OK ... - f_awaitingResponsePassOnTimeout(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 481 - f_awaitingResponse(mw_Response_Base(c_statusLine481, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_09_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - timer t_regExpires; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict()); - - // registration timer expires - t_regExpires.start(3598.0); - alt - { - [] SIPP.receive(?) - { - t_regExpires.stop; - setverdict(fail); - - } - [] t_regExpires.timeout{ - //setverdict(inconc); - } - } - - // await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - timer t_regExpires; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict()); - - // registration timer expires - t_regExpires.start(3598.0); - alt - { - [] SIPP.receive(?) - { - t_regExpires.stop; - setverdict(fail); - - } - [] t_regExpires.timeout{ - //setverdict(inconc); - } - } - - //await BYE and send 200OK TODO parameter expectations - f_awaitingBYE_sendReply(mw_BYE_Request_headerfieldlist(vc_callId,?,?,?,?,*,?,?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_10_IMS - - } // end group SubsequentRequest - - group TargetRefreshRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - - //Target refresh request - f_setHeadersGeneral(vc_cSeq, "UPDATE"); - f_SendUPDATE(m_UPDATE_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, m_MBody_SDP(vc_sdp_local))); - - // awaiting 403 response - f_awaitingResponse(mw_Response_Base(c_statusLine403, vc_callId, p_cSeq_s)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - f_awaitingNonePassOnTimeout(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, v_notMatchingRoute, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - - // await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingINVITE_PassOnTimeout(mw_INVITE_Request_Base); - } - else - { - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - f_send200OK(); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_IMS( - ?, - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - *, - * - )); - f_send200OK(); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 - f_awaitingResponse(mw_Response_RecordRoute((c_statusLine200), - vc_callId, - vc_cSeq, - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1); - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // await reINVITE with Via and Record-Route - f_awaitingINVITE(mw_INVITE_Request_RecordRoute_Via(mw_recordroute(mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - mw_Via(mw_ViaBody_interface(mw_hostPort((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN), *))) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - //f_awaitingACK(mw_ACK_Request_Base(vc_callId)); do we need to wait, due to mismatcihng VIA in 200 OK - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 403 - f_sendResponse(m_Response_Base(c_statusLine403,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - //f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponsePassOnTimeout(mw_Response_Via(mw_statusLine4xx, vc_callId, p_cSeq_s, vc_via)); -// if (vc_boo_response){ -// //send ACK -// LibSip_Steps.f_setHeadersACK(); -// f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); -// } - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 403 - f_sendResponse(m_Response_Base(c_statusLine403,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_RecordRoute(mw_statusLine4xx, vc_callId, p_cSeq_s, mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_09_IMS - - } // end group TargetRefreshRequest - - group Emergency { - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - //var REGISTER_Request v_register; - - //v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - f_IMS_preamble_woRegistration(c_userProfile_UE1atSUThome, p_cSeq_s); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), omit)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_requestLine(?, ?, v_route, ?, v_url)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_01_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_02_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_requestLine(?, ?, v_route, ?, v_url)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_03_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_SipUrl), mw_PAssertedIDValue(mw_TelUrl)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_04_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_TelUrl_publUser(vc_userprofile))))); - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?,v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_TelUrl), mw_PAssertedIDValue(mw_SipUrl)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_05_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_TelUrl_publUser(vc_userprofile))))); - - //await response - 100 ... - f_awaitingResponse(mw_Response_Base((c_statusLine100),vc_callId, vc_cSeq)); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - definition for GRUU in RequestURI is not defined in draft-ietf-sip-gruu-14 - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - f_awaitingINVITE(mw_INVITE_Request_Base); - f_send200OK(); - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_TelUrl), mw_PAssertedIDValue(mw_SipUrl)))); - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_06_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_EME_03_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_03_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_07_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_04_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_04_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_08_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_05_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_05_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_09_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_EME_06_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_06_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_10_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_11_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_11_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - //var REGISTER_Request v_register; - - //v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - f_IMS_preamble_woRegistration(c_userProfile_UE1atSUThome, p_cSeq_s); - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), omit)); - - //await response - 380 ... - f_awaitingResponse(mw_Response_Base((c_statusLine380),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_11_UE1 - } // end group Emergency - - group SDP { - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - // PREAMBLE - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 488 - f_awaitingResponse(mw_Response_Base(c_statusLine488,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_01_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - f_awaitingINVITE_PassOnTimeout(mw_INVITE_Request_Base); - - if(vc_boo_request) { - // send response - 486 - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - // PREAMBLE - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 4xx or timeout - f_awaitingResponse(mw_Response_Base({c_sipNameVersion, (400..499), ?},vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - vc_boo_route := true; - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_02_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - vc_sdp_local:=valueof(m_SDP_unacceptable(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_sendResponse(m_Response_18XonINVITE_sdp_UE(c_statusLine180,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact,valueof(m_MBody_SDP(vc_sdp_local)))); - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_awaitingResponse(mw_Response_Base(c_statusLine486,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_03_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send 200OK with unacceptable media parameter - vc_sdp_local:=valueof(m_SDP_unacceptable(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact, f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_04_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - /*TODO need to define MIME type application/pkcs7-mime .... - need to change header fields of message - now is just defined usual SDP_template with name m_SDP_encrypted - need to define new template - Reference RFC4568 - */ - - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact, f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - //await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_05_IMS - - } // end group SDP - -} // end module AtsIms_Mw_TCFunctions \ No newline at end of file diff --git a/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn b/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn deleted file mode 100644 index 4401461..0000000 --- a/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn +++ /dev/null @@ -1,2416 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_Mw_Testcases -{ - //LibCommon - import from LibCommon_Sync all ; - import from LibCommon_VerdictControl all; - //LibSip - import from LibSip_Interface all; - import from LibSip_SIPTypesAndValues all; - //LibIms - import from LibIms_Interface all; - //AtsIms - import from AtsIms_TestConfiguration all; - import from AtsIms_TestSystem all; - import from AtsIms_Mw_TCFunctions all; - import from AtsIms_PICS all; - import from AtsIms_PIXITS all; - - group General { - - /* - * @desc TC_IMST2_MW_GEN_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_01 - - /* - * @desc TC_IMST2_MW_GEN_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_02 - - /* - * @desc TC_IMST2_MW_GEN_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_03 - - /* - * @desc TC_IMST2_MW_GEN_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_04 - - /* - * @desc TC_IMST2_MW_GEN_05 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_05 - - /* - * @desc TC_IMST2_MW_GEN_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_06 - - /* - * @desc TC_IMST2_MW_GEN_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_07 - - /* - * @desc TC_IMST2_MW_GEN_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_08 - - /* - * @desc TC_IMST2_MW_GEN_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_09 - - /* - * @desc TC_IMST2_MW_GEN_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_10 - - /* - * @desc TC_IMST2_MW_GEN_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_11 - - /* - * @desc TC_IMST2_MW_GEN_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_12 - - /* - * @desc TC_IMST2_MW_GEN_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_13 - - /* - * @desc TC_IMST2_MW_GEN_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_14_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_14 - - /* - * @desc TC_IMST2_MW_GEN_15 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_15_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_15 - - /* - * @desc TC_IMST2_MW_GEN_16 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_16_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_16 - - /* - * @desc TC_IMST2_MW_GEN_17 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_17(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_17_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_17_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_17 - - } // end group General - - group Registration { - - /* - * @desc TC_IMST2_MW_REG_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_01 - - /* - * @desc TC_IMST2_MW_REG_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_02 - - /* - * @desc TC_IMST2_MW_REG_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_03 - - /* - * @desc TC_IMST2_MW_REG_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_04 - - /* - * @desc TC_IMST2_MW_REG_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_05 - - /* - * @desc TC_IMST2_MW_REG_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_06 - - /* - * @desc TC_IMST2_MW_REG_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_07 - - /* - * @desc TC_IMST2_MW_REG_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_08 - - /* - * @desc TC_IMST2_MW_REG_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_09 - - /* - * @desc TC_IMST2_MW_REG_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_10 - - /* - * @desc TC_IMST2_MW_REG_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_11 - - /* - * @desc TC_IMST2_MW_REG_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_12 - - /* - * @desc TC_IMST2_MW_REG_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_13 - - /* - * @desc TC_IMST2_MW_REG_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_REG_14_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_REG_14_IMSS(p_cSeq_s)); - - // synchronize PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_REG_14 - - /* - * @desc TC_IMST2_MW_REG_15 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_15 - - /* - * @desc TC_IMST2_MW_REG_16 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_16 - - /* - * @desc TC_IMST2_MW_REG_17 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_17(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_17_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_17 - - /* - * @desc TC_IMST2_MW_REG_18 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_18(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_18_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_18 - - /* - * @desc TC_IMST2_MW_REG_19 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_19(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_19_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_19 - - /* - * @desc TC_IMST2_MW_REG_20 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_20(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_20_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_20 - - /* - * @desc TC_IMST2_MW_REG_21 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_21(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_21_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_21 - - /* - * @desc TC_IMST2_MW_REG_22 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_22(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_22_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_22 - - /* - * @desc TC_IMST2_MW_REG_23 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_23(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_23_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_23 - - /* - * @desc TC_IMST2_MW_REG_24 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_24(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_24_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_24 - - /* - * @desc TC_IMST2_MW_REG_25 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_25(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_25_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_25 - - /* - * @desc TC_IMST2_MW_REG_26 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_26(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_26_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_26 - - } // end group Registration - - group InitialRequest { - - /* @desc TC_IMST2_MW_INI_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_INI_01_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_INI_01_IMSS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_INI_01 - - /* @desc TC_IMST2_MW_INI_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_INI_02_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_INI_02_IMSS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_INI_02 - - /* @desc TC_IMST2_MW_INI_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_03 - - /* @desc TC_IMST2_MW_INI_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_04 - - /* @desc TC_IMST2_MW_INI_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_05 - - /* @desc TC_IMST2_MW_INI_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_06 - - /* @desc TC_IMST2_MW_INI_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_07 - - /* @desc TC_IMST2_MW_INI_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_08 - - /* @desc TC_IMST2_MW_INI_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_09 - - /* @desc TC_IMST2_MW_INI_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_10 - - /* @desc TC_IMST2_MW_INI_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_11 - - /* @desc TC_IMST2_MW_INI_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_12 - - /* @desc TC_IMST2_MW_INI_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_13 - - /* @desc TC_IMST2_MW_INI_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_14_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_14 - - /* @desc TC_IMST2_MW_INI_15 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - - if (PC_PCSCF_periodic_refreshment_originating) - {//Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_15_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-originated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_originating to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_15 - - /* @desc TC_IMST2_MW_INI_16 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if (PC_PCSCF_periodic_refreshment_originating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_16_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-originated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_originating to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_16 - - /* @desc TC_IMST2_MW_INI_18 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_18(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PC_PCSCF_periodic_refreshment_terminating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_18_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_18_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-terminated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_terminating to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_18 - - /* @desc TC_IMST2_MW_INI_19 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_19(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if (PC_PCSCF_periodic_refreshment_terminating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_19_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_19_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-terminated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_terminating to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_19 - - /* @desc TC_IMST2_MW_INI_20 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_20(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_20_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_20_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_20 - - /* @desc TC_IMST2_MW_INI_21 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_21(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_21_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_21_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_21 - - /* @desc TC_IMST2_MW_INI_22 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_22(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_22_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_22 - - /* @desc TC_IMST2_MW_INI_23 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_23(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_23_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_23_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_23 - - /* @desc TC_IMST2_MW_INI_24 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_24(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PX_SCSCF_reject_unsubscribed_service) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_24_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_24_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/S-CSCF is NOT configured to reject INVITE requests indicating services that are not subscribed to by the called subscriber. Set PIXIT item PX_SCSCF_reject_unsubscribed_service to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_24 - - /* @desc TC_IMST2_MW_INI_25 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_25(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PX_SCSCF_reject_unsubscribed_service) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_25_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_25_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/S-CSCF is NOT configured to reject INVITE requests indicating services that are not subscribed to by the called subscriber. Set PIXIT item PX_SCSCF_reject_unsubscribed_service to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_25 - - } // end group InitialRequest - - group StandaloneRequest { - - /* @desc TC_IMST2_MW_STA_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_01 - - /* @desc TC_IMST2_MW_STA_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_02 - - /* @desc TC_IMST2_MW_STA_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_03 - - /* @desc TC_IMST2_MW_STA_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_04 - - /* @desc TC_IMST2_MW_STA_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_05 - - /* @desc TC_IMST2_MW_STA_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_06 - - /* @desc TC_IMST2_MW_STA_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_07 - - } // end group StandaloneRequest - - group SubsequentRequest { - - /* @desc TC_IMST2_MW_SUB_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_01 - - /* @desc TC_IMST2_MW_SUB_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_02 - - /* @desc TC_IMST2_MW_SUB_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_03 - - /* @desc TC_IMST2_MW_SUB_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_04 - - /* @desc TC_IMST2_MW_SUB_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_05 - - /* @desc TC_IMST2_MW_SUB_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_06 - - /* @desc TC_IMST2_MW_SUB_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_07 - - /* @desc TC_IMST2_MW_SUB_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_08 - - /* @desc TC_IMST2_MW_SUB_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_09 - - /* @desc TC_IMST2_MW_SUB_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 3 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_10 - - } // end group SubsequentRequest - - group TargetRefreshRequest { - - /* @desc TC_IMST2_MW_TAR_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_01 - - /* @desc TC_IMST2_MW_TAR_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_02 - - /* @desc TC_IMST2_MW_TAR_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_03 - - /* @desc TC_IMST2_MW_TAR_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_04 - - /* @desc TC_IMST2_MW_TAR_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_05 - - /* @desc TC_IMST2_MW_TAR_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_06 - - /* @desc TC_IMST2_MW_TAR_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_07 - - /* @desc TC_IMST2_MW_TAR_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_08 - - /* @desc TC_IMST2_MW_TAR_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_09 - - - } // end group TargetRefreshRequest - - group Emergency { - - /* @desc TC_IMST2_MW_EME_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_01 - - /* @desc TC_IMST2_MW_EME_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_02 - - /* @desc TC_IMST2_MW_EME_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_03 - - /* @desc TC_IMST2_MW_EME_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_04 - - /* @desc TC_IMST2_MW_EME_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_05 - - /* @desc TC_IMST2_MW_EME_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_06 - - /* @desc TC_IMST2_MW_EME_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_07 - - /* @desc TC_IMST2_MW_EME_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_08 - - /* @desc TC_IMST2_MW_EME_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_09 - - /* @desc TC_IMST2_MW_EME_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_10 - - /* @desc TC_IMST2_MW_EME_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_11_UE1(p_cSeq_s)); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_11 - - } // end group Emergency - - group SDP { - - /* @desc TC_IMST2_MW_SDP_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_01 - - /* @desc TC_IMST2_MW_SDP_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_02 - - /* @desc TC_IMST2_MW_SDP_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_03 - - /* @desc TC_IMST2_MW_SDP_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_04 - - /* @desc TC_IMST2_MW_SDP_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_05 - - } // end group SDP - -} // end module AtsIms_Mw_Testcases diff --git a/ats/ttcn/AtsIms/AtsIms_PICS.ttcn b/ats/ttcn/AtsIms/AtsIms_PICS.ttcn deleted file mode 100644 index dd17269..0000000 --- a/ats/ttcn/AtsIms/AtsIms_PICS.ttcn +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the PICS used for the SIP-IMS tests. -*/ - -module AtsIms_PICS -{ -modulepar { - - /* **************************************************************************************************** - PICS used for test case selection - *************************************************************************************************** */ - - /** @desc boolean PICS ref: A-3/12-1-1 - True, if SUT/P-CSCF requires application of periodic session refreshment on receipt of UE-originated INVITE requests - */ - boolean PC_PCSCF_periodic_refreshment_originating; - - /** @desc boolean PICS ref: A-3/12-2-1 - True, if SUT/P-CSCF requires application of periodic session refreshment on receipt of UE-terminated INVITE requests - */ - boolean PC_PCSCF_periodic_refreshment_terminating; - - /** @desc boolean PICS ref: A-3/18-1-1 - True, if SUT/P-CSCF requires rejection of requests including encrypted SDP offers - */ - boolean PC_PCSCF_reject_encrypted_SDP_offer_in_request; - - /** @desc boolean PICS ref: A-3/18-3-1 - True, if SUT/P-CSCF requires session termination on receipt of encrypted SDP offers in 200OK responses - */ - boolean PC_PCSCF_session_termination_on_encrypted_SDP_offer_in_200OK_response; - - /** @desc boolean PICS ref: A-8/11-1 - True, if SUT/IBCF requires application of periodic session refreshment on receipt of INVITE requests when acting as entry point - */ - boolean PC_IBCF_periodic_refreshment_entry_point; - - /* **************************************************************************************************** - PICS used for branching within test cases - *************************************************************************************************** */ - - /** @desc boolean PICS ref: A-3/10-1-1 - Handling of initial requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_initial_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-3-1 - Handling of target refresh requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_target_refresh_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-5-1 - Handling of standalone requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_standalone_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-7-1 - Handling of subsequent (other than target refresh) requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/11-2-1 - Handling of 1xx and 2xx responses to initial requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-2-2 - Handling of 1xx and 2xx responses to initial requests in case of failure of the verification of the Route headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/11-3-1 - Handling of responses (other than 1xx and 2xx) to initial requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-5-1 - Handling of 1xx and 2xx responses to target refresh requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_target_refresh_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-6-1 - Handling of responses (other than 1xx and 2xx) to target refresh requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_other_response_to_target_refresh_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-8-1 - Handling of all responses to requests for standalone transactions or unknown methods in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_any_response_to_standalone_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-10-1 - Handling of all responses to subsequent requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_any_response_to_subsequent_request_with_mismatching_Via_header; - -} -} // end module AtsIms_PICS diff --git a/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn b/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn deleted file mode 100644 index 7597eea..0000000 --- a/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the PIXIT used for the SIP-IMS tests. - */ - -module AtsIms_PIXITS -{ - -// SUT specific implementation variants - -modulepar { - - /** @desc boolean (This is an operator option, not a protocol option), - True, if SUT/S-CSCF rejects INVITE requests indicating services that are not subscribed to by the called subscriber, - service may be requested in SDP or in a P-Asserted-Service header - Ref: ES 283 033 5-4-3-3 - */ - boolean PX_SCSCF_reject_unsubscribed_service := true; -} - -} // end module AtsIms_PIXITS diff --git a/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn b/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn deleted file mode 100644 index b49283a..0000000 --- a/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn +++ /dev/null @@ -1,16 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestCases -{ - // Testcases of individual test cases related to interface - import from AtsIms_Gm_Testcases all; - import from AtsIms_Mw_Testcases all; - import from AtsIms_Ic_Testcases all; - import from AtsIms_Isc_Testcases all; - -} // end module AtsIms_TestCases diff --git a/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn b/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn deleted file mode 100644 index f528ff2..0000000 --- a/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn +++ /dev/null @@ -1,759 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides test component configurations - * for SIP-IMS tests. - */ - -module AtsIms_TestConfiguration -{ - //LibCommon - import from LibCommon_Sync all ; - import from LibCommon_VerdictControl all; - //LibSip - import from LibSip_Interface all; - import from LibSip_SIPTypesAndValues all; - import from LibSip_PIXITS all; - //LibIms - import from LibIms_SIPTypesAndValues all; - import from LibIms_Interface all; - //AtsIms - import from AtsIms_TestSystem all; - import from AtsIms_PIXITS all; - -group auxSipFunction { - - /* - ** @desc f_IncCSeq returns an input parameter incremented by 1000 - ** reason is to run the next testcase with a higher CSeq value - */ - function f_IncCSeq(inout CSeq loc_CSeq) - runs on ServerSyncComp - { loc_CSeq.seqNumber := loc_CSeq.seqNumber + 1000; - return - }; - // end f_IncCSeq - -}//end group auxSipFunction - - group cfUp { - - /** - * - * @desc Creates test configuration of CF_1Gm - * @param p_imsComponent_ue1 first ue1 component - */ - function f_cf_1GmUp(out ImsComponent p_imsComponent_ue1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1GmUp - - /** - * - * @desc Creates test configuration of CF_2Gm -Ref:DTS 06035-2 - * @param p_imsComponent_ue1 first ue1 component - * @param p_imsComponent_ue2 second ue2 component - */ - function f_cf_2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2GmUp - - /** - * - * @desc Creates test configuration of CF_1Mwp_M1M2: UserProfileRef: M1, M2 - * @param p_imsComponent_mwp1 mwp1 component - */ - function f_cf_1Mwp_M1M2Up( out ImsComponent p_imsComponent_mwp1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_mwp1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_mwp1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_mwp1:SIPP, system:MW_I1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1MwiUp - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - PCSCF from SUT conected with component ICSCF from TS - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M3Up(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi1:SIPP, system:MW_P1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Gm_M3Up - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - PCSCF from SUT conected with component ICSCF and SCSCF from TS - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_mws1 mws1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Mws1Gm_M3Up(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi1, - out ImsComponent p_imsComponent_mws1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi1 := ImsComponent.create ; - p_imsComponent_mws1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi1:syncPort, self:syncPort) ; - connect(p_imsComponent_mws1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi1:SIPP, system:MW_P1);// Init test Configuration - map(p_imsComponent_mws1:SIPP, system:MW_P2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Mws1Gm_M3Up - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M4a: UserProfileRef: M4a - SCSCF from SUT conected with component ICSCF from TS - * @param p_imsComponent_mwi2 mwsicomponent - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M4aUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi2 - ) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi2:SIPP, system:MW_S2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Gm_M4aUp - - /** - * - * @desc Creates test configuration of CF_1Mws1Gm_M4b: UserProfileRef: M4b - ICSCF from SUT conected with component SCSCF from TS - * @param p_imsComponent_mws2 mws2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mws1Gm_M4bUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mws2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mws2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mws2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mws2:SIPP, system:MW_I2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mws1Gm_M4bUp - - /** - * - * @desc Creates test configuration of CF_1Ic - * @param p_imsComponent_ic1 first ic1 component - */ - function f_cf_1IcUp(out ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ic1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1IcUp - - /** - * - * @desc Creates test configuration of CF_1Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - */ - function f_cf_1Ic1GmUp( out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ic1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Ic1GmUp - - /** - * - * @desc Creates test configuration of CF_2Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - * @param p_imsComponent_ic2 - ic2 component - */ - function f_cf_2Ic1GmUp( out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ic1, - out ImsComponent p_imsComponent_ic2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ic1 := ImsComponent.create ; - p_imsComponent_ic2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - map(p_imsComponent_ic2:SIPP, system:IC2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2Ic1GmUp - - /** - * - * @desc Creates test configuration of CF_1Isc1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_as1 - as1 component - */ - function f_cf_1Isc1GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_as1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Isc1GmUp - - /** - * - * @desc Creates test configuration of CF_1Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_as1 - as1 component - */ - function f_cf_1Isc2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2, - out ImsComponent p_imsComponent_as1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Isc2GmUp - - /** - * - * @desc Creates test configuration of CF_2Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_as1 - as1 component - * @param p_imsComponent_as2 - as2 component - */ - function f_cf_2Isc2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2, - out ImsComponent p_imsComponent_as1, - out ImsComponent p_imsComponent_as2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - p_imsComponent_as2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - connect(p_imsComponent_as2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - map(p_imsComponent_as2:SIPP, system:ISC2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2Isc2GmUp - - }//end group cfUp - - group cfDown { - - /** - * - * @desc Deletes configuration of CF_1Gm - * @param p_imsComponent_ue1 first ue1 component - */ - function f_cf_1GmDown(in ImsComponent p_imsComponent_ue1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - }//end f_cf_1GmDown - - /** - * - * @desc Deletes configuration of CF_2Gm - * @param p_imsComponent_ue1 first ue1 component - * @param p_imsComponent_ue2 second ue2 component - */ - function f_cf_2GmDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - }//end f_cf_2GmDown - - /** - * - * @desc Deletes configuration of CF_1Mwp_M1M2: UserProfileRef: M1, M2 - * @param p_imsComponent_mwp1 mwp1 component - */ - function f_cf_1Mwp_M1M2Down(in ImsComponent p_imsComponent_mwp1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_mwp1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_mwp1:SIPP, system:MW_I1); - }//end f_cf_1MwpDown - - /** - * - * @desc Deletes configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M3Down( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi1 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi1:SIPP, system:MW_P1); - }//end f_cf_1Mwi1Gm_M3Down - - /** - * - * @desc Deletes configuration of CF_1Mwi1Mws1Gm_M3: UserProfileRef: M3 - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_mws1 mws1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Mws1Gm_M3Down( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi1, - in ImsComponent p_imsComponent_mws1 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi1:syncPort, self:syncPort); - disconnect(p_imsComponent_mws1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi1:SIPP, system:MW_P1); - unmap(p_imsComponent_mws1:SIPP, system:MW_P2); - }//end f_cf_1Mwi1Mws1Gm_M3Down - - /** - * - * @desc Deletes configuration of CF_1Mwi1Gm_M4a: UserProfileRef: M4a - * @param p_imsComponent_mwi2 mwi2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M4aDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi2 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi2:SIPP, system:MW_S2); - }//end f_cf_1Mwi1Gm_M4aDown - - /** - * - * @desc Deletes configuration of CF_1Mws1Gm_M4b: UserProfileRef: M4b - * @param p_imsComponent_mws2 mws2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mws1Gm_M4bDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mws2 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mws2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mws2:SIPP, system:MW_I2); - }//end f_cf_1Mws1Gm_M4bDown - - /** - * - * @desc Deletes configuration of CF_1Ic - * @param p_imsComponent_ic1 first ic1 component - */ - function f_cf_1IcDown(in ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_ic1:SIPP, system:IC1); - }//end f_cf_1IcDown - - /** - * - * @desc Deletes configuration of CF_1Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - */ - function f_cf_1Ic1GmDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ic1:SIPP, system:IC1); - }//end f_cf_1Ic1GmDown - - /** - * - * @desc Deletes configuration of CF_2Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - * @param p_imsComponent_ic2 - ic2 component - */ - function f_cf_2Ic1GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ic1, - in ImsComponent p_imsComponent_ic2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ic1:SIPP, system:IC1); - unmap(p_imsComponent_ic2:SIPP, system:IC2); - }//end f_cf_2Ic1GmDown - - /** - * - * @desc Deletes configuration of CF_1Isc1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_isc1- isc1 component - */ - function f_cf_1Isc1GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_isc1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - }//end f_cf_1Isc1GmDown - - /** - * - * @desc Deletes configuration of CF_1Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_isc1- isc1 component - */ - function f_cf_1Isc2GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2, - in ImsComponent p_imsComponent_isc1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - }//end f_cf_1Isc2GmDown - - /** - * - * @desc Deletes configuration of CF_2Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_isc1- isc1 component - * @param p_imsComponent_isc2- isc2 component - */ - function f_cf_2Isc2GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2, - in ImsComponent p_imsComponent_isc1, - in ImsComponent p_imsComponent_isc2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - disconnect(p_imsComponent_isc2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - unmap(p_imsComponent_isc2:SIPP, system:ISC2); - }//end f_cf_2Isc2GmDown - - } //end group cfDown - - group syncNoStop // Same functions as in LibCommon but without call of f_serverWaitForAllClientsToStop() - { - /* @desc Implements synchronization of client from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to client. - * Waits for PX_TSYNC_TIME_LIMIT to let client - * finish executing behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync1Client( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(1,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 2 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync2Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 3 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync3Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(3,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 4 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync4Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(4,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - } //end group syncNoStop -} // end module AtsIms_TestConfiguration diff --git a/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn b/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn deleted file mode 100644 index 0f59671..0000000 --- a/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn +++ /dev/null @@ -1,11 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestExecutions -{ - -} // end module AtsIms_TestExecutions diff --git a/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn b/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn deleted file mode 100644 index 8bc9dce..0000000 --- a/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn +++ /dev/null @@ -1,63 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestSystem -{ - //LibCommon - import from LibCommon_Sync all; - import from LibCommon_AbstractData all; - import from LibCommon_BasicTypesAndValues all; - import from LibCommon_DataStrings all; - //LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_SDPTypes all; - import from LibSip_Templates all; - import from LibSip_PIXITS all; - import from LibSip_Interface all; - //AtsIms - import from AtsIms_PIXITS all; - - group CMTypes { - type charstring CM_Message; - } // end group CMTypes - - group Signatures { - signature s_SIP_conversation (in charstring text, out boolean answer); - signature s_SIP_ringing (in charstring text, out boolean answer); - } // end group Signatures - - group SystemConfiguration { - group Ports { - - type port operatorPort_SIP procedure { - inout s_SIP_conversation; - inout s_SIP_ringing}; - -// configured in LibSip_Interface.ttcn and it should not be configured multiple times -// type port SipPort message { -// inout Request, Response, Raw } with { extension "address" }; - - type port Coordination message { - inout CM_Message} with {extension "internal"}; - } // End Group Ports - - group TestComponents { - group TestSystemInterfaces { - /* - ** @desc The test system interface - */ - type component TestAdapter { - port SipPort UE1, UE2, MW_P1, MW_P2, MW_I1, MW_S1, MW_I2, MW_S2, IC1, IC2, ISC1, ISC2; - port operatorPort_SIP opPortS; - } - } // end Group TestSystemInterfaces - - - }// end group TestComponents - } //end group SystemConfiguration - -} // end module AtsIms_TestSystem diff --git a/ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc b/ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc deleted file mode 100644 index d39ea0f1a883bec57eee5cec7defa5383ad7e4f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5934592 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

$ZO3|6Sr?jXtquhOq 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

hn-&if32i)+~cxKw=Ae}T7r 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

hWL1fTlu^L-W3iK82oyUW9&w=6MhMC$tf? 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 diff --git a/ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc b/ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc deleted file mode 100644 index 8eb31d978af9fb48b30b692e049433cb649683c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2078720 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

7l$1 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 MW#HoP0;j send respond 4xx on Gm - if (p.security_client_header.present == OMIT) { - SIP4xxResp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("4xx"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_04"; - - // TODO 23.12.-08: GM_REG_01 talks about "the REGISTER request - // was received without protection" - what does this - // mean? - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_01"; - GmOut.send(resp); - } - - // unprotected REGISTER in security environment is - // responded with 401 - else { - SIP401Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("401"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_07"; - connections[current_ue].registering = true; - connections[current_ue].unauthorized = true; - GmOut.send(resp); - } - - // P-CSCF does not respond to unprotected REGISTER from UE - // if Security-Client header that does not specify UDP - // tunneling support - if (current_ue == ue1 && - p.security_client_header.value == "||UDP-enc-tun support" && - p.topmost_via_header.value == "IP address different from IP source address") { - if (current_ue == ue1) - requirement "TP_IMST2_GM_NAT_01"; - return; - } - } - - // if no security association is required by the IUT then an - // unprotected REGISTER request is responded with 200 - // OK. - else { // if (!iut_security_association) { - SIP200Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("200"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_10"; - //TODO 31.12.08: is it correct to change the UE's state to - //registered? - connections[current_ue].registered = true; - GmOut.send(resp); - return; - } - - } - - /* - * Start registration cycle for a UE that is visiting the current - * IUT - */ - public void unprotectedVisitingRegister(SIPRegisterReq p) { - require p.recipient == IUT; - - current_ue = getUENro(p.sender); - - requireUENotRegistered(current_ue); - - if (iut_topology_hiding) { - unprotectedRegistrationWithTopologyHandling(p, current_ue); - } - else { - unprotectedRegistrationWithoutTopologyHandling(p, current_ue); - } - return; - } - - - // when IUT configured with topology hiding, no entry point to IMS - // and not configured for establishing security association - // receives a REGISTER request, depending on configuration a 408 - // or 504 response is replied - public void unprotectedRegistrationWithTopologyHandling(SIPRegisterReq p, int ue) { - if (ue == ue1) { - if (!iut_configured_entry_point_to_ims) { - if (iut_respond_408_reg09) { - SIP408Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_GM_REG_09/Send 408"; - } - else { - SIP504Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_GM_REG_09/Send 504"; - } - return; - } - - // When a SIP REGISTER is received by the IBCF from withing - // own network, the packet is updated and forwarded. - if (iut_configured_entry_point_to_home_net) { - p.sender = IUT; - p.topmost_path_header.present = PRESENT; - p.topmost_path_header.value = SIP_URI_OF_IUT_IBCF; - Ic1Out.send(p); - requirement "TP_IMST2_IC_GEN_01"; - return; - } - requirement "Conformiq/UnprotectedReg/UE1 visiting and iut_topology_hiding"; - } - else - requirement "Conformiq/UnprotectedReg/UE2 visiting and iut_topology_hiding"; - } - - - public void unprotectedRegistrationWithoutTopologyHandling(SIPRegisterReq p, int ue) { - if (ue == ue1) { - if (iut_configured_entry_point_to_ims) { - // unprotected REGISTER received on Gm interface _without_ - // security association - if (p.security_client_header.present == PRESENT) { - requirement "Conformiq/SecurityClient/present"; - p.sender = IUT; - p.recipient = IMS; - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = NO; - p.security_client_header.present = OMIT; - requirement "TP_IMST2_MW_REG_04"; - MwOut.send(p); - return; - } - - // an unprotected REGISTER without security_client_header - else if (p.security_client_header.present == OMIT) { - requirement "Conformiq/SecurityClient/omitted"; - // nothing is sent to Mw interface - // 4xx response to Gm interface - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_05"; - GmOut.send(resp); - return; - } - - // security_client_header can be whatever (== empty) - else { - requirement "Conformiq/SecurityClient/empty"; - // in a normal case the unprotected REGISTER is - // forwarded with modified header fields - p.path_header.present = PRESENT; - p.path_header.value = SIP_URI_OF_IMS +" P-CSCF"; - p.require_header.present = PRESENT; - p.require_header.path_tag_parameter.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.value = "type1 of the sending network"; - p.p_charging_vector_header.term_ioi_parameter.present = OMIT; - p.p_charging_vector_header.term_ioi_parameter.value = "type 1"; - p.p_visited_network_id_header.present = PRESENT; - p.p_visited_network_id_header.visited_network_pre_provisioned_string.present = PRESENT; - p.sender = IUT; - p.recipient = IMS; - - MwOut.send(p); - requirement "TP_IMST2_MW_REG_01"; - return; - } - } - else { // iut has no configured entry point to ims - // an initial unprotected REGISTER with security association - // from visiting UE on Gm interface is forwarded to Mw - // interface and UE status changes to "registering" - p.recipient = IMS; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_GEN_04"; - MwOut.send(p); - connections[ue].registering = true; - return; - } - } - else { // ue == ue2 - requirement "Conformiq/UnprotectedReg/UE2 and no iut_topology_hiding"; - } - } - - - /** - * A local user has already sent a register request and received a - * 401 unauthorized response. Now a second protected register - * request is handled. - */ - public void protectedLocalRegister(SIPRegisterReq p) { - - if (current_ue == ue1) - require connections[current_ue].unauthorized; - require p.recipient == IUT; - require connections[current_ue].security_association; - - if (current_ue == ue1) - requirement "Conformiq/ProtectedReg/UE1 starting local protected reg."; - if (current_ue == ue2) { - requirement "Conformiq/ProtectedReg/UE2 starting local protected reg."; - } - - - if (iut_ifc_contact_as1_for_message && current_ue == ue1) { - SIPRegisterReq reg = p; - reg.p_access_network_info_header.present = PRESENT; - reg.p_visited_network_id_header.present = PRESENT; - reg.request_uri.present = PRESENT; - reg.request_uri.value = "-> SIP URI of AS1"; - reg.to.present = PRESENT; - reg.to.value = "a non barred IMPU from the service profile of the processed iFC"; - reg.from.present = PRESENT; - reg.from.value = SIP_URI_OF_IUT_SCSCF; - reg.contact_header.present = PRESENT; - reg.contact_header.value = SIP_URI_OF_IUT_SCSCF; - reg.p_charging_vector_header.present = PRESENT; - reg.p_charging_vector_header.value = "a type3 orig-ioi parameter before the received orig-ioi parameter"; - reg.p_charging_function_addresses_header.present = PRESENT; - reg.sender = IUT; - reg.recipient = AS1; - IscOut.send(reg); - requirement "TP_IMST2_ISC_REG_02"; - if (iut_and_as1_in_same_trust_domain) - requirement "TP_IMST2_ISC_REG_01"; - else - requirement "Conformiq/IUT and AS1 different trust domains"; - } - - // iut and current_ue have security associations set but - // security client header is missing - if (p.security_client_header.present == OMIT && - current_ue == ue1) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_REG_03"; - GmOut.send(resp); - } - - // protected REGISTER, message missing security header - else if (p.security_verify_header.present == OMIT && - current_ue == ue1) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_REG_02"; - GmOut.send(resp); - } - - // protected REGISTER with wrong authorization header -> - // respond 403 - else if (p.authorization_header.value == INVALID_USER_ID && - current_ue == ue1) { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("403"); - // TO_CHECK: does the user state change?? - requirement "TP_IMST2_GM_REG_05"; - GmOut.send(resp); - } - - // protected REGISTER without errors is responded with 200 - else { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("200"); - connections[current_ue].registered = true; - if (current_ue == ue1) { - requirement "TP_IMST2_GM_REG_08"; - requirement "Conformiq/ProtectedReg/UE1 Local Registered"; - } - if (current_ue == ue2) requirement "Conformiq/ProtectedReg/UE2 Local Registered"; - if (connections[current_ue].registered && - connections[1-current_ue].registered) - requirement "Conformiq/ProtectedReg/Both UEs Registered"; - GmOut.send(resp); - } - - } - - - /** - * When an already registered UE sends a second REGISTER message - * for some purpose. - */ - public void protectedDuplicateLocalRegister(SIPRegisterReq p){ - int ue = getUENro(p.sender); - - // TPs have scenario for only UE1 doing a duplicate - // registration - if (ue == ue1) { - // UE1 has already successfully registered on IUT but does a - // duplicate registration. - if (p.authorization_header.value == INVALID_USER_ID) { - SIP403Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("403"); - requirement "TP_IMST2_GM_REG_06"; - GmOut.send(resp); - return; - } - - // protected REGISTER received from registered UE, with - // register message Expires header set to 0 is an - // UNREGISTER. IUT replies with 200 OK with same expire header - // value and the UE is unregistered. - if (p.expire_header.isPresent() && p.expire_header.value == "0") { - if (iut_and_as1_in_same_trust_domain) { - p.p_access_network_info_header.present = PRESENT; - p.p_visited_network_id_header.present = PRESENT; - p.request_uri.present = PRESENT; - p.request_uri.value = "-> SIP URI of AS1"; - p.to.present = PRESENT; - p.to.value = "a non barred IMPU from the service profile of the processed iFC"; - p.from.present = PRESENT; - p.from.value = SIP_URI_OF_IUT_SCSCF; - p.contact_header.present = PRESENT; - p.contact_header.value = SIP_URI_OF_IUT_SCSCF; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.value = "a type3 orig-ioi parameter before the received orig-ioi parameter"; - p.p_charging_function_addresses_header.present = PRESENT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_REG_03"; - } - - SIP200Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("200"); - GmOut.send(resp); - resp.expire_header = p.expire_header; - connections[ue].registering = false; - connections[ue].registered = false; - requirement "Conformiq/Registered/UE1 unREGISTER"; - return; - } - } - else { - return; - } - } - - - /** - * After having received an unprotected registering message a - * protected register message is received that is handled here. - * - * After this state a connection that has a protected registration - * and has NOT security assocition set is changed to a registered - * state. - * - * This function was 'public void - * protectedRegistrationWithoutTopologyHandling(SIPRegisterReq p)' - */ - public void protectedVisitingRegister(SIPRegisterReq p) { - - // an unprotected registration has been done, and now starting - // protected registration to IUT - require p.recipient == IUT; - - // if the register message is sent forward we update here - // sender and recipient - p.sender = IUT; - p.recipient = IMS; - - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - // a protected REGISTER is received (UE was sent a 401 - // response in between). - - if (current_ue == ue1) { - requirement "Conformiq/ProtectedReg/UE1 starts"; - // TODO 08.01.-09: What is TEMPORARY security association for UE1? - if (connections[current_ue].temporary_security_association) { - if (p.security_verify_header.present == OMIT) { - // nothing is sent to Mw interface - // 4xx is sent to Gm interface - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_06"; - GmOut.send(resp); - } - - // a protected REGISTER is received on Gm and TEMPORARY - // security association; depending on the header values either - // a 4xx response is sent back on Gm or the register is - // forwarded to IMS on Mw interface - if (p.security_verify_header.present == PRESENT) { - if (p.security_client_header.present == PRESENT) { - // security_verify_header IS present - if (p.security_client_header.value == "header equals to Security-Client header of unprotected REGISTER" ) { - - if (p.security_verify_header.value == "header IS DIFFERENT to Security-Server header of 401 response") { - // nothing is sent on Mw - // 4xx sent to Gm interface - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_07"; - GmOut.send(resp); - } - if (p.security_verify_header.value == "header IS EQUAL to Security-Server header of 401 response") { - requirement "TP_IMST2_MW_REG_08"; - // forward the received request to IMS - p.security_verify_header.present = OMIT; - p.security_client_header.present = OMIT; - MwOut.send(p); - } - } - } - } - return; - } // end of temporary security association - - // protected REGISTER with security association - if (connections[current_ue].security_association) { - // a protected REGISTER from Gm interface with UE having - // security association and the register having specific - // headers present the REGISTER is forwarded on the Mw - // interface after specific headers are removed - if (p.security_verify_header.present == PRESENT && - p.security_client_header.present == PRESENT) { - - p.security_verify_header.present = OMIT; - p.security_client_header.present = OMIT; - requirement "TP_IMST2_MW_REG_09"; - MwOut.send(p); - } - - // if the protected REGISTER is missing the security client header, - // nothing is sent to Mw interface but a 4xx response is - // sent back to UE - else if (p.security_client_header.present == OMIT) { - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_10"; - GmOut.send(resp); - } - - // a protected REGISTER received that has specific headers - // and the UE has security association. A 403 response is - // sent back to the UE. - else if (p.authorization_header.present == PRESENT && - p.authorization_header.private_user_identity == "different to private user identity of unprotected REGISTER") { - // nothing is sent to Mw - // 403 is sent back to Gm - SIP403Resp r; - r.sender = IUT; - r.recipient = p.sender; - r.method = respond("403"); - requirement "TP_IMST2_MW_REG_11"; - GmOut.send(r); - } - - // if the REGISTER is received protected with security - // association and it includes an authentication challenge - // response, the REGISTER headers are updated and request - // is forwarded. - else if (p.auth_challenge_resp_param.present == PRESENT) { - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = YES; - p.recipient = IMS; - p.sender = IUT; - - requirement "TP_IMST2_MW_REG_02"; - MwOut.send(p); - } - else { - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = YES; - requirement "TP_IMST2_MW_REG_03"; - MwOut.send(p); - } - - return; - } // end of "has security association" - - // protected REGISTER _without_ security association - else { - p.path_header.present = PRESENT; - p.sip_uri.present = PRESENT; - p.require_header.present = PRESENT; - p.require_header.path_tag_parameter.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.value = TYPE1 + " of the sending network"; - p.p_charging_vector_header.term_ioi_parameter.value = "[OMIT type1]"; - p.p_visited_network_id_header.present = PRESENT; - p.p_visited_network_id_header.visited_network_pre_provisioned_string.present = PRESENT; - requirement "TP_IMST2_MW_REG_13"; - MwOut.send(p); - connections[current_ue].registering = true; - } - } - else - requirement "Conformiq/ProtectedReg/UE2 starts"; - } - - /** - * A remote UE registers on this IUT, register request was - * received from Mw interface and the registration response is - * sent back. - * - * For connections that come through the Mw interface we don't - * care about the remote device's status. - */ - public void handleMwRegister(SIPRegisterReq req) { - - // by requiring that UE2 is not registered here we force ue2 - // to do a remote registration through the mw interface in - // some test case - // requireUENotRegistered(ue2); // this is required on the transition - require !connections[ue2].is_home_net; - - if (!iut_topology_hiding) { - if (req.to.present == PRESENT && - req.to.value == "[a not registered public identity]" && - req.authorization_header.integrity_protected_parameter == NO && - req.authorization_header.present == PRESENT) { - SIP401Resp resp; - resp.sender = req.recipient; - resp.recipient = req.sender; - resp.www_authenticate_header.present = PRESENT; - resp.method = respond("401"); - - resp.www_authenticate_header.realm_parameter = "[a globally unique name of the IUT S-CSCF]"; - resp.www_authenticate_header.RAND = PRESENT; - resp.www_authenticate_header.AUTN = PRESENT; - resp.www_authenticate_header.algorithm_parameter = AKAV1_MD5; - resp.www_authenticate_header.ik_parameter.present = PRESENT; - resp.www_authenticate_header.ck_parameter.present = PRESENT; - requirement "TP_IMST2_MW_REG_16"; - connections[ue2].registering = true; - MwOut.send(resp); - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == OMIT && - connections[ue2].registered_user_id) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_18"; - trace("UE2 registered public user identity with current private user identity in IUT"); - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == YES && - req.to.value == "a not registered public user identity") { - SIP401Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.www_authenticate_header.present = PRESENT; - resp.www_authenticate_header.realm_parameter = "globally unique name"; - resp.www_authenticate_header.RAND = PRESENT; - resp.www_authenticate_header.AUTN = PRESENT; - resp.www_authenticate_header.algorithm_parameter = AKAV1_MD5; - resp.www_authenticate_header.ik_parameter.present = PRESENT; - resp.www_authenticate_header.ck_parameter.value = PRESENT; - requirement "TP_IMST2_MW_REG_21"; - MwOut.send(resp); - return; - } - - if (req.authorization_header.present == OMIT && - connections[ue2].registered_user_id) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - requirement "TP_IMST2_MW_REG_19"; - MwOut.send(resp); - trace("UE2 registered public user identity with current private user identity in IUT"); - return; - } - - if (req.expire_header.isPresent() && - req.expire_header.value == "duration smaller than minimum") { - SIP423Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.min_expire_header.present = PRESENT; - requirement "TP_IMST2_MW_REG_20"; - MwOut.send(resp); - } - - // moved here from protectedMwRegister() - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.contact_header.present == PRESENT && - req.contact_header.registered_public_user_identities == NO ) { - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - - SIPNotifyResp r; - r.sender = IUT; - r.recipient = IMS; - r.method = NOTIFY; - r.notify_body.present = PRESENT; - r.notify_body.registered_public_user_identity.present = PRESENT; - - requirement "TP_IMST2_MW_REG_17"; - MwOut.send(r); - - // TODO 08.01.: This was as below, but shouldn't the UE2 on - // the IMS become registered after two successful REGISTER - // calls and this NOTIFY message? - -// // after this UE2 should become unregistered -// connections[ue2].registered = false; - connections[ue2].registered = true; - return; - } - - - } // end of !iut_topology_hiding - else { - requirement "Conformiq/UnprotectedReg/UE2 - IMS and iut_topology_hiding"; - // there is no TP for case where UE2 behind IMS is - // registering and has iut_topology_handling enabled - - // continue unprotected registration. - SIP401Resp resp; - resp.recipient = UE2; - resp.sender = IUT; - resp.method = respond("401"); - MwOut.send(resp); - connections[ue2].registering = true; - } - } - - /** - * For a remote UE that has started registration through Mw on - * this IUT after successful registration a NOTIFY request is sent - * back onto the Mw interface and the connection is set as - * registered. - */ - public void protectedMwRegister(SIPRegisterReq req) { - - if (iut_topology_hiding) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - requirement "Conformiq/ProtectedReg/iut_topology_hiding/Successful remote register"; - connections[ue2].registered = true; - return; - } - else { - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.authorization_header.algorithm_parameter == AKAV1_MD5 && - req.authorization_header.private_user_identity == PRESENT && - req.authorization_header.response_parameter == PRESENT && - req.callid_parameter == "initial CallID parameter") { - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.path_header.present = PRESENT; - resp.p_associated_uri_header.present = PRESENT; - resp.p_associated_uri_header.registered_public_user_identity.present = PRESENT; - resp.service_route_header.present = PRESENT; - resp.service_route_header.sip_uri = "IUT S_CSCF"; - resp.p_charging_function_addresses_header.present = PRESENT; - resp.p_charging_vector_header.present = PRESENT; - resp.contact_header.present = PRESENT; - resp.contact_header.address_of_public_user_identity = PRESENT; - - requirement "TP_IMST2_MW_REG_22"; - MwOut.send(resp); - return; - } - - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.callid_parameter == "unknown CallID parameter") { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_23"; - return; - } - - if (req.authorization_header.present == PRESENT && - req.authorization_header.AUTS_parameter == "invalid SQN parameter") { - - if (iut_respond_401_mwreg24) { - SIP401Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_REG_24/401 response"; - MwOut.send(resp); - trace("IUT was configured such that 401 is replied here."); - } - else { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_REG_24/403 response"; - MwOut.send(resp); - trace("IUT was configured such that 403 is replied here."); - } - - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == YES && - req.authorization_header.private_user_identity == "matching previous registered public user identity" && - req.to.isPresent() && - req.to.value == "public user identity not matching previous registered public user identity") { - - SIP500Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_25"; - return; - } - - if (req.authorization_header.isPresent() && - req.auth_challenge_resp_param.isOmit() && - req.authorization_header.AUTS_parameter == "invalid MAC parameter") { - - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_26"; - return; - } - - // there is no TP where visiting UE2 behind IMS would - // register successfully - it's done here. - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - requirement "Conformiq/ProtectedReg/no iut_topology_hiding/Successful remote register"; - connections[ue2].registered = true; - return; - } - } - - - /** - * A visiting UE that has sent an unprotected register, will - * receive a 401 from Mw that is forwarded to the Gm interface - */ - public void mw401RegisterResponse(SIP401Resp resp) { - - // if sender of request was ue1 this is response to that - // request and should be destined to ue1 - requireCurrentRecipient(resp.recipient); - if (iut_topology_hiding) { - if (current_ue == ue1) - requirement "Conformiq/UnprotectedReg/UE1 reg resp with iut_topology_hiding"; - if (current_ue == ue2) - requirement "Conformiq/UnprotectedReg/UE2 reg resp with iut_topology_hiding"; - } - else { - resp.www_authenticate_header.present = PRESENT; - resp.www_authenticate_header.ck_parameter.present = OMIT; - resp.www_authenticate_header.ik_parameter.present = OMIT; - resp.security_server_header.present = PRESENT; - resp.security_server_header.pcscf = SECURITY_LIST_PARAMETERS; - resp.sender = IUT; - resp.method = resp.method; - GmOut.send(resp); - if (current_ue == ue1) - requirement "TP_IMST2_MW_REG_12"; - connections[current_ue].unauthorized = true; - // if NO iut_topology_hiding set then the following - // registers have to have security association set! - connections[current_ue].security_association = true; - } - } - - /** - * A protected registration that comes through the Mw interface. - * When registration is successful UE will answer a 200 - * response. This response needs to be forwarded to the Gm - * interface of the visiting UE. - */ - public void mw200RegisterResponse(SIP200Resp resp) { - // if the original request was sent by UE1 then this response - // coming from MW interface has to be from UE2 and vice versa. - requireCurrentRecipient(resp.recipient); - - // update sender to IUT - resp.sender = IUT; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.value = TYPE1; - GmOut.send(resp); - - if (!iut_topology_hiding) { - if (current_ue == ue1) - { - requirement "TP_IMST2_MW_GEN_05"; - } - else { // initial register originating from UE2 - // Upon receipt of a SIP 200 (OK) response to the - // initial (protected) SIP REGISTER request the P-CSCF - // located in the visited network (== this IUT) shall - // send a SIP SUBSCRIBE request to the entry point of - // the home network (== to the Mw interface). - SIPSubscribeReq req; - req.method = SUBSCRIBE; - req.sender = IUT; - req.recipient = IMS; - req.request_uri.present = PRESENT; - req.sip_uri.value = "[public user identity]"; - req.event_header.present = PRESENT; - req.event_header.reg_parameter = PRESENT; - req.expire_header.value = "[a value higher than the value in the 200 response]"; - req.p_asserted_identity_header.sip_uri = "[SIP URI of IUT P-CSCF inserted into the Path header during registration of UE1]"; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.icid_parameter.present = PRESENT; - requirement "TP_IMST2_MW_REG_14"; - MwOut.send(req); - } - } - else { - if (current_ue == ue1) - requirement "Conformiq/ProtectedReg/UE1 and iut_topology_hiding"; - else - requirement "Conformiq/ProtectedReg/UE2 and iut_topology_hiding"; - } - // update UE's status - connections[current_ue].registered = true; - } - - - /** - * IUT has received REGISTER on Gm from UE1 and has forwarded this - * via Ic1. Now IUT received 3xx response and resending REGISTER - * to Ic2 or error code to registering UE. - */ - public void ic3xxRegisterResponse(SIP3xxResp resp) { - require iut_topology_hiding; - - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg04) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_04/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_04/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_01"; - return; - } - } - - /** - * IUT has received REGISTER from UE1 and has sent REGISTER via - * Ic1 to IMS. Now IUT receives 480 which is replied with a new - * REGISTER. - */ - public void ic480RegisterResponse(SIP480Resp resp) { - require iut_topology_hiding; - - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg05) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_05/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_05/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_02"; - return; - } - } - - - /** - * Sends a REGISTER message to Ic2 interface - */ - public void sendIc2Register() { - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg06) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_06/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_06/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_03"; - return; - } - } - - public void send403ResponseToIc1() { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("403"); - Ic1Out.send(resp); - requirement "TP_IMST2_IC_REG_07"; - return; - } - - public void send408ResponseToGm() { - SIP408Resp resp; - resp.recipient = UE1; - resp.sender = IUT; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_ISC_INI_05"; - } - - /** - * An emergency INVITE request is received (by UE1) before the UE - * has even registered. - * - * TPs talk about "emergency registered in IUT". When is a UE - * emergency registered? - */ - public void emergencyInviteNotRegistered(SIPInviteReq r) { - int gm_nro = getUENro(r.sender); - - if (senderAndRecipient(r, UE1, UE2)) - { - if (r.request_uri.value == EMERGENCY_SERVICE_ID) { - // configured for emergency sessions - if (iut_configured_for_emergency_sessions) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - // does not send any 4xx out - requirement "TP_IMST2_GM_EME_02"; - } - else { // NOT configured for emergency sessions - SIP380Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("380"); - resp.content_type_header.value = "[3GPP IMX XML body]"; - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_01"; - } - // calling connection is registered for emergency calls - // and has an emergency service ID - if (connections[gm_nro].emergency_registered) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_04"; - } - } - - // if the connection is emergency registered but it has no service ID - if (connections[gm_nro].emergency_registered && - r.request_uri.value == "||" + EMERGENCY_SERVICE_ID) - { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_03"; - } - return; - } - - if (senderAndRecipient(r, UE1, IMS) && - iut_configured_entry_point_to_ims && - iut_configured_for_emergency_sessions) { - if (r.request_uri.isPresent() && - r.request_uri.value == REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID) { - - if (iut_stored_display_name && - r.second_p_asserted_id_header.tel == TEL_URI_OF_EMERGENCY_PUB_USER_ID) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.emergency_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_EMERGENCY_PUB_USER_ID; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_05"; - return; - } - - // these are only for EME_04, EME_03 does not fill any - // of these values - if (connections[ue1].emergency_registered && - r.p_preferred_identity_header.isPresent() && - r.p_preferred_identity_header.emergency_public_user_identity.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_preferred_identity_header.emergency_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_EMERGENCY_PUB_USER_ID; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_04"; - return; - } - - if (connections[ue1].emergency_registered) { - r.route_header.present = PRESENT; - r.topmost_route_header.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_03"; - return; - } - - r.request_uri.value = "-> emergency service URN"; - r.route_header.present = PRESENT; - r.topmost_route_header.present = PRESENT; - r.topmost_route_header.value = "topmost SIP URI of IUT E-CSCF"; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_01"; - return; - } - - if (r.p_preferred_identity_header.isPresent()) { - r.p_preferred_identity_header.present = PRESENT; - r.p_asserted_identity_header.present = OMIT; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - r.route_header.present = PRESENT; - r.route_header.topmost.present = PRESENT; - r.route_header.topmost.value = "SIP URI of IUT E-CSCF"; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_02"; - return; - } - - return; - } - } - - - - /** - * Local registered UE1 and visiting UE2. UE1 sends an emergency - * INVITE call to UE2. - */ - public void emergencyInviteMwRegistered(SIPInviteReq r) { - - require iut_configured_for_emergency_sessions; - require iut_configured_entry_point_to_ims; - require iut_stored_display_name; - require !iut_topology_hiding; - require r.request_uri.isPresent(); - - if (r.request_uri.value == REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID) { - r.sender = IUT; - r.request_uri.value = "-> emergency service URN"; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_07"; - return; - } - - if (r.request_uri.value == "emergency service URN" && - r.p_preferred_identity_header.isPresent()) { - - if (r.p_preferred_identity_header.registered_public_user_identity.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.registered_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_PUB_UID; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_08"; - return; - } - - if (r.p_preferred_identity_header.tel == TEL_URI_OF_PUB_UID) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.value = TEL_URI_OF_PUB_UID; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.value = "registered public user identity"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_09"; - return; - } - } - - if (r.request_uri.emergency_service_urn.isPresent()) { - SIP380Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("380"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_11"; - return; - } - } - - - /** - * UE1 can send an INVITE to UE2 even if this is not registered yet - */ - public void handleUE1AloneInvite(SIPInviteReq msg) { - if (msg.supported_header.value == TIMER_OPTION_TAG && - msg.session_expires_header.value == WRONG_EXPIRATION) { - SIP422Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("422"); - resp.min_se_header.present = PRESENT; - requirement "TP_IMST2_GM_INI_07"; - GmOut.send(resp); - return; - } - if (msg.sdpOffer.isPresent() && - msg.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - SIP488Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("488"); - resp.sdpOffer.present = PRESENT; - requirement "TP_IMST2_GM_SDP_01"; - GmOut.send(resp); - return; - } - if (msg.encryptedSDPOffer.isPresent()) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_SDP_02"; - GmOut.send(resp); - return; - } - } - - - /** - * INVITE received from within own network but that has - * iut_topology_hiding set is forwarded to Ic interface. - */ - public void gmToIcInvite(SIPInviteReq msg) { - if (iut_requiring_periodic_refresh) { - msg.session_expires_header.present = PRESENT; - } - msg.topmost_via_header.present = PRESENT; - msg.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - msg.encrypted_sip_uri.present = PRESENT; - msg.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - msg.p_charging_vector_header.present = OMIT; - msg.p_charging_function_addresses_header.present = OMIT; - Ic1Out.send(msg); - ic_invite_sent = true; - requirement "TP_IMST2_IC_INI_01"; - if (iut_requiring_periodic_refresh) - requirement "TP_IMST2_IC_STA_02"; - return; - } - - /** - * Forward an INVITE received from the Gm interface to the Mw - * interface. This is the case where UE2 is on IMS. - */ - public void gmToMwInvite(SIPInviteReq msg) { - current_ue = getUENro(msg.sender); - if (msg.route_header.isPresent() && - msg.route_header.value == "Route header not matching stored Service Route header") { - - if (iut_forward_mwini03) { - msg.route_header.value = "Route header from 200 response of last registration"; - msg.sender = IUT; - MwOut.send(msg); - requirement "TP_IMST2_MW_INI_03/Forward INVITE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_03/Respond 400"; - } - return; - } - - if (msg.topmost_route_header.isPresent() && - msg.topmost_route_header.value == IMS) { - - if (iut_has_stored_display_name && - msg.p_preferred_identity_header.present == PRESENT) { - - msg.p_preferred_identity_header.present = OMIT; - msg.p_asserted_identity_header.present = PRESENT; - msg.p_asserted_identity_header.stored_display_name.present = PRESENT; - msg.sender = IUT; - msg.recipient = IMS; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_05"; - return; - } - - msg.via_header.present = PRESENT; - msg.via_header.value = "address of IUT P-CSCF"; - msg.record_route_header.present = PRESENT; - msg.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF" + - "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.icid_parameter.present = PRESENT; - msg.sender = IUT; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - - GmOut.send(resp); - - requirement "TP_IMST2_MW_INI_04"; - return; - } - - if (msg.session_expires_header.isOmit() && - iut_requiring_periodic_refresh) { - - if (msg.min_se_header.isPresent()) { - msg.session_expires_header.present = PRESENT; - msg.session_expires_header.duration_parameter.present = PRESENT; - msg.session_expires_header.duration_parameter.value = "greater than Min-SE header"; - requirement "TP_IMST2_MW_INI_16"; - - } - else { - msg.session_expires_header.present = PRESENT; - msg.session_expires_header.refresh_parameter.present = OMIT; - requirement "TP_IMST2_MW_INI_15"; - } - - msg.sender = IUT; - msg.recipient = IMS; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - return; - } - - - MwOut.send(msg); - // send a 100 response to caller UE1 - SIP100Resp resp; - resp.method = respond("100"); - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - connections[current_ue].calling = true; - requirement "Conformiq/Invite/Gm to Mw invite received"; - return; - } - - - /** - * If both UEs are local then the INVITE call is routed back to - * the Gm interface with some special handling conditions - */ - public void gmToGmInvite(SIPInviteReq msg) { - current_ue = getUENro(msg.sender); - - // TODO 02.01.09: the TPs don't require the UEs to be - // registered or anything for GM_EME_05 - I wonder if this is - // correct? - - // if the INVITE request has specific fields then it is an - // emergency call that can be handled here - if (msg.request_uri.value == EMERGENCY_SERVICE_ID) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_05"; - return; - } - - if (msg.service_route_header.value == ROUTE_HEADER_NOT_MATCHING) { - if (iut_forward_message_ini02) { - // invite is forwarded - trace("The IUT was configured initially such that it sends an INVITE to UE2 in this case"); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - GmOut.send(msg); - requirement "TP_IMST2_GM_INI_02/Forward INVITE"; - connections[current_ue].calling = true; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("400"); - GmOut.send(resp); - // nothing is sent to the UE2! - trace("The IUT was configured initially such that nothing is sent to UE2 in this case"); - requirement "TP_IMST2_GM_INI_02/400 Response"; - } - return; - } - - if (msg.supported_header.value == TIMER_OPTION_TAG && - msg.session_expires_header.value == ACCEPTABLE_EXPIRATION) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - msg.session_expires_header.present = PRESENT; - requirement "TP_IMST2_GM_INI_08"; - GmOut.send(msg); - return; - } - - if (iut_ifc_contact_as1_for_message && - iut_and_as1_in_same_trust_domain && - as1_indicated_iut_handles_dialog) { - SIPInviteReq req; - req.recipient = AS1; - req.sender = IUT; - IscOut.send(req); - iut_sent_invite_to_as1 = true; - requirement "Conformiq/Invite/iut sent invite to AS1"; - } - - // send response 100 to inviter i.e. UE1 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - // forward invite to callee i.e. UE2 - msg.sender = IUT; - msg.record_route_header.value = PCSCF_OR_FQDN_ADDRESS; - msg.via_header.value = PCSCF_OR_FQDN_ADDRESS; - msg.p_charging_vector_header.present = OMIT; - msg.p_charging_vector_header.icid_parameter.present = PRESENT; - msg.p_charging_function_addresses_header.present = OMIT; - GmOut.send(msg); - - // change the status of the caller - connections[current_ue].calling = true; - requirement "TP_IMST2_GM_INI_01"; - - return; - } - - /** - * If the remote user (UE2) sends an invite through the Mw - * interface it is simply forwarded to the Gm interface to the - * recipient. - */ - public void mwHandleInvite(SIPInviteReq r) { - - if (iut_topology_hiding) { - requirement "Conformiq/Invite/MW invite with iut_topology_hiding"; - } - else { - if (iut_requiring_periodic_refresh && - r.session_expires_header.isOmit()) { - - if (r.min_se_header.isPresent()) { - r.session_expires_header.present = PRESENT; - r.session_expires_header.duration_parameter.present = PRESENT; - r.session_expires_header.duration_parameter.value = "greater than Min-SE header"; - r.sender = IUT; - GmOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_19"; - return; - } - - r.session_expires_header.present = PRESENT; - r.session_expires_header.refresh_parameter.present = OMIT; - r.sender = IUT; - GmOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_18"; - return; - } - - if (r.request_uri.isPresent() && - r.request_uri.barred_public_user_id.isPresent()){ - SIP404Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_22"; - return; - } - - - if (r.request_uri.isPresent() && - r.request_uri.invalid_GRUU_parameter.isPresent()){ - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_23"; - return; - } - - if (r.p_asserted_service_header.isPresent() && - r.p_asserted_service_header.value == "unsubscribed service"){ - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_24"; - return; - } - - if (r.p_asserted_service_header.isOmit() && - r.sdpOffer.isPresent() && - r.sdpOffer.value == "unsubscribed service") { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_25"; - return; - } - - if (r.sdpOffer.isPresent() && - r.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - SIP488Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.sdpOffer.present = PRESENT; - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_01"; - return; - } - - if (r.encryptedSDPOffer.isPresent() && - iut_configured_entry_point_to_ims && - iut_reject_encrypted_SDP_offer) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("4xx"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_02"; - // no INVITE is sent to UE1 - return; - } - - // if no special case then a 100 response is returned and the - // INVITE is forwarded - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_INI_20"; - requirement "Conformiq/Invite/MW invite without iut_topology_hiding"; - } - } - - - public void icHandleInvite(SIPInviteReq r) { - require iut_topology_hiding; - - if (r.via_header.isPresent() && - r.via_header.topmost.isPresent() && - r.via_header.topmost.value == "topmost "+ SIP_URI_OF_IMS && - r.encrypted_sip_uri.isPresent() && - r.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - Ic1Out.send(resp); - r.any_header.present = OMIT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_IC_INI_05"; - return; - } - - if (iut_requiring_periodic_refresh) { - r.session_expires_header.present = PRESENT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_IC_INI_06"; - return; - } - - if (r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent()) { - // influences the 200 response message that can be - // received later - invite_contact_header_with_gruu = true; - return; - } - } - - - /** - * A MESSAGE is received on the Ic interface, when IUT has - * topology hiding and is in same trust domain with IMS. - */ - public void icHandleMessage(SIPMessageReq req) { - if (req.topmost_via_header.isPresent() && - req.topmost_via_header.value == SIP_URI_OF_IMS && - req.encrypted_sip_uri.isPresent() && - req.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - req.any_header.present = OMIT; - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_STA_03"; - return; - } - - if (req.to.isPresent() && - req.to.value == "GRUU of IUT IBCF") { - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_STA_04"; - return; - } - } - - - /** - * UEs are local to the IUT, and UE1 has sent INVITE to UE2. UE2 - * sends 180 response that is forwarded. - */ - public void forwardGmToGm180Response(SIP180Resp resp) { - int ue = getUENro(resp.sender); - resp.sender = IUT; - if (connections[1-ue].calling) { - requirement "TP_IMST2_GM_INI_03"; - // forward the 180 response to UE1 - GmOut.send(resp); - connections[ue].ringing = true; - - if (iut_sent_invite_to_as1) { - if (as1_and_iut_in_same_net) { - resp.p_charging_function_addresses_header.present = PRESENT; - resp.recipient = AS1; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_01"; - return; - } - if (!as1_and_iut_in_same_net && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.recipient = AS1; - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_03"; - return; - } - } - } - } - - /** - * P-CSCF forwards SIP 180 response with unacceptable SDP media - * parameter offer to originating UE (who initiated INVITE seq.). - */ - public void gm180SDPResponse(SIP180Resp msg) { - if (msg.sdpOffer.isPresent() && msg.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - msg.sender = IUT; - GmOut.send(msg); - requirement "TP_IMST2_GM_SDP_03"; - } - } - - - /** - * INVITE was sent to Ic interface and now a 180 response was - * received on Ic. - */ - public void icToGm180InviteResponse(SIP180Resp p) { - require iut_topology_hiding; - - p.any_header.present = OMIT; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - GmOut.send(p); - requirement "TP_IMST2_IC_INI_02"; - } - - /** - * INVITE was sent to Ic interface and now a 200 response was - * received on Ic. - */ - public void icToGm200InviteResponse(SIP200Resp p) { - require iut_topology_hiding; - - p.any_header.present = OMIT; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - GmOut.send(p); - requirement "TP_IMST2_IC_INI_03"; - } - - public void gmToIc180InviteResponse(SIP180Resp resp) { - require iut_topology_hiding; - - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_07"; - return; - } - - public void gmToIc200InviteResponse(SIP200Resp resp) { - require iut_topology_hiding; - - if (invite_contact_header_with_gruu) { - resp.contact_header.present = PRESENT; - resp.contact_header.value = "GRUU"; - resp.sender = IUT; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_09"; - return; - } - - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_08"; - return; - } - - /** - * P-CSCF initiates call release due to wrong SDP offer in SIP 200 - * response. - * - * Happened so far: UE1 has sent INVITE to UE2, IUT has forwarded - * this message. Now UE2 responds with a 200 response message. - */ - public void gm200SDPResponse(SIP200Resp r) { - boolean exc_01 = false; - boolean exc_02 = false; - - // if SDP info is unacceptable send 200 message to UE1 - if (r.sdpOffer.value == "unacceptable SDP offer" && - r.sdpOffer.isPresent()) { - requirement "Conformiq/EXC/exc_01"; - exc_01 = true; - } - - if (r.encryptedSDPOffer.isPresent() && - iut_reject_encrypted_SDP_offer) { - requirement "Conformiq/EXC/exc_02"; - exc_02 = true; - } - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - - // IUT receives a SIP ACK request - AnyRecord a = GmIn.receive(-1); - require (a instanceof SIPAckReq); - SIPAckReq req = (SIPAckReq) a; - require senderAndRecipient(req, UE1, UE2); - - /** - * UE1 has sent invite to UE2, IUT successfully forwarded this - * INVITE. UE2 answered with message 200 with wrong SDP offer - * values and now UE1 has sent a request ACK. - */ - - if (req.sdpAnswer.present == PRESENT) { - SIPByeResp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.reason.present = PRESENT; - resp.reason.value = RESPONSE_503_OR_488; - GmOut.send(resp); - - // forward the ACK request - req.sender = IUT; - GmOut.send(req); - - // and send a BYE request - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = UE2; - bye.reason.present = PRESENT; - bye.reason.value = RESPONSE_503_OR_488; - - requirement "Conformiq/EXC/SDP answer is present"; - - if (exc_01) - requirement "TP_IMST2_GM_EXC_01"; - if (exc_02) - requirement "TP_IMST2_GM_EXC_02"; - } - - } - - /** - * Function that handles a received 100 response on the Mw - * interface after e.g. an INVITE request. - */ - public void mw100Response(SIP100Resp p){ - // IUT simply consumes the received 100 response message - requirement "Conformiq/Responses/Mw received response 100"; - } - - /** - * UE1 registered to IUT, UE2 on remote IMS. UE1 has sent MESSAGE - * to UE2 and IUT has forwarded it. Now UE2 through Mw responds - * with 3xx redirect response that is not followed by any other - * message. NOTE 3xx is different from 305 response - */ - public void mw3xxResponse(SIP3xxResp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - require r.contact_header.isPresent(); - require r.contact_uri.value == "Contact URI"; - - requirement "TP_IMST2_MW_GEN_17"; - } - - /* - * UE1 is local but UE2 is on other IMS. UE1 has sent INVITE to - * UE2. IMS (UE2) sends 180 response. - */ - public void forwardMwToGm180Response(SIP180Resp resp) { - - // It is assumed here that IUT has sent a 100 response earlier - // to UE1 caller, and this comes only after this. - resp.sender = IUT; - resp.record_route_header.present = PRESENT; - resp.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF for security association" + - "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_06"; - } - - - - /** - * A 200 response received on the Gm interface because of sent - * MESSAGE is forwarded to recipient on Gm interface - */ - public void forwardGmToGm200MessageResponse(SIP200Resp resp) { - resp.sender = IUT; - // forward UE2 response to UE1 - requirement "TP_IMST2_GM_STA_03"; - GmOut.send(resp); - - // if received MESSAGE was sent to AS1 then forward also the - // 200 answer - if (iut_ifc_contact_as1_for_message && - iut_sent_message_to_as1) { - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.value = TYPE3; - resp.recipient = AS1; - IscOut.send(resp); - requirement "TP_IMST2_ISC_GEN_02"; - } - } - - /** - * A 200 response received on the Gm interface because of a sent - * INVITE message is forwarded to recipient on Gm interface - */ - public void forwardGmToGm200Response(SIP200Resp resp) { - - if (iut_sent_invite_to_as1 && - !as1_and_iut_in_same_net && - as1_indicated_iut_handles_dialog && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.sender = IUT; - resp.recipient = AS1; - if (iut_forwarded_target_refresh_invite) - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - if (iut_forwarded_target_refresh_invite) - requirement "TP_IMST2_ISC_TAR_04"; - else requirement "TP_IMST2_ISC_TAR_05"; - } - - resp.sender = IUT; - // forward UE2 response to UE1 - requirement "TP_IMST2_GM_INI_04"; - GmOut.send(resp); - - if (iut_sent_invite_to_as1) { - if (as1_and_iut_in_same_net) { - resp.recipient = AS1; - resp.p_charging_function_addresses_header.present = PRESENT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_02"; - return; - } - if (!as1_and_iut_in_same_net && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.recipient = AS1; - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_04"; - return; - } - } - } - - - /** - * A 200 response received on the Mw interface is forwarded to - * recipient on Gm interface - * - * NB! It here assumed that the response messages 100 Trying and - * 180 Ringing have already been received and forwarded before the - * 200 Ok is received. - */ - public void forwardMwToGm200Response(SIP200Resp resp) { - - if (!iut_topology_hiding && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.ioi_parameter.isPresent()) { - resp.p_charging_vector_header.present = OMIT; - resp.sender = IUT; - - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_21"; - return; - } - - - resp.sender = IUT; - resp.record_route_header.present = PRESENT; - resp.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF for security association" + - "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_07"; - } - - /** - * A 200 response received on the Gm interface, as response to - * INVITE sent from Mw interface, is forwarded to recipient on Mw - * interface - */ - public void forwardGmToMw200Response(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (iut_has_stored_display_name && - r.p_preferred_identity_header.present == PRESENT) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.stored_display_name.present = PRESENT; - r.sender = IUT; - - MwOut.send(r); - requirement "TP_IMST2_MW_INI_09"; - return; - } - - if (iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwini11) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_INI_11/Forward 200"; - } - else { - requirement "TP_IMST2_MW_INI_11/No response"; - } - return; - } - - if (iut_stored_record_route_header && - r.record_route_header.isPresent() && - r.record_route_header.value == "header not matching stored Record-Route header") { - - if (iut_forward_mwini13) { - r.record_route_header.value = "stored Record-Route header" + - " + port number of Record-Route header of IUT P-CSCF" + - " + SIP URI port number of IUT P-CSCF" + - " + FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - r.record_route_header.comp_parameter.present = OMIT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_INI_13/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_13/No response"; - } - - return; - } - - if (r.sdpOffer.isPresent() && - r.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - // forward 200 to IMS - r.sender = IUT; - MwOut.send(r); - // get ACK back with SDP answer - AnyRecord a = MwIn.receive(-1); - require a instanceof SIPAckResp; - SIPAckResp ack = (SIPAckResp) a; - require ack.sdpAnswer.isPresent(); - require senderAndRecipient(ack, IMS, UE1); - - // send back BYE - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = IMS; - bye.method = BYE; - MwOut.send(bye); - - bye.recipient = UE1; - GmOut.send(bye); - requirement "TP_IMST2_MW_SDP_04"; - return; - } - - if (r.encryptedSDPOffer.isPresent()) { - // forward 200 to IMS - r.sender = IUT; - MwOut.send(r); - // get ACK back with SDP answer - AnyRecord a = MwIn.receive(-1); - require a instanceof SIPAckResp; - SIPAckResp ack = (SIPAckResp) a; - require ack.encryptedSDPAnswer.isPresent(); - require senderAndRecipient(ack, IMS, UE1); - - // send back BYE - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = IMS; - bye.method = BYE; - MwOut.send(bye); - - bye.recipient = UE1; - GmOut.send(bye); - requirement "TP_IMST2_MW_SDP_05"; - return; - } - - r.recipient = r.recipient; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.ioi_parameter.value = TYPE2; - r.p_charging_vector_header.orig_ioi_parameter.value = "[parameter of initial INVITE]"; - r.sender = IUT; - - MwOut.send(r); - requirement "TP_IMST2_MW_GEN_07"; - } - - - /** - * Visiting UE2 behind remote IMS has sent INVITE to UE1. IUT - * received this on the Mw interface and forwarded it to the Gm - * interface. Now UE1 answers through the Gm interface with 180 - * (ringing) which is forwarded to Mw interface. - */ - public void forwardGmToMw180Response(SIP180Resp resp) { - if (iut_has_stored_display_name && - resp.p_preferred_identity_header.present == PRESENT) { - resp.p_preferred_identity_header.present = OMIT; - resp.p_asserted_identity_header.present = PRESENT; - resp.p_asserted_identity_header.stored_display_name.present = PRESENT; - resp.sender = IUT; - - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_08"; - return; - } - - if (iut_stored_via_header && - resp.via_header.isPresent() && - resp.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwini10) { - resp.via_header.value = "stored Via header"; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_10/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_10/No response"; - } - return; - } - - if (iut_stored_record_route_header && - resp.record_route_header.isPresent() && - resp.record_route_header.value == "header not matching stored Record-Route header") { - - if (iut_forward_mwini12) { - resp.record_route_header.value = "stored Record-Route header" + - " + port number of Record-Route header of IUT P-CSCF" + - " + SIP URI port number of IUT P-CSCF" + - " + FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - resp.record_route_header.comp_parameter.present = OMIT; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_12/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_12/No response"; - } - return; - } - - // TODO, 20.01.09: in the TP documentation the arrows and - // interfaces seem wrong. - if (resp.sdpOffer.isPresent() && - resp.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - // don't send 4xx response back to IMS - - // forward 180 to IMS - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_03"; - return; - } - } - - - /** - * Remote UE2 has sent INVITE through Mw that has been forwarded - * to UE1 through Gm by the IUT. Now a 4xx response is received - * from Gm, sent by UE1 to UE2 behind Mw interface. - */ - public void forwardGmToMw4xxResponse(SIP4xxResp resp) { - - if (iut_stored_via_header && - resp.via_header.isPresent() && - resp.via_header.value == "not matching stored Via header") { - if (iut_forward_mwini14) { - resp.via_header.value = "stored Via header"; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_14/Forward 4xx"; - } - else { - requirement "TP_IMST2_MW_INI_14/No response"; - } - return; - } - } - - /** - * Remote UE (UE2) has sent a message to local UE. Now recipient - * (UE1) sends a 200 OK response back to the sender (200 received - * on Gm and sent to Mw). - */ - public void forwardGmToMw200MessageResponse(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - /** - * if a MESSAGE has been received by the local user from the - * remote user, it is responded with a 200 response and header - * fields are manipulated! - */ - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_vector_header.value == "[headers of UE1]" && - r.p_charging_function_addresses_header.present == PRESENT && - r.p_charging_function_addresses_header.value == "[header of UE1]") { - - // the headers are removed! - r.p_charging_vector_header.present = OMIT; - r.p_charging_vector_header.value = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - r.p_charging_function_addresses_header.value = OMIT; - requirement "TP_IMST2_MW_GEN_12"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (r.p_access_network_info_header.present == PRESENT && - r.p_access_network_info_header.network_provide_parameter == PRESENT) { - r.p_access_network_info_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_14"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (r.p_media_authorization_header.present == PRESENT) { - r.p_media_authorization_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_16"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (iut_configured_entry_point_to_ims && - iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - if (iut_forward_mwsta06) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_STA_06/Forward 200 response"; - } - else { - requirement "TP_IMST2_MW_STA_06/Nothing sent"; - } - return; - } - - // TODO 15.01.09: condition that IUT has stored public user - // identity from P-Called-Party-ID header is missing here - if (iut_configured_entry_point_to_ims && - r.p_preferred_identity_header.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.stored_public_uid.present = PRESENT; - r.p_asserted_identity_header.stored_display_name.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_STA_07"; - return; - } - } - - /** - * UE1 has sent an INVITE request to UE2 to which UE2 now responds - * with an error message. - */ - public void forwardUE2Error4xxResponse(SIP4xxResp resp) { - - resp.sender = IUT; - - if (resp.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_ini06) { - resp.via_header.value = STORED_VIA_HEADER; - resp.sender = IUT; - GmOut.send(resp); - requirement "TP_IMST2_GM_INI_06/4xx Response"; - } - else { - requirement "TP_IMST2_GM_INI_06/no message"; - } - } - else { - // forward 4xx response from UE2 to UE1 - requirement "TP_IMST2_GM_INI_05"; - GmOut.send(resp); - } - - } - - // receiving a 4xx response from callee (UE2) to caller (UE1) - // after a MESSAGE has been sent from caller to callee (e.g. UE1 - // -> UE2) - public void forwardGmToGm4xxMessageResponse(SIP4xxResp p) { - p.sender = IUT; - requirement "TP_IMST2_GM_STA_04"; - GmOut.send(p); - } - - - /** - * Local caller UE (UE1) has sent a message to remote UE (UE2 on - * IMS), that now responds with a 200 OK to the sent message. - * - * It is not cared for what are the statuses of the UE2 equipment - * behind the Mw interface, thus no requirement for it e.g. to be - * registered. - */ - public void forwardMwToGm200MessageResponse(SIP200Resp r) { - require iut_configured_entry_point_to_ims; - require !iut_topology_hiding; - - // forwarding of the 200 response received after a MESSAGE has - // been sent from remote callee to local caller - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_function_addresses_header.present == PRESENT) { - // remove headers from response before forwarding - r.p_charging_vector_header.present = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_GEN_10"; - return; - } - - GmOut.send(r); - requirement "TP_IMST2_MW_STA_04"; - } - - - /* - * Sending ACK by the caller to the callee (UE1->UE2). Two - * possible cases: UEs are both local or UE1 is local and UE2 is - * visiting (on other IMS). - */ - public void handleAck(SIPAckReq req) { - current_ue = getUENro(req.sender); - - // LOCAL UEs - if (localConnections() && callingUE1RingingUE2()) { - connections[current_ue].connected = true; - connections[1-current_ue].connected = true; - GmOut.send(req); - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - !iut_and_as1_in_same_trust_domain) { - req.p_access_network_info_header.present = OMIT; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - req.sender = IUT; - req.recipient = AS1; - IscOut.send(req); - requirement "TP_IMST2_ISC_SUB_01"; - } - - // TODO 31.12.08 - the below TP seems to be outdated, not - // in TP doc - //requirement "TP_IMST2_GM_INI_04"; - } - - // LOCAL caller UE1 and remote callee UE2 - // forward ACK from local UE1 to neighbour UE2 behind Mw - // interface - else if (localUE1VisitingUE2() && current_ue == ue1) { - // TPs MW_GEN_06 and 08 have the same preconditions but - // TPs check different things at response (sent response - // is different) - req.recipient = IMS; - req.p_charging_function_addresses_header.present = OMIT; - req.p_charging_function_addresses_header.value = "[CDF addresses OR OCF addresses]"; - requirement "TP_IMST2_MW_GEN_08"; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.ioi_parameter.value = TYPE2; - requirement "TP_IMST2_MW_GEN_06"; - MwOut.send(req); - // a successful call created over IUT to UE2 on remote IMS - connections[current_ue].connected = true; - connections[1-current_ue].connected = true; - } - } - - public void forwardGmToGmMessage(SIPMessageReq p) { - - if (p.message_body == LARGE_BODY) { - requirement "TP_IMST2_GM_GEN_01"; - GmOut.send(p); - return; - } - - // if the IUT configured with an iFC designed to contact AS1 - // for MESSAGE, then do so. Update local variable to true; - if (iut_ifc_contact_as1_for_message) { - if (iut_and_as1_in_same_trust_domain) { - p.p_asserted_service_header.present = PRESENT; - p.topmost_route_header.present = PRESENT; - p.topmost_route_header.value = "SIP URI of AS1"; - p.second_route_header.present = PRESENT; - p.second_route_header.value = SIP_URI_OF_IUT_SCSCF; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.value = "type3 orig-ioi parameter before the received orig-ioi parameters"; - p.sender = IUT; - Isc1Out.send(p); - requirement "TP_IMST2_ISC_STA_01"; - iut_sent_message_to_as1 = true; - saved_message_req = p; - } - else { - SIPMessageReq msg = p; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.value = TYPE3; - msg.sender = IUT; - msg.recipient = AS1; - IscOut.send(msg); - requirement "TP_IMST2_ISC_GEN_01"; - iut_sent_message_to_as1 = true; - } - } - - if (iut_sent_message_to_as1) { - SIPMessageReq msg = p; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.value = TYPE3; - msg.sender = IUT; - msg.recipient = AS1; - IscOut.send(msg); - requirement "TP_IMST2_ISC_GEN_03"; - } - - if (iut_forward_message_to_as1) { - if (p.p_charging_vector_header.isPresent()) { - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - if (p.p_charging_vector_header.icid_parameter.isPresent()) - requirement "TP_IMST2_ISC_STA_10"; - if (p.p_charging_vector_header.icid_parameter.isOmit()) - requirement "TP_IMST2_ISC_STA_11"; - } - } - - // UE1 sends MESSAGE to IUT, depending on header fields 400 or - // 100 response is sent back on Gm interface - if (p.record_route_header.value == ROUTE_HEADER_NOT_MATCHING) { - if (iut_forward_message_sta01) { - // respond 100 to UE1 and forward message to UE2 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("100"); - requirement "TP_IMST2_GM_STA_01/Forward message"; - trace("The IUT was initially configured initially to forward message to UE2"); - GmOut.send(resp); - - // forwarding received - p.sender = IUT; - GmOut.send(p); - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("400"); - requirement "TP_IMST2_GM_STA_01/Answer 400"; - GmOut.send(resp); - // respond 400 to UE1 and send nothing to UE2 - } - return; - } - - // if the received message has nothing special then forward it - // to UE2 and send response 100 to sender UE1 - { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("100"); - requirement "TP_IMST2_GM_STA_02"; - GmOut.send(resp); - - // forwarding received - p.sender = IUT; - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - return; - } - } - - /** - * UE1 has sent MESSAGE on Gm and IUT has forwarded this to - * Isc1. Now received 5xx response so forwarding MESSAGE again but - * now to Isc2. - */ - public void iscHandle5xxResponse(SIP5xxResp resp){ - if (iut_forward_iscsta05) { - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_05"; - return; - } - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_02"; - return; - } - - public void iscHandle408Response(SIP408Resp resp){ - if (iut_forward_iscsta06) { - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_06"; - return; - } - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_03"; - return; - } - - public void iscHandleTimeoutResponse() { - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_04"; - return; - } - - public void iscHandle200Response(SIP200Resp resp) { - if (iut_as1_indicated_handling_whole_dialog) { - resp.sender = IUT; - resp.recipient = AS1; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = "type3 orig-ioi parameter from the initial MESSAGE"; - resp.p_charging_vector_header.term_ioi_parameter.value = "type3 term-ioi parameter"; - Isc1Out.send(resp); - requirement "TP_IMST2_ISC_STA_08"; - return; - } - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_07"; - return; - } - - /** - * When a local UE (UE1) sends a MESSAGE to the remote UE - * (i.e. the IMS) the message is forwarded from Gm to Mw interface - * with some message content varied. - */ - public void forwardGmToMwMessage(SIPMessageReq p) { - require iut_configured_entry_point_to_ims; - - if (p.route_header.isPresent() && - p.route_header.value == "Route header not matching stored Service-Route header") { - if (iut_forward_mwsta01) { - p.route_header.value = "stored Record-Route header"; - p.sender = IUT; - p.recipient = IMS; - MwOut.send(p); - requirement "TP_IMST2_MW_STA_01/Forward MESSAGE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_STA_01/Respond 400"; - } - return; - } - - if (p.p_preferred_identity_header.isPresent()){ - p.p_preferred_identity_header.present = OMIT; - p.p_asserted_identity_header.present = PRESENT; - p.p_asserted_identity_header.stored_display_name.present = PRESENT; - p.p_asserted_identity_header.stored_display_name.value = "stored display name parameter"; - p.sender = IUT; - MwOut.send(p); - requirement "TP_IMST2_MW_STA_02"; - return; - } - - if (p.p_charging_vector_header.present == PRESENT && - p.p_charging_vector_header.value == "[headers of UE1]" && - p.p_charging_function_addresses_header.present == PRESENT && - p.p_charging_function_addresses_header.value == "[header of UE1]") { - // remove the header fields - p.p_charging_vector_header.present = OMIT; - p.p_charging_function_addresses_header.present = OMIT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_11"; - return; - } - - if (p.p_media_authorization_header.present == PRESENT) { - p.p_media_authorization_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_15"; - MwOut.send(p); - return; - } - - if (p.p_access_network_info_header.present == PRESENT && - p.p_access_network_info_header.network_provide_parameter == PRESENT) { - - p.p_access_network_info_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_13"; - MwOut.send(p); - return; - } - - if (p.message_body == LARGE_BODY) { - requirement "TP_IMST2_MW_GEN_01"; - } - // IMS not configured for being in the same trust domain as IUT. - if (!iut_ims_in_same_trust_domain) { - p.p_access_network_info_header.present = OMIT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_02"; - return; - } - - - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_03"; - - if (iut_stored_service_route_header) { - requirement "TP_IMST2_MW_STA_03"; - } - return; - } - - /** - * Received a MESSAGE on Gm interface, topology hiding is set so - * message is forwarded to the Ic interface. - */ - public void forwardGmToIcMessage(SIPMessageReq p) { - p.topmost_via_header.present = PRESENT; - p.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - p.p_charging_vector_header.present = OMIT; - p.p_charging_function_addresses_header.present = OMIT; - p.sender = IUT; - Ic1Out.send(p); - requirement "TP_IMST2_IC_STA_01"; - return; - } - - /** - * IUT has established an INVITE dialog for UE1 through Ic - * interface. - */ - public void forwardGmToIcBye(SIPByeReq bye) { - bye.topmost_via_header.present = PRESENT; - bye.topmost_via_header.value = "SIP URI of IBCF"; - bye.encrypted_sip_uri.present = PRESENT; - bye.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - bye.sender = IUT; - Ic1Out.send(bye); - requirement "TP_IMST2_IC_SUB_01"; - return; - } - - /** - * BYE received from IMS on Ic interface. - */ - public void forwardIcToGmBye(SIPByeReq bye) { - if (bye.topmost_via_header.isPresent() && - bye.topmost_via_header.value == "-> SIP URI of IBCF" && - bye.encrypted_sip_uri.isPresent() && - bye.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - bye.any_header.present = OMIT; - bye.sender = IUT; - GmOut.send(bye); - requirement "TP_IMST2_IC_SUB_04"; - return; - } - } - - /** - * Response to an BYE initiated by the UE1 and sent to Ic1 - * interface. - */ - public void forwardIcToGm200ByeResponse(SIP200Resp resp) { - resp.any_header.present = OMIT; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - resp.sender = IUT; - GmOut.send(resp); - requirement "TP_IMST2_IC_SUB_02"; - return; - } - - public void forwardGmToIc200ByeResponse(SIP200Resp resp) { - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - resp.sender = IUT; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_SUB_05"; - return; - } - - /** - * SIP MESSAGE is received during ongoing dialog from Ic - * interface, it is then forwarded to UE1 through Gm interface. - */ - public void forwardIcToGmMessage(SIPMessageReq msg) { - if (msg.topmost_via_header.isPresent() && - msg.topmost_via_header.value == SIP_URI_OF_IMS && - msg.encrypted_sip_uri.isPresent() && - msg.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - msg.any_header.present = OMIT; - msg.sender = IUT; - GmOut.send(msg); - requirement "TP_IMST2_IC_SUB_03"; - return; - } - } - - /** - * A message received from the remote UE on the Mw interface is - * forwarded onto the Gm interface and stripped off of some header - * field values. - * - * Here it is assumed that the message recipient is UE1 as local - * and the remote user UE2 sends the message. - */ - public void forwardMwToGmMessage(SIPMessageReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_function_addresses_header.present == PRESENT) { - - r.p_charging_vector_header.present = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_GEN_09"; - return; - } - - int sender_ue = getUENro(r.recipient); // UE1 should be the recipient - if (connections[sender_ue].security_association) { - r.via_header.present = PRESENT; - r.via_header.port_number.present = PRESENT; - r.via_header.fqdn_address.present = PRESENT; - r.via_header.fqdn_address.value = "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF for security association"; - r.p_charging_vector_header.present = OMIT; - r.p_charging_vector_header.icid_parameter.present = PRESENT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_STA_05"; - return; - } - } - - - /** - * The sender and recipient of a BYE message are set into the - * "disconnecting" state if the BYE message is forwarded by the - * IUT to the recipient. - */ - public void gmSendsByeToGm(SIPByeReq p) { - current_ue = getUENro(p.sender); - - SIP400Resp resp; - resp.sender = IUT; - - if (current_ue == ue1) { - resp.recipient = UE2; - // upon getting a bye before call has been setup the caller is - // sent a 403 response and nothing to the callee. - if (p.record_route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - resp.method = respond("400"); - requirement "TP_IMST2_GM_SUB_02/Respond 400"; - GmOut.send(resp); - - if (iut_forward_message_sub02) { - p.sender = IUT; - requirement "TP_IMST2_GM_SUB_02/Forward BYE"; - trace("IUT was initially configured to forward BYE request"); - GmOut.send(p); - } - } - else { - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - - connections[current_ue].disconnecting = true; - connections[1-current_ue].disconnecting = true; - requirement "TP_IMST2_GM_SUB_04"; - if (connections[current_ue].disconnecting && - connections[1-current_ue].disconnecting) - requirement "Conformiq/Gm/UE1 sent BYE, UEs disconnecting"; - } - } - - else { // UE2 is sender - // BYE message with mismatching Route-Header: a 400 - // response is sent back to sender (UE2) and either - // nothing is sent to recipient (UE1) or the BYE is - // forwarded - if (p.record_route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - if (iut_forward_message_sub03) { - p.sender = IUT; - GmOut.send(p); - trace("IUT was initially configured to forward BYE request if Route-Header is mismatching"); - requirement "TP_IMST2_GM_SUB_03/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = UE2; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_GM_SUB_03/Return response 400"; - // nothing is sent to UE1 - } - } - else { - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - - requirement "TP_IMST2_GM_SUB_05"; - connections[current_ue].disconnecting = true; - connections[1-current_ue].disconnecting = true; - if (connections[current_ue].disconnecting && - connections[1-current_ue].disconnecting) - requirement "Conformiq/Gm/UE2 sent BYE, UEs disconnecting"; - } - } - } - - - /** - * UE2 behing Mw on remote IMS sends a BYE request to UE1 on local - * IUT. - */ - public void mwSendsByeToGm(SIPByeReq b) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (b.callid_header.isPresent() && - b.callid_header.value == "|| existent dialog") { - // nothing is forwarded to Gm interface but 403 sent back - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("403"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_04"; - return; - } - - if (iut_stored_record_route_header && - b.record_route_header.isPresent() && - b.record_route_header.value == "Record-Route header not matching stored Record.Route header") { - if (iut_forward_mwsub05) { - b.record_route_header.value = "stored Record-Route header"; - b.recipient = b.sender; - b.sender = IUT; - MwOut.send(b); - requirement "TP_IMST2_MW_SUB_05/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("400"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_05/Respond 400"; - } - return; - } - - if (connections[ue1].security_association) { - b.via_header.present = PRESENT; - b.via_header.port_number.present = PRESENT; - b.via_header.fqdn_address.present = PRESENT; - b.via_header.fqdn_address.value = "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF for security association"; - b.p_charging_vector_header.present = OMIT; - b.p_charging_vector_header.icid_parameter.present = PRESENT; - b.sender = IUT; - GmOut.send(b); - requirement "TP_IMST2_MW_SUB_07"; - connections[ue2].disconnecting = true; - // lets set the current UE as -1 to indicate that the IMS (UE2 - // behind an IMS) is requesting BYE and not UE1 or UE2 - // directly on this IUT. - current_ue = -1; - } - } - - /** - * UE1 locally registered on IUT and UE2 registered on remote - * IMS. UE1 has sent BYE on Gm interface to UE2 behind Mw. - */ - public void gmSendsByeToMw(SIPByeReq b) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (b.callid_header.isPresent() && - b.callid_header.value == "||existent dialog") { - // don't forward BYE on MW but reply 403 on Gm - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_MW_SUB_01"; - return; - } - - if (b.route_header.isPresent() && - b.route_header.value == "Route header not mathing stored Record-Route header") { - if (iut_forward_mwsub02) { - b.route_header.present = PRESENT; - b.route_header.value = "stored Record-Route header"; - b.sender = IUT; - MwOut.send(b); - requirement "TP_IMST2_MW_SUB_02/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_SUB_02/Respond 400"; - } - return; - } - - MwOut.send(b); - connections[ue1].disconnecting = true; - current_ue = getUENro(b.sender); - requirement "Conformiq/Bye/Gm to Mw BYE request"; - } - - /** - * For two UE that have registered to the IUT, but that are have - * not a session setup or in the phase of creating one. It is - * still possible to receive a BYE from other UE and this should - * be handled. It is assumed that this happens only with local - * connections. - */ - public void byeToRegisteredConnection(SIPByeReq p) { - - // UE1 and UE2 are registered but have not a dialog - if (p.sender == UE1) { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("403"); - requirement "TP_IMST2_GM_SUB_01"; - GmOut.send(resp); - } - } - - public void byeWhenAlreadyDisconnecting(SIPByeReq p, boolean localconnections) { - - if (localconnections) { - // if UE1 sends a second BYE once UE1 and UE2 are already in a - // disconnecting state. A 481 response is sent back to UE1 and - // 200 sent again to UE2. - if (senderAndRecipient(p, UE1, UE2) && - bothUEsDisconnecting()) { - SIP481Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("481"); - GmOut.send(resp); - SIP200Resp resp2; - resp2.recipient = UE2; - resp2.method = respond("200"); - GmOut.send(resp2); - requirement "TP_IMST2_GM_SUB_10"; - } - } - - else { // localUE1VisitingUE2 - if (iut_configured_entry_point_to_ims && - !iut_topology_hiding && - senderAndRecipient(p, IMS, UE1)) { - SIP481Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("481"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_09"; - } - } - return; - } - - public void gmBye200Response(SIP200Resp p) { - - if (p.sender == UE1) { - if (localUE1VisitingUE2()) { - gmBye200ResponseToMw(p); - return; - } - - // this has to have both UEs as local - else if (p.via_header.value == NOT_MATCHING_VIA_HEADER && localConnections()) { - if (iut_forward_message_sub09) { - p.sender = IUT; - p.via_header.value = STORED_VIA_HEADER; - GmOut.send(p); - trace("IUT was initially configured to forward BYE if Via Header value equals stored."); - requirement "TP_IMST2_GM_SUB_09/Forward 200"; - } - - else { // nothing is sent out - requirement "TP_IMST2_GM_SUB_09/no message"; - } - } - - else - requirement "TP_IMST2_GM_SUB_07"; - } - - else { // sender is UE2 on IUT (not behind IMS) - if (p.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_sub08) { - p.sender = IUT; - p.via_header.value = STORED_VIA_HEADER; - GmOut.send(p); - trace("IUT was initially configured to forward BYE if Via Header does not match."); - requirement "TP_IMST2_GM_SUB_08/Forward 200"; - } - else { - // do not forward anything - requirement "TP_IMST2_GM_SUB_08/no message"; - } - } - - else { - requirement "TP_IMST2_GM_SUB_06"; - } - } - } - - - /** - * UE1 local, UE2 remote. UE2 has sent BYE to UE1 on IUT and now - * UE1 responds with 200 OK - */ - public void gmBye200ResponseToMw(SIP200Resp r) { - if (r.via_header.isPresent() && - r.via_header.value == "Via header not matching stored Via header") { - r.sender = IUT; - if (iut_forward_mwsub08) { - r.via_header.value = "stored Via header"; - MwOut.send(r); - requirement "TP_IMST2_MW_SUB_08/Forward 200"; - } - else { - requirement "TP_IMST2_MW_SUB_08/Nothing sent"; - } - } - } - - - /** - * A secondary invite is received after initial INIVITE was sent - * and a response 100 was received. - */ - // if an INVITE request is received when session is NOT ongoing - public void targetRefreshInviteNoSession(SIPInviteReq p) { - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - !iut_and_as1_in_same_trust_domain) { - p.p_access_network_info_header.present = OMIT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - SIP100Resp r; - r.sender = IUT; - r.recipient = UE1; - r.method = respond("100"); - GmOut.send(r); - requirement "TP_IMST2_ISC_TAR_01"; - return; - } - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - iut_and_as1_in_same_trust_domain) { // this is not - // explicitly required - // but putting here to - // distinguish from - // previous condition - if (as1_and_iut_in_same_net) { - p.p_access_network_info_header.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = PRESENT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_TAR_02"; - } - else { - p.p_access_network_info_header.present = OMIT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_TAR_03"; - } - SIP100Resp r; - r.sender = IUT; - r.recipient = UE1; - r.method = respond("100"); - GmOut.send(r); - } - - if (p.route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - if (iut_forward_message_tar02) { - // respond 100 to UE1 and forward INVITE - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("100"); - GmOut.send(resp); - p.sender = IUT; - GmOut.send(p); - requirement "TP_IMST2_GM_TAR_02/Forward INVITE"; - iut_forwarded_target_refresh_invite = true; - } - - // INVITE not forwarded but sender is replied with error - // message - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_GM_TAR_02/Respond 400"; - } - - // these are added here to force generation of both - // branches since the else branch is needed later to cover - // isc_tar_04. - if (iut_forwarded_target_refresh_invite) - requirement "Conformiq/Refresh/iut forwarded refresh invite"; - else - requirement "Conformiq/Refresh/iut did NOT forward refresh invite"; - } - - // refresh INVITE request for non existing dialog is sent - // response 403 - else { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_GM_TAR_01"; - } - } - - - - - // target refresh INVITE request while session is already up - public void targetRefreshInviteSessionUp(SIPInviteReq p) { - current_ue = getUENro(p.sender); // used to check responses - - SIP100Resp resp; - resp.sender = IUT; - - if (p.sender == UE1) { - resp.recipient = UE1; - requirement "TP_IMST2_GM_TAR_03"; - } - - else { // sender == UE2 - resp.recipient = UE2; - requirement "TP_IMST2_GM_TAR_04"; - } - resp.method = respond("100"); - GmOut.send(resp); - p.sender = IUT; - GmOut.send(p); - } - - /** - * UE1 local sends refresh UPDATE to UE2 visiting on remote IMS. - */ - public void targetRefreshUpdateMwSessionUp(SIPUpdateReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - // nothing is forwarded - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_01"; - return; - } - - /** - * UE1 local sends a refresh INVITE to UE2 on remote IMS. - */ - public void targetRefreshInviteMwSessionUp(SIPInviteReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (r.sender == UE1) { - if (r.route_header.isPresent() && - r.route_header.value == "Route header not matching stored Record-Route header") { - r.sender = IUT; - if (iut_forward_mwtar02) { - r.route_header.value = "stored Record-Route header"; - MwOut.send(r); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_02/Forward INVITE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_02/Respond 400"; - } - return; - } - - // emergency refresh INVITE - if (r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent() && - connections[ue1].emergency_registered && - iut_configured_for_emergency_sessions) { - r.request_uri.value = "UE1 IP address protected server port number"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_06"; - return; - } - - if (iut_configured_for_emergency_sessions - /* && UE1 has established an emergency session */ && - r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent()) { - r.request_uri.value = "UE1 IP address protected server port number"; - r.recipient = r.sender; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_10"; - return; - } - - - // successful refresh INVITE - r.via_header.present = PRESENT; - r.via_header.port_number.value = "port number of IUT P-CSCF"; - r.via_header.ip_address.value = "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - r.record_route_header.present = PRESENT; - r.record_route_header.SIP_URI_of_IUT_P_CSCF = "-> port number of IUT P-CSCF" + - "->FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.update_access_network_charging_info_parameter.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - mw_refresh_invite_sent = true; - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_03"; - return; - } - - // successful refresh INVITE by UE2 - if (r.sender == IMS) { - r.via_header.present = PRESENT; - r.via_header.port_number.value = "port number of IUT P-CSCF for security association"; - r.via_header.ip_address.value = "as topmost the IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - r.record_route_header.present = PRESENT; - r.record_route_header.SIP_URI_of_IUT_P_CSCF = "-> as topmost the SIP URI of IUT P-CSCF"; - r.sender = IUT; - GmOut.send(r); - mw_refresh_invite_sent = true; - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - MwOut.send(resp); - requirement "TP_IMST2_MW_TAR_05"; - return; - } - } - - - public void targetRefreshInviteIcSessionUp(SIPInviteReq req) { - require iut_topology_hiding; - - if (req.sender == UE1) { - // respond 100 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.method = respond("100"); - GmOut.send(resp); - - req.sender = IUT; - req.topmost_via_header.present = PRESENT; - req.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - req.encrypted_sip_uri.present = PRESENT; - req.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(req); - requirement "TP_IMST2_IC_TAR_01"; - return; - } - - if (req.sender == IMS && - req.topmost_via_header.isPresent() && - req.topmost_via_header.value == SIP_URI_OF_IUT_IBCF && - req.encrypted_sip_uri.isPresent() && - req.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - // respond 100 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.method = respond("100"); - Ic1Out.send(resp); - - // forward refresh INVITE - req.any_header.present = OMIT; - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_TAR_02"; - return; - } - } - - public void targetRefresh180Response(SIP180Resp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_06"; - } - if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_05"; - } - p.sender = IUT; - GmOut.send(p); - } - - public void targetRefresh200Response(SIP200Resp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - SIPAckResp aresp; - aresp.sender = IUT; - aresp.recipient = p.sender; - GmOut.send(aresp); - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - GmOut.send(p); - - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_08"; - } - if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_07"; - } - } - - - /** - * local UE1 sent refresh INVITE to remote UE2. Now remote UE2 - * answers with 200 OK. - */ - public void targetRefreshMw200Response(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - require connections[ue1].security_association; - - if (r.sender == IMS) { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "Record Route header of IUT P-CSCF -> same address same port number of IUT P-CSCF of response to initial INVITE"; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_TAR_04"; - return; - } - - // target refresh was sent by UE2 on remote IMS and now UE1 - // sends 200 response - if (r.sender == UE1) { - if (r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header" && - iut_stored_via_header) { - if (iut_forward_mwtar06) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_06/Forward 200"; - } - else { - requirement "TP_IMST2_MW_TAR_06/Nothing sent"; - } - } - - if (connections[ue1].security_association && - iut_stored_record_route_header) { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "-> stored Record-Route header"; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.update_access_network_charging_info_parameter.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_07"; - } - } - } - - /** - * During dialog ongoing a target refresh INVITE was received with - * special header values. - */ - public void targetRefresh4xxResponse(SIP4xxResp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - if (p.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_tar11) { - if (senderAndRecipient(p, UE2, UE1)) - requirement "TP_IMST2_GM_TAR_11/Forward 4xx"; - else - requirement "TP_IMST2_GM_TAR_12/Forward 4xx"; - - // forward modified response - p.via_header.value = STORED_VIA_HEADER; - p.sender = IUT; - GmOut.send(p); - } - - // no message is forwarded - else { - if (senderAndRecipient(p, UE2, UE1)) - requirement "TP_IMST2_GM_TAR_11/No message"; - else - requirement "TP_IMST2_GM_TAR_12/No message"; - } - } - - else { - GmOut.send(p); - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_10"; - } - else if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_09"; - } - } - } - - - /** - * UE2 on remote IMS has sent target refresh to UE1 on local - * IUT. Now IUT receives a 4xx response to this refresh. - */ - public void targetRefreshMw4xxResponse(SIP4xxResp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwtar08) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_08/Forward 4xx"; - } - else { - requirement "TP_IMST2_MW_TAR_08/Nothing sent"; - } - } - else { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "-> IP address of IUT P-CSCF\n"+ - "-> port number of IUT P-CSCF"; - r.record_route_header.comp_parameter.present = OMIT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_09"; - } - return; - } - - - /** - * If the registration timeout of UE1 timeouts when UE2 is remote - * on IMS. IUT then sends BYE to UE1 and UE2 to end dialog. - */ - public void ue1RegistrationTimeout() { - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = UE1; - GmOut.send(bye); - bye.recipient = UE2; - bye.request_uri.present = PRESENT; - bye.request_uri.value = "stored Contact header from initial INVITE"; - bye.to.present = PRESENT; - bye.to.value = "To header from 200 response"; - bye.from.present = PRESENT; - bye.from.value = "From header from initial INVITE"; - bye.callid_header.present = PRESENT; - bye.callid_header.value = "From header from initial INVITE"; - bye.cseq.present = PRESENT; - bye.cseq.value = "CSeq header is stored for direction calling to called"; - bye.route_header.present = PRESENT; - bye.route_header.value = "as stored for dialog"; - bye.reason.present = PRESENT; - MwOut.send(bye); - requirement "TP_IMST2_MW_SUB_10"; - } - -// ---xxx---- helper functions follow --- - - - private boolean callingUE1RingingUE2() { - return connections[ue1].calling && connections[ue2].ringing; - } - - - private boolean localConnections() { - return connections[ue1].is_home_net && connections[ue2].is_home_net; - } - - private boolean localUE1VisitingUE2() { - return connections[ue1].is_home_net && !connections[ue2].is_home_net; - } - - private boolean isVisiting(SIPPacket p) { - require p.sender == UE1 || p.sender == UE2; - int i = getUENro(p.sender); - return !connections[i].is_home_net; - } - - private boolean registered(String ue) { - int i = getUENro(ue); - return connections[i].registered; - } - - private boolean bothUEsDisconnecting() { - return (connections[ue1].disconnecting && - connections[ue2].disconnecting); - } - - private boolean bothUEsConnected() { - return (connections[ue1].connected && - connections[ue2].connected); - } - - private boolean bothUEsRegistered() { - return (connections[ue1].registered && - connections[ue2].registered); - } - - private String respond(String str) { - return "["+ str + " response]"; - } - - public int getUENro(String ue) { - assert (ue == UE1 || ue == UE2); - // UE1 has place holder 0 in the connections table - return ue == UE1 ? 0 : 1; - } - - // the variable current_ue is set at first registration message - // received by the IUT. If UE1 started registration then it needs - // to be the recipient of the following response - // message. - public void requireCurrentRecipient(String recipient) { - if (current_ue == ue1) - require recipient == UE1; - if (current_ue == ue2) - require recipient == UE2; - } - - // don't allow registration of UE if it is already registered or - // that is in the process of registering - public void requireUENotRegistered(int ue) { - if (connections[ue].registered || connections[ue].registering) - require false; - } - - // return the UE's name that has initiated e.g. a registration - // sequence - public String initiatingUE() { - return current_ue == ue1 ? UE1 : UE2; - } - - public boolean senderAndRecipient(SIPPacket msg, String ueA, String ueB) { - return msg.sender == ueA && msg.recipient == ueB; - } - - public void saveConfiguration(configSystemReq c) { - // save network configuration settings - saveIMSConfiguration(c.net); - // save UE1 configuration settings - setUEConfiguration(c.ue1, ue1); - setUEConfiguration(c.ue2, ue2); - } - - - public void saveIMSConfiguration(configNetworkReq c) { - iut_security_association = c.security_association; - iut_topology_hiding = c.topology_hiding; - iut_configured_entry_point_to_ims = c.configured_entry_point_to_ims; - iut_configured_for_emergency_sessions = c.configured_for_emergency_sessions; - iut_ims_in_same_trust_domain = c.same_trust_domain; - iut_forward_message_ini02 = c.forward_ini02; - iut_forward_message_ini06 = c.forward_ini06; - iut_forward_message_sta01 = c.forward_sta01; - iut_forward_message_sub02 = c.forward_sub02; - iut_forward_message_sub03 = c.forward_sub03; - iut_forward_message_sub08 = c.forward_sub08; - iut_forward_message_sub09 = c.forward_sub09; - iut_forward_message_tar11 = c.forward_tar11; - iut_forward_message_tar02 = c.forward_tar02; - iut_respond_408_reg09 = c.response_reg09; - iut_reject_encrypted_SDP_offer = c.encrypted_sdp_offer; - iut_respond_401_mwreg24 = c.respond_401_mwreg24; - iut_forward_mwini03 = c.forward_mwini03; - iut_has_stored_display_name = c.stored_display_name; - iut_forward_mwini10 = c.forward_mwini10; - iut_stored_via_header = c.stored_via_header; - iut_forward_mwini11 = c.forward_mwini11; - iut_forward_mwini12 = c.forward_mwini12; - iut_forward_mwini13 = c.forward_mwini13; - iut_stored_record_route_header = c.stored_record_route_header; - iut_forward_mwini14 = c.forward_mwini14; - iut_requiring_periodic_refresh = c.requiring_periodic_refresh; - iut_forward_mwsta01 = c.forward_mwsta01; - iut_stored_service_route_header = c.stored_service_route_header; - iut_forward_mwsta06 = c.forward_mwsta06; - iut_forward_mwsub02 = c.forward_mwsub02; - iut_forward_mwsub05 = c.forward_mwsub05; - iut_forward_mwsub08 = c.forward_mwsub08; - iut_forward_mwtar02 = c.forward_mwtar02; - iut_forward_mwtar06 = c.forward_mwtar06; - iut_forward_mwtar08 = c.forward_mwtar06; - iut_stored_display_name = c.stored_display_name; - iut_configured_entry_point_to_home_net= c.configured_entry_point_to_home_net; - iut_conf_two_entry_points_to_home_net = c.conf_two_entry_points_to_home_net; - iut_send_408_icreg04 = c.send_408_icreg04; - iut_send_408_icreg05 = c.send_408_icreg05; - iut_send_408_icreg06 = c.send_408_icreg06; - iut_ifc_contact_as1_for_message = c.contact_as1_for_message; - iut_ifc_contact_as1_for_invite = c.contact_as1_for_invite; - iut_ifc_contact_as2_for_invite = c.contact_as2_for_invite; - iut_and_as1_in_same_trust_domain = c.iut_and_as1_in_same_trust_domain; - as1_indicated_iut_handles_dialog = c.as1_indicated_iut_handles_dialog; - as1_and_iut_in_same_net = c.as1_and_iut_in_same_net; - iut_ifc_session_continued = c.ifc_session_continued; - iut_forward_iscsta05 = c.forward_iscsta05; - iut_forward_iscsta06 = c.forward_iscsta06; - iut_as1_indicated_handling_whole_dialog = c.as1_indicated_iut_handles_dialog; - iut_forward_message_to_as1 = c.forward_message_to_as1; - - } - - /** - * The UEs are configured by a configuration message at the - * begining of the model. The security association parameter is - * dependent on the way the IUT (IMS) has been configured and - * because of this the conditions here below. - */ - public void setUEConfiguration(configUserReq conf, int ue) { - connections[ue].security_association = false; - connections[ue].emergency_registered = conf.init_emergency_registered; - connections[ue].is_home_net = conf.ue_is_home_net; - connections[ue].temporary_security_association = conf.init_temporary_security_association; - connections[ue].registered_user_id = conf.init_registered_user_id; - } - - - // the IMS configuratin options - public boolean iut_security_association; - public boolean iut_topology_hiding; - public boolean iut_configured_entry_point_to_ims; - public boolean iut_configured_for_emergency_sessions; - public boolean iut_ims_in_same_trust_domain; - public boolean iut_forward_messages; - public boolean iut_forward_message_ini02; - public boolean iut_forward_message_ini06; - public boolean iut_forward_message_sta01; - public boolean iut_forward_message_sub02; - public boolean iut_forward_message_sub03; - public boolean iut_forward_message_sub08; - public boolean iut_forward_message_sub09; - public boolean iut_forward_message_tar02; - public boolean iut_forward_message_tar11; - public boolean iut_respond_408_reg09; - public boolean iut_reject_encrypted_SDP_offer; - public boolean iut_respond_401_mwreg24; - public boolean iut_forward_mwini03; - public boolean iut_has_stored_display_name; - public boolean iut_forward_mwini10; - public boolean iut_forward_mwini11; - public boolean iut_forward_mwini12; - public boolean iut_forward_mwini13; - public boolean iut_stored_record_route_header; - public boolean iut_forward_mwini14; - public boolean iut_stored_via_header; - public boolean iut_requiring_periodic_refresh; - public boolean iut_forward_mwsta01; - public boolean iut_stored_service_route_header; - public boolean iut_forward_mwsta06; - public boolean iut_forward_mwsub02; - public boolean iut_forward_mwsub05; - public boolean iut_forward_mwsub08; - public boolean iut_forward_mwtar02; - public boolean iut_forward_mwtar06; - public boolean iut_forward_mwtar08; - public boolean iut_stored_display_name; - public boolean iut_configured_entry_point_to_home_net; - public boolean iut_conf_two_entry_points_to_home_net; - public boolean iut_send_408_icreg04; - public boolean iut_send_408_icreg05; - public boolean iut_send_408_icreg06; - public boolean iut_ifc_contact_as1_for_message; - public boolean iut_ifc_contact_as1_for_invite; - public boolean iut_ifc_contact_as2_for_invite; - public boolean iut_and_as1_in_same_trust_domain; - public boolean as1_indicated_iut_handles_dialog; - public boolean as1_and_iut_in_same_net; // AS1 configured for - // being in within same - // IMS network as IUT - // S-CSCF - - - public boolean mw_refresh_invite_sent; - public boolean ic_invite_sent; - public boolean invite_contact_header_with_gruu; - public boolean iut_sent_message_to_as1; - public boolean iut_sent_invite_to_as1; - public boolean iut_forward_message_to_as1; - public boolean iut_ifc_session_continued; - public boolean iut_forward_iscsta05; - public boolean iut_forward_iscsta06; - public boolean iut_as1_indicated_handling_whole_dialog; - public boolean iut_forwarded_target_refresh_invite; - - public Connection[] connections; - private int ue1 = 0; - private int ue2 = 1; - private int current_ue; - private SIPMessageReq saved_message_req; - - -} // end of class - - - -class Connection { - public Connection() {} - - // connection properties - public boolean security_association; - public boolean temporary_security_association; - public boolean emergency_registered; - public boolean is_home_net; // IUT is home network - public boolean registered_user_id; // "UE2 registered public user - // identity with current - // private user identity in IUT - - // possible connection states - public boolean registering; - public boolean unauthorized; - public boolean registered; - public boolean calling; - public boolean ringing; - public boolean connected; - public boolean disconnecting; - -} diff --git a/model/ims.qml b/model/ims.qml deleted file mode 100644 index a648ce0..0000000 --- a/model/ims.qml +++ /dev/null @@ -1,4 +0,0 @@ -ims.xmi -ims.cqa -ims_records.cqa -ims_main.cqa diff --git a/model/ims.qtr b/model/ims.qtr deleted file mode 100644 index 488516330faa6f67d4fc5bc659edc6f029b6f8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13812736 zcmeEv33wbwm2g$JkHop-I8K~PaS|&|B58Uwy1-6w9NQ>~6UCODgv*Sjwmn#yk!MCe zxJ?ogmgQPtx$ls`lI6ZxV0VG#4k55CH%nj-?mbxG2X^^ib$3lyz3Q$Wjb=25YCgBs z-PLuydRM)A^=juWH|EN2*SDB+IM=#6E0)+4^^Ti*>+)GRLEx69%T}LzE`3%xyLZanR4TdUlK=m* z%{#Vi8sE}2zUkTN=dAnsvRD z^;a%iw)&cLDaqw0-J_*LQ-H^Nva{ua_q@k1X^-RoUH*7``RWTUpvO=28ZeqKyZhZ@ ziT_<9HG;oQY(~y6W_{n1Wve$|5Z4l3+#ZMDE!{C4VZn&z;KU-4avxyJiZ-a_JN%|Cig}f&b~(>_6DQvH#Qlx&3eU54~6I1qsty z0|5g85d!Ph93LX&%BkaP;O(VPhySkH1OJ_QE&R8p7ydhCHIx6#EvEmI3+%7i@3fy| zPuRouIsPm5+WZUzIsyV?SK7B*JGR`?J3h8&bo@ZQrwV*R_z|x3y3_k}Xbl zrBkV6@abu5>=EVD9b2~TN%cPwl27fncY4X2L41QHE_bMJcdnExgH@n!*OqkG;oxBt ze0y@2y#;-{Ym3vh!`+`Nfd=4C_P|FcU2g9}AC2Y@gMp-P+jLjC(6#+YSI&Dro5}yB z_9O6r@3r>t?O)r!wEx|Egg54AAYdTS{t&q8k-H}eS^t6OJ{FkT6?dHl_wT=BCn1-A zv%{rr*#*|(WYZ^rsp(AFoG+be0NcjN{j(;Y0Of1r230&V52UwThYZ`xV~>ijkA zDGg~97V6H}&WcPsz0LrA39Q}iWseTjFhrTge=+;k8R+e&E8yuoFEI_RAzwHJo>!9X z#Qv52efvTC!}fjlqixIjh?TSY>HpHt(7Wh$bPf4e@<~!A+wIrd4{88-*-HC{m9i~j z`|MOX*EN&f?{*bt%QLg(V{U2mO#Alj=(B7t-@DDtyUb8A+4b1*?KgJq%T2j`2MW_} zUw$H+KbS4{m8WO=%5JGVkuABU-UH?7smsn#Y8=f&EuM9wt2DcBU+(ChTt0oeee-&` z#)!(~qAx$q-g$Qn4zp{h^;IvY;DFnF?kaFw_PJTOal6XJ?1byX`&bt&Qx|hb^M!3E zEIEE!73CG(L$kS}JMHGn(FF}Hw+|(h6Fuy?WlN5qH>w3Y)8}*hp)<@9*EQ{yN8vI8#pg{I zCf%tXMkl%HQtzSZsZ(wHl2fJ%`(bU|T=;RUOL@q?4;?+N|A zb&_?yb(QsKYrFMo>#O!T_CEVn_Lnr&Zj#y>0;k)TQH~l66R7xt;fi&deF+ti$v)M- zn1(2~BKBt0stLgZ3ePS&`g$`Bq>H3HcbCNni^nYzJ;tMKRTJ zs}s|9PG6Y9F;^sJQCRay{q{k9Evgha*`t5!YGUoSUSNH|`i}J{`wIIeyJWxF{(}8o zNH9MGfmjHvw)^R9$?ajPO;5-g&P}ACea`xceIam#I}-H&SUjm~0_!L@Yl!O6I5&PwZ}YDF!XD()OGFcTbNOJ+w_SM z?eahLlD!X^-~^mnq5Blf%dE`c)03h};LG9l*eG0>48Cu(>`zo;afOe{C z6^Cz_VH_X|Yu@`$%h=OuA?yP-wye2Vd7zxkl>*p9rqlcEiKtBJE`OwYoZ(c@)xiUl zbw*4jX*>|BKwm>YM}KLZX>GCgfL8Dc>!-F2*uTxr+0VA$VSlTx)T|bk(22_0 zMWqv~V{^c_k$^f!m%|5Cz%#ohiZBaxC(l(ebNi7sDceOOwEalmSg}y{$h>PEj5}~4 zwyxx_&YX9p{dhIQt}U<{Q~3tQv{Z&F&%erkV$`=z)W;X7%n4e;(7V$AOv<@XrKHMN zeEH}il{0$ZgsV_p811{xwTDnkclr|NVwHOZDSbBvyw0hRPkOBiPW5Yn@ue?O!O1hQ zuEUxh&~!kom#Snoo-OWo%a>hjZ$qv36Z&?*YG4X`oe(`B8Entvou*M#2|7_dd|ui4oov=MoSGXL#KUb%uQ_2%<0k9XoVB)I!### zmSrBjw|6dLF%ONi{kn=&#i)uz@y8(^mC)0;QLp zK^4`R$^Vt)Wd#0xg8Vn_rn`XFAD~~hsMQD3|Ham)tsmGc?Z?U0<8)%~iD%cNV#%rj9v16HN$*+5j!ggkOf2cvo>e2sfH zq)K!~Mn`f$Rh0=^wp1!i-&t!x3)o{l)q1n_1+W5~ZeM9{wey1f zhx`rrF&l|Yqkt~HKE21E(C-N*^fzxG9lusp=i@#f+p%TmmYc>mbDRl$!93rsE!(&3 zNjcZWCZ)H;CiQQPP0DPGO&WM?RFdan=8Q%qjovg0ExbN9DSZRS6|rAlu5@1}l>%nr zJGkA*d2GaY+;?sCrro3CTefr6HsVYFi<@Gb(|>bpQf4f+rI|j^s4FeKCE+`+$?dq% z-sGW-(#}lZrp-6(xr>D`? z^dguK^wA-D4c$g>rnk{7eF`nnr^5{4h4dBl4fKBcF8U$*N%~n>FZd_=L;5rN8<;no zY^?^Z;VNs;dW?0wHEul#_WKvDr(4gpUIJEy`>pp{ABPo%uUX%>eq#OF`ak;w`%L?M zd!3!KA7x($s|>e+&tcv^X5R@Oh_ANaYQNk5sQqd1P5P$&2<%PzO{})T{H9X9DeC`q ztP|{2@a&{c3T~W}gPZgz!A<|E{IITlYlkv<>2u%V4q_B%=(~pH~0fwN`FPaMqf{7fc{sIACd>i9q?iD4>l6a zMR}*)o2uLWK>Ht~%-p5PR@4NCc3-0_J)Aw!{;Tz+M@`LW-$upMCpC#rFnQDHRT~tm zeq;u3c1immt#1=AUYx(uHIE85o2c_)+CQQc$S35n^J|(KR+c$NJ9B z)b2SE-4imPmiDJ2x+i=d*}Y6(4aP9vADDccz`t*T{qIy*0lbdxp--i6q+g`}3ex<1 zYslJR9kbqOeaw2qKEu8W)&ck0&#+%j)LhU{>f4kr9f64!OxRt%J|xZE;5PjZ*!g!o0L8nHPQBV#ic8|;=ss1rTNS^QcSY`Psdi&pN}n}U#zIWO-T|2 zSugrwfe-wP*~+VL6k!$4#8#L&6q__qj7=IW#U>4vW0QtwV>>ro=^R)|4o4yp>)fzl zP&g7>&&W|`|2v<&nZUo#ksp!&qvz7ipyfZ8zL|c4ejD`pGp%0G;`doE1nx$nn^;0rH&Kv_W!5Y}ydHGd69Q+!dQPLY^C! z=A_8ov1tyur`x_o-bowu-Ek_|40bZ|ymj`?ao^okv5%2Ii>)e6o*!FPIBu+}KaZ^{ z-6vG_0;MXx2iPGmj7>|E7saOalNZOPWynin(+0?2#HJ0Bm&T?Ik(b4$4U?C9^M7jz zfq&+=NFi{?(L1kRvg+>X{!FjaNb5qdnWZv8l}!`O>MTrUJIky(ZxhPC>{KbVyj14# z2xzs<|0%tnfGy9aC&BvPdGr!`CGDph=oWety_G(h=4g>VjowLLKwl2lfcxpY=|||_ z(=X76K|gqe{*?X~>>XMH-oocptbR9u^&o3aSx2nrfdAktt+!b3v_5Qo%6icHmi1%n zSJv;HH0NaFaPJxETNs70)s_cy@3zv^uyM zJ}0;tIXAHSo#4Mnrvl?)+Bxse-OT)VB{ZWk1UkBFoZ(JoubN1s^TyrUjD|AC18-vgafQ&2!Xkb;4VTtoM>fm4!+$<~<7+ zRRmErwrOGl{9R%5=4gIjp%qtos_e4b%Q}qsT;K?Cfs5d5JvzBCK%7IMV{FnHcere(<6V$%l5+hfxP$zP!;UtZKM25V;!CiYCsRklQscU)@UAln;Yb{~Ap-73ig zngaPp%#{vGCV!o>Cz1*b%#F;v>5zB!*iWo714JczS8TtB$h&zcvx=S5w{em8oNqtc zt70$Ttp*;gL98(HUZBA{edz$aMsV=aIA}E7(IOPGQk!&+GsdAL7({u2pS=_mm54cY zl!VbkT}pKv>oWj0PamlnMFn51~)kFV4AEfW6 zFQIvQ1K0$X!y4hc$qUIub&@;yYJG3D{`|D7Ct`_K3~or*T@|rJ>!?e#Jy$9#uH*8? zD!wGoysYUJe4Q;^`9+`mYp(3uv)4y%<)Rl~uH8rmR%d!~xAqfQ(V-Ww(|!Wm(daps zDf^ZD9c%Q;OO^eFu^ZxO>JnvHpMUJHc(Y9l5|nz@DnM0pgn&Bt;<$Z*G~K1_UP;wU0)`197+tshuFjqvun*?yeu!rr2%0`GYt_!PVuEPo%g z{}yHzU$=i?|J44UIdPi$e>@i(VX9a57X)LS=Pw90!xIA&Uy54@9d02^a|>ZVw-9Ey zg>Zmd2nV@^aEQAV4s*A{k@EtZ;RQ8ciGTc-PK?8+`|n52@PfvHg_OK3xO2$Mz0h&YtCGB)-#X+C{5DPA$Zz|}oA_;pyqVt) zkhk#LL2@s@9U^b#x5MNmzYJccQ{-*@)*)}_w`uZM{I;LGgWqPz1N?S? z{B=-PKY2xPmm#kV?gq%Kg1bTT>fmmOye7CCCa(?dM#$^DI~ZB=&fv}=@A4{PUZ3Q{ z{MI2K;kRk>QGVM`J{IIklXnMq{p3BtU530jxEmnv3+@KV`-8h7@`2!Pn0zp}8zCR^ z?$XenzX|Rf@^P;^2=A97|G;k@@>zbHCZFTC{p9oD|34!tAV>`|`W;uKkp74DY(dpC z=0I1(C=57RZPvokm;+^Cfg)e;IR=ye7s2K~x`M8ukD`yK&xRGgZ_rW3;h0G z4f6ZD)^F@p;GchkebBz!eg(+rPubtFe?@*zeoDSb-o>^L*7>*EcC0e!>tJ#1Ip9Jd zAGn<;k%yT9guPco8j-JFXkTN&!6!34*>cam*{LZAcXS92L;+8E2)alfI?cY=Dotf4 z4)&CD(=Pdn_YCDvxjn_%Jb92kv*Y7>X0i~{ioE|Kdy_SBsCTq?;($AGa0ZT*E0=m8 z;82ejor8R!%iip#PtTUKJPr1;=Jw}Vuu1YkW?X^-u2%|xc$Rq<-Mx?}A6f?CTi7kk2rLagWY;p{R;cg|}f7>(V=J!M1&obo8l?pv0gPFk|hkWiV`$`K}@cFatK5IIc z&%x0?Zcji3W%7kH?QW~EZy!6^r^iEZ@no#tJzS$5+ zNTwXXiO?jOP`2Y}ZLKlAf&f0B@nA1db`Uvlw_AiYjaElL5nz~+$V?6EP6A)q=@t*? zCfv55w>ov$iwL>p=nTZhE-j8R&duy9<`zd+XJ^>yer^?R6d?a!AdNPkM=*?Khx~>pQE{f8$1Wd7y0cV z`4Yb!B46gW!{kAJJ3_t^m{il`6TwR`KR?889r9IvngJJjU!JR|?(W?Ybkx7y7^IM1ffZwLcKl9su z@Ce0rDe$J4k-aZ->ag@Y`YXul#m|{990OntUU83BCV!e(R8*@Y^)`DZlL} zKjXI<^7Ej8e)3PjU50!!xEmnf3hoBUw}ZPO@}1yrn0z<58zJBG?lJ&~Uj%m!`K4D0 z>{dvT-|}0B{EpwI$^YZG{p9!jHbefvZwJU9`RyS2Uw%78{*T`dlRxp>5lVu3)8tpd z%XErTe(O++-=?X}Z~N&Iew(37`RxE*7L?Ub{v)`{kpB$s2FQN}cZ1}=gS#Q}>)>vf z{7-Ngc z>_AbMkfHp3NfYGo(I{d36VW6x??UmU7U?ZQ`L!qjAV|An<5-1ylGthJ zr980?KNCBi3{MWOgu+p6_%R+HI|D<;X72=m#WC{>y37n3ZaX`vbKDRyN^mdVHBXC3W6>c%ZMp2Jf$LVqgE>4;IgE}-*BuKy z03$x*Au*UE-I}8@Ri#GgWk=$w65}S&b%*1slAr|YKU%1C=b^kLPH#nzzfrsBWj zLkF=z=$eCZb*1T=r^KZ>bWJWQjfGpu&@~6*()#I|{c&mF8M-eB3NFFZ3*l0UT@XZI zp_jQ)Xytz!#&n@;CgZAuE=)wEd0RzB=$gH8X@F+gxHLesC?QXu~kMWACvP++`c zd?VCuSV1gwu!I?%$W4yH>NzY&yRu0zN;JW{1m%(EN>FzAXQJGzTj5ClMb#yAMB3)}jsG7(j9G@_1#!WIuv?gz#0oVuc2`WfTL6_f*$U-4P$UBU_q! z%t>gt!MIW(CIvZK{`ikB@c*OG?CQH@41f$=Xvo>XCrw*;t`LvBTr#8aUNx?8G|aq7 z5($TPOk)6q6Hhwa00{EG2hbqo+v+v~F;OQ`9V7o4`9=~|2wx-r;rKX>(q`np=3qIF zTcQk^8&Ag;HGlp8HWvTqJ#YfhG5d-3Ci^n`MDW)AwDl_Mu=P0WYHJll`}h*Qm)=9C z;B-4?N&>*W)VYoy(`1}6-OE5yNP;^~ic&F;9mV7Y%+T-pF# zHy*KU?p5F&ZOPBBq!;eg9)U@_cf>W+KXQ|wgF(A*(SPV4Yfy6Onz6W6!${s7m)1`& zz9|TDq<}2l=bx%T*KZG^Mn!zWeFcI~yKjtZu6*bzU2{WRlK_FPk4pmt8jVQvk7=cA z9vhM7og@p0zAY{dz_T?j4G?`xTpG0Vy0|olI-8aFKMCjHvi1LUg3ziTV`*Zch$CWU zT~O4G{om79k!IkXEJ&hWD0K-Sj;zU--eNs!EsMEO1PzU{1EEdJ z;O;PfY^LR7ifD$r`u>h>cPDe%);Gadrxr;4mLEbUwQYJdUs=c&>~?$wt&*>D{x6XK zp9S(iEXMf%0Z1ya3cw@tHVvH_|3BmZ$MB~uq!Q47UmI?9+?~sIqBoYpiElk}gb6SZ z+qsEs>&F7q$n6Az7(KYS_Ze(%QvZSe{}B$ZI#MVeT&Po*5-_15vw+<>2)OA^LQltv zF2rJIVeJcfcM>YA=t}|dDQp|s8>&W;t>Zls(I4K)8Urg{l?in#9My&&QLls^nV5>+ zz^g+ez$kLm{T$+$BcMl(_q+>5b>L|a{^pC+~Z<}5AFmYbn>3F z0N-Txs6phhkb4_B6^}hNi4vgyG%u3<75GOa)8l9>vORbwkEK@-k~noNT&WG?j?@j~ z#n$;=Y=);Y@>1v!(}h6XoTmc)XWVf0Nc_T_YAZ51#B}f@;&u`o%`p~OJYd9>7q_3?#W+kz|21hSw#F|${I z)^LfxhRVZz3PZy}xn5a9+DLrbFg}GsEK_r;^blX8W_7WjkZ)M74|Dbiw2oG3BQy&w z3_5(T22lP>0OcPW%5nr*85@IP(V`U3vCtX>YB(NMfpmV}^+ zq;OOlevF|TpoorGI0gE@p+f(mhBvIy)J)_I4d;~F@~_35d5XckUXhO_acNj=7erebs5Itr&9wy~WT#sH}!(x@T(7wCVm3nnuWqAP;e z#Hta%O~SNV!@CS8Q1zCX8Lgv>$0|Q6fvE&(=Agt065#(7>c9Kw_RDEP(!> z46L&H`b_*k1}-Eyn6MGXB!ZcGUwFAhT~+~n_!*kOg~rGE6pn^Dsv|--jOS$MdrkuV z4@V=NAkdM`0MKUs!oI0OP$Vv)FOBGDQht}7?j!U*-~{H^q7bdft@|xDPePp=fm1ID`k;m)k#E z%$C7ZNiZL6*jp$}x!F9MC6ExJtmj)VwO(Vr#d?SJKI>!F zXRNPS-?DxL@kM`YQ~M-)m3@)D-tM?hd!?V|k*`yTtH_UrAp+wZqOX@B1S zy8Q$Dr}qCeia3|sD`|=yrtbZ9tP|{2@a&{c3T~W}gPZgz!A<|E!A<70;AY_T;AZfQ z;AZH|;AVJba5Hk2UqjmVU!+s3f*a@T;3mB~xamJ9xXGN$ZtmPom#lo=mC(vXL;o_y zgF;~VP)ORMA#+~z59j~*@juxNR+-fbMH~O0P$4z`KPGTOhxq?6`EQepiM5nY!5{Va z@OgJ`TDt1^y-t6oH`5s51K#XA-2J%{9JJdwe|Fv6en4|JQAXnjud`wF%Vk2Ch0i^d zyYn#s$~SEXQ1&kXC=XTSh05D2oE=8|^gE8+dCihlcOQgyr5n?(32$<-tHegQs%CZC zid21-mx>*%sd=u zlJPMdyV|;sV2)L|3Yl;02HY^=KeO$6(xWua@nHdHYs zNY-BPBjSz%ahm|ZCIB$QAA}(-$t-;P|H}w{8Jh{1Un@Z1>l^O69_$2fD`nEX!;P7b zgUKb6ayr)90;CptsF)KinShTFUvTv2lL6mvWP2G+urJY;fq{iI0mRrP(Qkr%$-rue z9K_?J84wffD{2Jboj(}``rpdf1OG@v1^kn6&RZ!ZW(NV!vCxH9j~>P%;0?V@vU32R zIRFr`o^~S%p#M=u{6<}>l?EbAc@Z6 zSoI9D<(;X4{|)W9 ziSbtr=}+UY3iN*yqhR<61Z&p+7(8l~ipH2~*8dp(C_+)7u!vbB&ml@%goFH(80l9- zp+NsPN8mbYy3la5|37kQVPryn8#xYq?8M=PcQTWKvLo=OZiOqgX>rsjQ=P9&0sW5| zg^H1#LW`I-1OnG6RMi19l0*0viu_@2^xBX@!?X9y$*CTaglxVO0ss@T{F$NmzXs(^ z08o!dL`Y|WFEoS#YbzA74(-UA0H8?UO;)&Cl2_Ld02JiE+5e-6et6L)7*Rc$oBcoe zHV*wOjkEj^DkQb-|G6y?Y{C+?ybLW>r_c(f6umgaUqf+1y-xfRw{B@%7l>1L9u-=x ztbad4T^^T>*oy$PMlBhOHX}XMrBoB)KLlI^@`l7$o04Yh(nXYnl6&OXW=T-Rof8Ivu+sH%Y zo8*V&r{urMAL&whDqT&x=z5x_kD{CDjdT}%65UT{=u!G?hz9mz`bzpn`ZoG*`eFKa z^b7QB5Dn~K=r8GSEn=N$ooTJHF0rn%2CS>CZPu7|oAqRf1~y|IwVrL=WBrBoTI+u6 zz1GLA&skryzHj}+`nB~Zdxd=#L;}0Q9Jg4Jh}3aOkwD5bq+t=LzNk^v z5k)O36hERG1lTlg;j%_e%yIB^M}n`D(t27tsR7;Sw8h|YRZ0Y)Fk+(LZ8y6x& zq0XvWGZa>(<|bB$a9(lFM(I(rA$imseEu;mA*GHwDnT7s`Ge#Vc)U+mH~$IqYymky zhVF->s3W1PAv|sPSf+J zIiUYr{L-TNLs(O&7_^4uPe82EgDodIk{Ex4z=uwTaE}uC@&^$boAiM)a*&F(w&+(1 zw};OX_&t2#CAvyS1^Yj+0`qHC2;8}A zJG1`}EusTJjQxK>?EmD}DQ^St?95D|Sav5D0n^*qJziK8-Q1naE{cBMdgKUmn{xBz z+(fqQ*0Il`5)NWCG{!`%6bPwN>jYA=x=J7>M_Bm9WJg^g5R;Q~i>m{Kto>4T{y%0z zbvXAi`+v*_5a_#)_ovBdqK+Stoue{=fP-4xiP>VVd~CN{%Q7iTWM3Z2aRy_uU+0q;_k4QWN2=1*qeQGh-i%tA@9e0J5Y>xxQaXSSTMhiAYnoC=c{MVdnqASfgd| z_$iN>|C{-L$ISm{YSZSMt@bR6>6uxY30O1Y#ejVCosBjbe_Lc}2IT+kZo|%G)@|BX z!i)>5)-cwFgfv~5y3PK`tq~g|s+Ro`+!DKyNK*u5p-AY9E^q;AuT-Y);BlnwwRJxS zutF}tuHpR*&CeKyh#3j2s8PWi!nOb&$f!C$J_htZX*N{*LIxli3YEoU+c%r3+QurF zKhyNsAb@*E9Q^(#uQIDY{8 z-y^TnB`geK1`f>*1)(#a6)Pu&MXX%5e%&Z({Uu^+tk7^-N_&tJQj^x{8oIWrU)o7n z<l@Y)2MhGQS0_q}e!9 zIOh?4orRfjZM>>_dCC0;jkAx>cSQCKLxUcXR1wF?_+g?jLG2-e=QhUkarTLzWT5}| zNH}C1Tjfww9f(6_<&-hn&KuZTHnjo$KZV1hAu|tAsep>Yxq`ATCZ#%Qy#}aH)@!zU z|1^E7lc4`O2}+oD`jpV@gy~U2vR184QZ2QaowQbMP1*~WG_TVlf*xdv6SsuPuD;uP zcR{p13D_-ba>@&oj`@=)rR&GRf&LHsH8q6#HHFThyX~?yxmI4Mw@oBDwa#;%t|hMo zzM%I5P9psIbvvnUEl*17*F4y?laf!*@N^A9?BP^I2lHSHHOl`#s#V5MG8-2~SHmix zfv83BCS0zFnAY$dwHMl`;Im?j6u?L8rOBO*>TX2gDyr$gYL5Tx{Nq1Yfcz&45;O_n z8bZgNUMQkz%qRsmX$}DE_yfSU9~sS8+*E|QHrItJ$g-jDx@>uN`f5i1PZcDo+1K9r zCgl1}9?irNiB8OYlLcua2rDGZbVIJ^g%eGIzt^Jv7lHl@P--|oQFpY8iHh}0OjLG2 zN{QGoCM9A+is{r)~{Q`e2wOBEG3Jun7ZP0X7 zx9y=7`&sL@2eTa@mW+|MQEUX>g?fS_$D~wc1D}+dVA0mE=_HtL z=jDs1ui2TOb63R4Py##?x}{%higE7ZF5wBwUyZ@qi|zlh$Ss6?lKoeQ-&eLRU%K-68%|2~Hg0Rn zSa#x|TP9@5#DixqgW6sT=VCT)2Z&!=#jFC*ju#UVoD_d8jn=ScR;1eiJcMyT;3V2v zgtGb+a&+A+Lf0152P{*o)+Xi(J4FHsFlfseMmVdNa75Qn?N}$x7-8q%gFx}SHg=m0 zKl4$8&4wSd;fLW55)1GqoIgY`x2PO?!k1E$vVPZF$Es507904CI?(Rw z0MP$C7Q>}mMV{0szQAn@?nyS!jqPO8^QH7wXxBbQoqW^|on zkuIK=E)A`;5pwchJ~TPLbk*@UZ3ZBYv;YhVIq9Q}{weteVgEYk_r1e+%mBK6%uNsX zI!?nty&X=)%IcMM zj-++=64YL)%%<8HB;}y7{REZ=^!`J*?uGtWy+~{J|FMM6{lW^?(iexCIShX>Hi|(wauFTgA*OO!XtUW z^iYBse;_91ky3;nDD)AoE2hA3$|zNY;q|MoQ?Y z!Igw^^~|F5-_z(4a_tPr^4$lYs~th)Q)z))|4oTVoU`F*+lyI?(U zhkK|op_E$N8F+7@Fy&_RU0_ix7iV1&1T`eZ(LYS__Em}&Y zA?-m@LnD<6JjTU%SD1IsrZCR=>MD3D-Sk_iQLs%s5O45hU3CuNGaG<)T7BgFp|#W| z5P8p?<#8f)EL0b1Y)G?DWmvP{1aS+DcL*yHqy@`X1e`IHaoO>Ob&A5+5YF0=LaQGe z!>;Siu7Uo~kCu`!)ZxS;g2Ff|Xyz>ZlO_rGPL0_dj8`~1b#~VlhYN;K(C%>5Q7JX? zxIY|NO3tku)*vScf=v`t!y8m^h^nDsxi{>SN2od16+;E4hy)>)t| zGD0)^f9kc7!fXKG1k3dn%-@qmwJNAZk>T0@>3xLWM=zyU(G1-{ucJ58ary*0NvCL; zKAql4|D3*zzLwrgAD|zgpP-+m57BSYN9fP!uj!wx71k=N%evAUv^H5cTDMwzt%KHK z>$vsj)+?+xT5q@BYkkc6wDq9%P3sZs=hkm+%Ra?E$G*hwwMXph?3?Y!*^_p`eyV+! z{bKty_I>ud?T^}@wjZ>=X+L8B-2M&IPnz{xZm*=N-W2u!I+p)8ZTo-wm-v4(OZ~qC z%lyBC%l*GYC-{GdPh@|c-qZ^JuXB?BH+{1IxBnFXZ{}40@4#vP-@()Uze8s%x9_}_ zE?N1!9%xKsVww2ndDyXZq)VXBIWt z|6idf?wH94nt_S`0h}1a$D2+j%Jm9nX6fU7nbX`JC#{IwZ-T&eI zU;BOmxy<>$=KNpA82q2W3>MmEC9+Axw(uk3mtv!5XJ!g)2l2w}ALcAxw6}?^K}TTp^O81ii zP-Wq$HvEVx7TK>mF3Ik$s@Gejb59d&6A$K7r*x9?a7 zqYj+@+oKRP=4Ap+8T(%(udf@k<2+HEL)NWu#5$wu5{BB?{}zS)kNkxp_l?~q+K(ak zML_OMRcF5n$%Fp?qTp3%w=f0)1|oTqgCFCk9mXJF3<4sF`Q*jkgcMfW{6(PKdKC)v z|AnZsMhm&IY%x3SmeGP(R2!1J#&fl$9bs&Du9SmSq`*IBp~BH}n2A$?Mx#*J)3KsE zRxBKbo)_}&B;YIB_F0i273}GBEXbA*beOR!{;!Gu+wenA61bT;|Fb#b7U=(_ zqEImoKuF(F<(vqv)?eTa#IxAw+{~_GuJc40S470F8V8^R`~~_a3~(aQqL7-i?*s)N z&60Vpg;Zf%W@_bu6`2W=0qu{M2xbIR{D^802GVT!TLc^aZk{byW@f@xZNA^Rf-RLD ze=@22@xPW3YYF27=C>FjaL2KYOIF@}sA0jsc5Pw%QgZuei`g<*6DsJcN(X^?MX>P* zQ5Npu*Tt@B{#n5D-fARol&VlQ65X}z|5EyB?t8X z5|6GD=bZ`qK?EJ}93kWs!s4IQ)j&}F_?YcK9w$c34n4;6KC}Htt1`C(NdW!7Y_Hh> zz*P&`IMRj-qug=bYyj}38scT>F`l(?IClC50HFU@cRMMpK!RKrlx#(hmXb$s^j|5} zNn!OJC1cfJPIj~{LrNcHl?PaPfzmPi7VJ+u3bSQ*Q7n={yq{UORE9M{X@-Vj1F#G& zAnhR9e4Z{ensqc+Z0A9RF+eO!8Wm=d7|-taJPD++jLPTd1o}7eKLJw^V~7HnfJtqM z{$@F_mC@0Uh^jA)@B}tE*Y0A%!Bo ziN%vJkR8Z=q|OUn-8MbvRe2%z*ro*xdkW(Jb^f4x*h_>j&#SQF1BsI)&5|%IU@rF|F1ehoeQ&Q%H zQ>hY1OS^KS`bNoh>sM{`{Zfv6L`5fHnZDhQ_HJLw+5htvH)Od2ci7=h6pE9J$PLao{9#870UKIHUu9yd>WP?f_zNl96Y!x3L9TdS=0o33k{E=mlSdy2mB12LAk$a1z>hOsOIK&t9N^6aNQD z8<9^lhOah6Lk-9LN#IT$7=S|^CZWG$+ug}rw)I2sdV*zc3|$&@q08H*=N|v(%6~BW zzdr<3TL6syZ}k7p(f=P%q@PBJ7;hk^EJ%g|pM45kI8u=FT%yjX0G<`qz``Z55nY$i z4dV^82)uzn{eQ3VxDkm`r9XitB1zlNA(bJk5>Z4w??MqV<7SKH8;_erX4jSjTZd?S zK>sfffz!G;Yy$qUQDQ$#=i%@rx6&^lnqB^TEbSCvM z=)HHL9E==Zo-3hnG{`(xh-vU9tf^_S_ksT3A2!46ziHR#ISAb_VhgBd_TMlnk05;! zM&&k)iCdF30OnJRaE_u z;7u5!+6qN==!AO^#m*f6=?y6c95U&|+i(`k@t+$&{(s!)|7QPvM{308{EtM{2I&6- zM*bW5Kh*`!F12YV4N-X-QYcmjjQnTv|08DpAJD&G0W$M{L>%ouH!{&c#l?qUJc0f{ zDo$s8N)UFMN1Z|gdBZLKPFg)RMgG81k4BL{NF|hzQ4jc$3P3yFSsxIqk9>u`!HU@r6J0W;11ZN2A_mA8Atd< z;0VvKi~Y2i(2gOoWuXrp3`I9YrUCi?W#j)7!boKmNDYuULv0ggR0qa5f%6#up9p$P z9sy3p2~vQ67LLBh07AweIlMeqLg8qTc`mUoVW6Ao|MMn~@A>};O{!z(5iB$a&z3Md zKj<2W(>98yBBCsyu_QiZB9Kzs^gzt+#Ped+$*Kqw{Xw4kV^tFl@^l>S(Wu&UKD%QM zvIY77iTT_A5rHQ#yK%QT-Hw`+jO=Qk<<;c`Aap(e5P)=Ce|N5wE4!07x#c5;;=$3$ zHWmR1!yfi@tmuvv3x}cSg}mD|dkWD1-$?QQq5TO8kUx+jG2oGw2|+jTn@T0O2qV8x zLylXDlzXA;l|TnuXY&)ACMSz+jFUC=dbc}KF4VKnHEIz~gz;Dqw+SLKQJ~@wtAPEX zev_D6e>A-Q&~C+MjRpx?B9l=9V~JGP6G^oT=>PAh_r_`fn06)j)Ed}!204a(GES|=nmBm zLH-kb>^lg?1QQ?^og%k@ck)Cd>II_2ojwsTe3sFo7ELYj8SZ1$3ge6wXJ4QRu7* zqFEgB2V4?WowGOu^#8UHi=mVAoCVYpgCKVG!P8BZ21TdHXH%R-EJ|r?^pv-2k1XI z{{tg(GX2b#S40wJVxbtO@j&d*DO(_q1Z=6ZK|iEyj{%3;pt9f#I1;9srTP$XEk#UW zv()h<#CmKS#yT_MzymIzSm#=mZL4a7)KU`;yg7U92(e#OL8Z{@*GBH?qV|q;gR1o{ zv)v!5Q4(?1rl=)Qd~Jo|5k}1xlp?d;AIbfYx&_dK{{Ly9e@TtQy9~rcWvjlJ=wNqB zDG^5jkP`8x3MrABFDr~nR62Ea>RQ`yZ$c6LLU$A;T1Xq#bY>6-K@jo{Xdu){{Zs-$ z2ry`PKSM!NJrinq?@*xsi|TFSZ3yE}DAd>;1@;~U0X25VkOjBYggoRVfYq{&ntJVW8^l#Sx7iJXrK!r#NZv?81if2+sYp7ZO@A&oqZPRmJ|33xj-y)X~ z`V{yt`uFha<2#nFK7MbvlkQEYH(Yac8XThBBHOpPajnyvTHEF3Ckm6`61;KkuJNrs z!)vd(dc}sozd%NMk@LvNKRT94rFOWbnTq>@oRe`oJ+a7Td*6rC1f9}7pqZFthK2T^ zGIeQaFE#)+|J}XEZvilVWFrHk(=aezd(4HIuh41?mw7;Oa8M{0L1S1mJwa0!ERJLe zSjYD2M!nXlR#T@SlIW-oyEXj;-`_t0W`1sVdaqk#@n3cD8tRW9d$XZWvxSoLF^zu4 zKaqxazM4V%6pHylyiL!zYkOQ5F--KR0pHP?T+x-h34s28fY>u2PRLrCYFP?Nrg{`< zd5a4hK~9@t2jPu8jQo?<=Lx9c8u@L=*Bg3ypyvQSm3%#1n$H?A(Er1cf#2~kN?bvS z?Idsv9XA=$nE7=IhAt|=ux7bJ*A~y*GfFBy}0+|BV7eHwS>51Hgj~kBqs9m{HU6 zBy$J;L+|wZH}>?j~S>!^N6+@ zg3$?u8dolXfi>Ed3+VrA=KMcjB8cM7YzW{p!~ixxv;tbTqcUJN1c+K#FrGmF-&C=` z&KpWKQ?dkE5Mf;BITpH5BpI>#C{Tw908*bx_?U?fkC2YzzDURd;?+PcK>yzc`bYKX zklV!nj2Z=ammnT_E|G63fM={21K)dBpTf~FN7W^C!^Hnw4Dmn7cRd7?*SixiqXtI9 z5L>PTUBtCPK_eOWcud05|n%XnW)Ltt#CBVQFRFt zt0m2;K>y#Xtp78iD>SmR15;*(eA4g3TYtZhUaQYfMwEZ_x5nB~;^7=t61Q-S{f zHI)Cd*lO~)8}?w>0~gzdJ#^Q`yOY=~(Ene{DwL-LgaH7Yh-1uwF$f=|@ups-1RP)o zf1rfvL?0;ITTwdN`st-&Rt9axuh0wph!#UciL^Uc%7It;O>X%}p?Gk#o!!e5n0(mN zv7$RxEF6ZO7xJz#|8MN>1oQtC(Es;k`WHwW(G?~TnVvK(I)ZiiUxzj0vg3)*1o#M{ z7RA&MyabO-T}u4=O(gcIdp5#Oq3aFPv8~U^b*zH z1uxW`|JNK@1N7e?;!ETbVRhz#NU@ZNYKRwOfh?eMMeo=;o1fS;IoZydM-9C;+7_CL zhDaNUdBD^>9+sdG@y{AkI2z`tx&#DojIU>Fo_NGPTH59D%H2dx;L>E z3zT@Cz~Nwz*S^a52oqRtJg(#u_y7FV$bVn7OA>DJY#=w06ZMAR+SHPU=sF37)(|-n zMBdN#&flgQ)i8;iB7w+rB}~#PTr1GPtG1r;@E7JF+)(ku`f>6oC2HV&7{f|hwNQ*n z$jm87QjR*E9ytZ*|Cds?P4tvvMT27erd{Y|4ybK*PIu}<{X^z%a z)*ywsjIK=G`B3QmEKD!eD-~*}nFt;cE*>h5QbJ!A%Xwe5_S2j`8L^CkFn4|;3grKP zLJ3u4e`OiYEJ%s!ZnDD5hbdvM!#`_C;b@qn>JoIp<}64Bb3CM(djdOQ`GI#Q0m5?w zLWjHmtN{A|bupLUFX_BdkenOXBB%R_6G>DD7OMhown+38o#(WOhPY!@vs>f;6EOh; z^sEmn;CS8w%y#p^=J@}x^*@__hgcu6u7^M7*EtaQ%Hxh7Si1W78+x4n-gJZ34R?-0 zbdG~N2w8sfS8hMPpH+7yROgH|W|^{5-O@D=uRgvHs=K$FRX5zQ>e8vy4!1NTh)0c7 zijaEvYhXFmO$~KZpNwYetV=`A|Abs|kfD34=voor;~ZKeO!+4w6Hk&4iJD0J6pB>~ zG?)S;OaRbD5CC*EUtv`OqtUMa|Cc}INrE&j3iUf#e-B#E+?ruA8kxI}; zYnv)o&nq|_JKgZKVSifj2c3! z4Ji~g+|d8A>A;_TY`Z&|%XUh*NNJqqhj3oDZMp{g-*3bGOl>rWCrXPA9XAc$Y21IA z%7+;xybTC*m}F-i1n}uGS!wUyJ*15%mAx8TX%X#1ObufWw>l z;t8q)W1>*LasP>+)8rB0qbAZSyu;MWKMP0SV+;wy%X1|ZuGEHy8OjN3YL@#?na%(4 zF%weDA}uWqfk9+VKGZ~5&keAhUMPYFMlun_3i&d`5gR`?)6QYUs_*Y2RR6ahxp}rc zxAlKN{>KhN!H3KI>H&eTKl7ed;F$LI*};Kcr*Up~Hxt}nXnPCEFYK$4B_C&d0* z57B@6i!8KDLfqhl5SU3piId_bYa=-$w?$7$3kNAFnsQ1#eMlH$ec8$&OX#5tvz)4p z;;gTC7!!k3az+cSL2V54VQtiFeO`q`rB>;Clr&27368FB*RVD;`XF|tmHMPGK`B+= z?}oUIxEKjZ(`G5&w_6hr?W1hBe=xS=qWHuP`k zzhmg1{N9{k>2pAJE(q#gDD@*|k1U^`OSDkJJ9$bPezp*%W>h)umC&P(IKi^Ryw?$i zg!5d*7$MC?YMpH``=3RA#O!}Rs)zNf1s``yW(i?0=#?O);kkh8SfMFQgg!pC>_Np`zjI5t0gj&6o$!>Q~_UUsgE(2~bDY zNcII1Epe}q=Inh|A33TtAfjJkO(ud37(YilBkabGUjNTV|*Cx}KwzV#gI4tTm8fzaAl<;?*OhwPHUN z&ncn3C{DYCo4TNQ4ew{jmocs&QWe;I%kMs9r~i4VU;8$h?aJv#~^~h^B0DA(jU8Gs{16#`mV37aIjsDLdfE0f87_Z_*s1p&W z70$18`hQ#M#iGZGpvO0&pBZ^0kTf?i`oFKo&rNFs`p@|J5;fqt72M21F)hav@0P=` zC3a!7%Z>!!(V1Lvacn2vS}aVrF`~qg1knF!Wpe-^5NBHn{H6-R1r+$k;1}Uvj!<=8 zf(7V*i6^R!`0oqxIzoYO$ECZ7sR>7x(3q{VzN$Il79;+VY6-w>Nkl;`BgAi@|BcO5 z)j2+fv{wfZ#`ZSoX*fhi|7Re<@G=a*M--8mJ6Hd=g3e+zXfkQ;gf+BWA@9qWQU^}G zR2(ywc@HL`bgE!x$gykFX_}17wOHmC=2Tvg|0hM%#Nj2XiHe+1USK(blp|3!awles zx$?2iQ@Qpwz|FnO=4cL|$dQtP9+Oe0)n)ubZH~s{e?C-UJpSFfOuEK4 zElQ7nq?T)3MS*jNsYxM~Q`lKj&Yki$&VjoBr;7adM1xqtptS!7B_oGRMXE%-sJ}je zMH#9=n6x%7bU`x*u&oCVPy~$^ya~+=qZ7HwMr^*7#|x?qabB56A*6R4yp2`)K#lt@ z)esdbU;aSZMvJRZwzc999K2&z`G8ZlH~%MH#9BfR!XM@L@Ok%Kv~<<+d!50--o{Oh zcewj=rLtRW&ir@)52=6;x;e0JUMia%xcPAi%0mM4#$;9@ zGSL6J?l^kS1xr@lJq_(@&_sHokl&ZvzYDhWff25nW^L?_Sm(o?kf=r>TwxHKzpY|# zp)loU^X#CFa&gubK~P=NzU)*f%q9uF%2;mfhCovLDrE}*;OwB1PdxwknT$EWPbkMs z2N*oiVgY(Yf=hs&nGTrg0K*@IArgf}us5DVGnL|>hzg8=cr_FX{Qu+%$6#E5SFxb2 zV6|3FUS?^o9T017L+T!yZSRdloNQt!lSNt|&+hjoGm+#b=7X}rIZz}`^V&orRY)kL zWliCr@Lyuq{~4&@CxG2B8N*}>Q%qlvBtT!bi{yvo7pG8>^aS*3NTIbb8Ib==_i8%I z`yqCC z;rbFGE6#@td=Bl0;QAU|UngYQo8cUSE8zVG_?v=j0Ip%UM&N=n*Z+Z#Ggm?SC!owj z&?Y!#>tZP9qRsIBJh(1|>jL=p03l0$3>Wlc<#*xwJY1iH3)-~ujc`Gm&YC4;)wkgK zHeBCungL=?3-|X z6)u3wGB}fI8Nh5Az-;|C`1=T4KZ5Ju;QDvCpuNj}3fIr!`UPA7*JWRX>!Z+CXvdjr zpdJ4K*MGsd06a49AtVK3(mO;*-#-)55A|OO>FeP8OJNKy$pAd}!T7!uVB$djHxP1S z8Q^&-!178Mqu;^>_1XZp^I=>rfb!3O5tRFGxBx#g?}Y2G;d%hBcfj>maJ?Nas51kw z$N(%d0E-O3A_K6<04y>9iwulO2I|Vdxb%M*{=OEj*TMA~xLys{tKfPiT(5xZFX4JQ zT+qf0;9uq?aJ?8V){Ym#^#Zv59IofX^=ELs46f(Fbq`#3!}VOa?t<%1xbA@KIdC0^ z>sfF;6Ru~#^>nzN2G>*JItJHKxQ@Ve7_Mi-bpWpYZ~?3`E?kpvO~ADmF2Iw_li`|z z>mXcDfhz~sG+cSO3UJN9bqKB^T!4oefN`b-*B%0d0)MZEae{n3KY+#J|AY%*bJgR3 zCO-rhlz%DU%!Sau3mq7z55PE#!Z<)VYjyxV_7ZYh7vLAvM*ttlMT9t?Ate1tD0dv- zJLziz70xNF|Itx@rc{4DvQnEb`muNs)egg_F?3p0kFS1E+hC3s>OKrbg#~lPn?Oo+ zB0O}2%#OpoYkb5U`XlQ`ZYf>BGpwfw^F^cnw`r{I>dDds z8Sp5h^Z0Eo>ObfrbdApb?}JISBOpuz#@JNNA+UFMx}8>3mJE|NOj?lcg7}{MwrrsP z^UU&J1)3t6%^jGH5-f=2VumX=+ARNRWYyf^*zsZo=>II_ki;dr2uOH`&G!5=G>1yy zMm$$S;ixwJh%^p?0Hni>iw76#=osED5g0rgpP_ibFpNizb~yj@2{Tib z9RMD`Nl@W^90{SJh|220vq%FzXkeGX?rYPh<}e`qV9VX^M7dC`qYjNG2%#)d_#uEG zOpV%aFC}B{FXv8JEK69&OUkWXYD-uJMC?i-qNo>$&%h`1B~@7eqZfHv#sbx+*Jc`y z-sWgt4eyx)n^>HIdNi;D@~J;{&S5}m<=a62=PwNDSKk>Es1*sz1TN2UPejj%G3B2% zq;NdC)lVx-B=}|?5D)Z!j&A**BaOi=UrS1y{BVGYR5oul4O15qHDdW@0Z>F$47fS7 zrA}V}1p2>(*%&)n#F*6}k9RddL2WX#o5#9WVb2PiB5Fo`Zm3I|$Qp4vzq(J|d zMeP6O-4!7M?_~DLuu5$KysHm0QEF4`5^5TEi_`O643S_P_O5+^(D?vBNP$s8KnUXr zQjI4F(EmD5Iw;gV2S^)h5CT>dUldTY;bzWStwF{U#Ahh&!|~_q2?F$gX}6P_&nn8u zkSaHY1)P+Al_Y76MccADFQOni)rb$HTOuPvvRh zS!^mNB5b&{){4D%pa_A`^}8OGoriK}{b27rS}o|XMQaU zfjf8KHLzsW^VVma-c)0by7W)zfW1UV3dMuykdEq3sHp8+3zKU@4d9j7n!x>QIsbzW zt0GG%vT>(oY526-qQ*;Rv#V&nwj{HT6df#_W3!0x@J`l6ylIf4IVPihm4z#{1-cJN z|L*#F|MLckwg!QpG}`vPwOE+0quaVTW^phSi~|eUQFBHUo36=3gdY(-38Q1qX!6f! z0{ZVkCMvKBHVkPiNeQu*Uv}2GUqd6GO!ILK-PQc`Kts+H& zxj{v*75ITM2Qb`0+}7jI^>KP^XyHiaM%5(@wJ`@Qf*>Ox|NExn7XVdE7d3gj*eayy zB0LP?#ZDogF4BjYIe1(H8!<8Blpaov;Ek+7@=xk&wrNPAsNonz1xT2ggD08f zftJAs^nW6ZlHh-#gdZ0Z6;A^(QSn!i5;Y-%R9_V-r^c9|Mq(Fp>RQ`yW+D+%2wx@K zh0tIf)6|(_ni>|ThJNb$q6^v7)G$XO@02M>(FO$u)cR&6p#Oo2R0*+Er7MX^XkCiH zj}R*cQf4QGS%H+SFIyoIDX)T9a;nz*OJDCWWSkjOJ{g(s!7dl`pL`=z+sRchG1Q4KS)|ULWC5~6M z!?9Fy+39@?6~%cDL(F$rZJo_eY?_>`XQZ@H(NJ&@ULdrCHwlI(KSx}lK>veb0cMAU zsLdwBmXC)BU3e!WJR<{j*y>g|strFPd=at5MBZs;T>aLZo*wW%C9*cIV3Pl3dsyyFL^!fr~!q}fr8=G zO`!h^%=TZdsS27O3n zl!f7&_sK%ot5_L#1b9ArVQb(`0y?S4gbKxv@q@c~lzJoZBg`@L#@H2Aw-)4ypx#>lpTRLbt_z{ zO^c&u17PQG00jDfOlAE~iw$NyFkFl<>w#uHaAS8TtOo-9UmG6(jTwL-_sx1Blg&}m zSpZUPQ~8DzibTD3WQ_w5(sz>;E+3wvE{6c#kU>o-w1)LSFaEE!gup-ZTci-Uh@JD+d_qW3$x$2h8VxlJ0aJ; z>{Q9EKu+Q{g8Zo^{;z$aZYKigI3lNmcg>u&qRKH=2;ea5fv#B(lvcxJysZLtI(>Hw zlm9m90{Kr5!XM@L@Ok%~wsh6;d!507-b`bJ!_LvM9q#^Ism!E9X{N&DIO`GC=E50x zJ;lQSjz=Jfhs?0h9#8)dMUE~U1&Ss>$hoh4D0k1P0LnLQ2T=Ae04S>xw1ljB*BwXi zIfco8Xji&1?eb3-Xgm2|zc99fB(LqngT~2!dWAXv&zsq^$$iLRj6ZOj%!#X42h9ec zP?UP246q&Sf9t(_Su^rpDF`4DNQ49qb0tg{@R-S!Yt*t%Fu8V`xfLN*s2?d)a=@Q3 zHQ^Y*gcwqeHl~u(xC8ULhp@IN^~zCV&PmA$2U#}qtX!m#dbFB{_`mdN#$!qdfZ)L; zR0ATpoX?;{9)}njjJd)*1>K^yLQx&K2BG}jx$OKs!vGKs>}QQkW1jS*4VUI9kuN3E zO`zcEYG7}=*VN-Elzj7w*d#8 zNC^TBcRm0RmSFS~U}4-X8s=`1Z2!A!#Iygw;*hcbF)kTuuyeBiUHpxQa(4}T_CEk+ z3)%myRj~dy6s-Rl`=2<#i^KkRgM`$>gUH}5r8+6?A?SMbEJ4XhX~Xj-s9*Y;okmWq z8W?8x)+0w)2x&K8&P`<7Iv!DywsX+i#O}fx5JEq!7SvHIjcOCTYlh0Zxmo=O{eNh$ zTkHZ)=cKURdYeiTagU&JmDoxG_3CRL(H5N;+)T^R97jK8O!e!!l>igvyaWj*Nj9t` z1KE7IX#&60_e&qpJb{lVO~M_#9xKBvK|Cd3iguQ*kMZ8F)=akGFM3EY_Sz&KSesQ0 z8mqGw&x96mfyB+(Z5}d;Y#;CyJ)!{;!FO~fS6m!| zervHX-RjGob&&>*h{^%#fA7Zb2rW56s}3#S%4|o_HFO&)hVTqa$fum_C8Q}+N-+&j zbcHlsTTmY`X;n>WbA_Ga6(h8_`5RT@IZ8eIsU2%prR2U^Qd zKS2M##goN8y@!2NgiVyTBnX@c^x!!by3p!}$0!*_$q;ibhR9*Kj~0^+b-)2^<$OMf`}ku~2D8>_r9o-xVI(65m-9 z{*R#{N2yMlu9)+8^nx#vxA>w`-{<|GahnM=D137Tz_PL7VVjCj6Hq z(GZPdeOJWS#d5ek(Em1}-(#Cf5Tp?fP#ImIBUGv%l8WVF>ui2v)8u4vQTTjRdcE77 zC>Pqf&rvc$z`W6k+~nfk1Jo3I3()^UEhyM# z|6jgSW{lFH3qxGn{=dgF{5KAOG6#@AtcqCy=n+B|Q=tT3odaO4j&b!1R3q8Tl9=9t z_fr>fso@Ttp|!ty_b%_R8f%s*9WM^1VMtqw>Hc|n5U5^9pO^dVeV8i{sG1gqu!uu!2i^E&hq+TZkvTI}*N_|i^br+rAZlM1?0sRZaZ#DoiW+)3x{D_35 z06nt-$ZP;&_=7M6-Xw@uRc%8^SN}qR{+}Fy>!|5M!;M2qB`Z(2_MM-H^J6X4^X`Vgj$OVFM7*{{)m8+HFkyA5Rmi8mS_L zE=EBKzKYdMfW3+Tv$0zjvazXd4xv=3p5wIq@;{6JGszG>V#x?~lYbJUCq~c#&k;fn z-pGW-KdEb>s18hyf*3Q)|540N9wHt1%<_M`D@j2A`#ky=wL4?}XABXM0eVCOFEABj z{x|0Tia@QaU~7Q11p0reFs(ED|Ih(+So*;b2;geVO>w!IUBz6dxWcO>A&$@N%#1nQ zUI=jPX?qg>0{!n-Wt~R2Z9b4K?uQ+NWf+LPG=M^te#qyXL<9|U}L%+&pwRThp^ z8lFq+h(JAN`LFYr|5*IL0}R91Pb=%p@?Xd|P5eKz{MQ-Fe^WsJ#SU{=6(uZ^c=!>C zT0!`kttKYXSgPpwjM0&SM_#1WS(F!QsMc z<3QE(e-6jpZZWs-Sm#$vn;LAwl*y}!4lk%LQMd`<^(?m`afjk zKPRU4S9p#5uZ#J2G0Fe8RIncyf4C6<#ZzM+A$2P5m0~$gwjFbkBMx3feM$qg($6el zFM-OIU4%qL~qH zw%BOn|IgGt454HO?&pw@Ltam4NTJma?0BIDHwB>oqsIQn5W@S3bYj;3e2{p$&O)Po zlWA!&+5fh?hq}Yz#e7ju5%_Buw$Oq&I3SeEa7j$V0bYf)AvquBfHKp?Etp4pb)h+G zJ(;7aCsv5lJpsOr=%)$I5oi=4B>}$6sM-*oHqSyq{=bS*rrc5uQJMKa1DBcqFBTwl z__+r_{|C+fAEunZPtYBV`Cnmi0(5G#QADwfc^6u}X zFeUZSck)1ZtXW}4bt@dzh96PI0>kQ%_`gq_>VkES`3w&N z86Q-U-3VaoaE;1vQ^QR|j~b76g$rz<+-Q+#>LCA*h0QbTf0JhWAD8FJ0@gQ!h_ZWb zk|0v%Bo>P5z_u7c(wOak5tb?uKIJ0N|5Md?Qi)@bAmST6ux9%YCsK_4txB{B2xGSY zG-vw{?EfWX7DWh5#vwkMBI}2Dc-p4EK$EHDnwrCjc>iK%FtxF_h7^iGjM;&}>^B$k zWj9|QKQ`mm;3v|4GGc7IJDJP2eguAxlP99NG|uuvsJ?HTzInD>S#uXwd{e>8O2!R+ z*JaDI(^s?jf6wSv&Yb{M4VUqirEfVkQ>m~blfu0ELrI5uyLe8izZpxwM1BI(Q6eQ}sQb=ZUvkSgU8zNQ3O8w0(9Q zEdnJZ>wBFv&Z)Ex-uki^lp2}*SA;S^Ib6P1 za1Adr;(rl{|61n%&j!Q{XYA^nOH5Q|TwEg0If`UYYp`ol&eXVj8w82x+a@PhDSh=YKYJGetPn#kdlW z9IbDCJOva0i=Ia8m%xAK_uZTBnOwU1_(xU^j`XH88?HGz4bD++ksW!zajnyvTHEF3 zCkm5b4d1wS*Z9_+;kDOXy<$UPOO*w@%msu=#m>>O%+aGe+|o>CswU@Td`|pc-H0fc z?R_8eL>-42&~f3kj?wB86?>Mze~diwhNmidLWoTta_*S`41D9`83y(@3S`GoYU%L_}QXO)$GMO$a{6PqR{+c|bU20|6RHpi)nmWd?( z7hTJy@)T}==Y5f7{f3_-IG9gq$x{^bv9$YB-)C|IGxeY5ES(6zZ2bZXf zz&lxwQ(mBS%wGlW+6mkL;QUYH|I5Uvf)#BdS5dj4^mXZ-)eB_Y1BQ-Pj9|Mak?|(e6V@*|GNczHu1mB z{(sK-l1ahmTp}UN4eKN6E3r^ihlYKc{r?f{Q{XxPf3W}E2?H%pe>EVjEYq6>Ymt>F z(+U>=BDE-h_vDXad8k|AXqb7E#EuBq(V7d^CRo*U9Zs34U;@y8!9=X`MP3Cc!6PC> zfi%nlz$C~H!F{p8j4O&$HHs_F0SmI_0}JDs5Y>MH9p|A(0sSA3;s5g}HH?3zQ6;t( z3)AfmzN$KE+^K*)V6v)S<23G6qRu!EI7Ycs0sX%?GWaJZTo}R7o;a*=BiC)<7}D(X z(Qbah;XK5)Xg0s-+JgE}Gh8Fsq!xBM_x!fp7$b>~5JzC?idHvF(Z{N^$& zK9IrYzOfCM^XFWCi$Sok=3HQx>)(TgWp~+K{ufyl6)#>yMPy}Fc4cP0`dXT*JmPrw zd-380APmK^%`H=KKW5X>46RK0zwhAl|0GcjPeYQ-G^MzAgelLh6NQ|kB5$F}2^`Nx z&HDLkCH7K5|9?$~`ZExyV@4te7-)5wWGWKNEUAmj1Q~=l@$0 zSOF)VfU3kAmO^li@{)W^VP9y%5jAe~<_rmpG5^21AZG1f9g&YNPkN(~%q zT3m{Gy5{0a*_?AwLgx5X>LIy-l>b;V@c-9F5`|RjAxrsWwAN^@pKR9O`iL9)}U7vf3+8ZK?`b@2)O|4kkH-}Vp^ z09^l11)X^NA8-FVcBmxv|0?h1{lDD^2#JFc*A59o762>&${_$i|NnTRO|0wy;4rE5 zn8YkW6spp9 z-BOCuiI{>A5txN5I!`N}pl$b8z4;HR#Bzd8aBrC2Lmw7I$Tt)!jFBeC4KJt0`hYM7 z`PrYe9~#4IN)UYVxtL&uA|peCE6V3(|6jp^&3`uk%VGX+i1R-ym3P4^pg0MDKY4(_ zvqx{N-Lil8gRS|Qsm07rfSjEU^LGa6>>>?ZD|6I!`Y)eA3cGg(HP?gSu8#rtf17FX z5kml(0bKvnYA9)@lGV(X<`p)y4Zz3dBLRMVP1zp9G)^peIV8>fQ$2D0PuLQ7I%;l~ z+4L3qzZM)0svoVi;2-zr<{dXS;B4Zj?*_#bE@Y;eW~Qgdq?sJ~B~H!c&|11?3WBM> zym{x1O9G0A1Qh2pgJQTiCMde}^c*e9gfg;R5Z0l1AP8Q(3B>r%dc-)#V3eD9lY=n` z4u1pa|8Ex>MpIzC{ZGJy#BIn=qNTBk#Pz?hkuwAwdHbJEbRL7vY8rY1(L&*y`~PG| z7>@==*e(#RfJc-)nPzygV4CDcDfbXqAn@|}eiLxM-||*3K7uSKX}0!=rFXoS;2-fZ zL;GFU1pWWb1|!p_5tXt3?}BErDk<8?0->7y{|WH_f&YJ=53qL2$YODIPYJ}6G9*7@ z@KPkOmTdD1j>Up}R;wSzzA^nSt-z(-4X34r(4h(O|8CR3|L==`X6|V~mwF!#E8}c^ zwZKLBlFyUtdl>R5CPt6b2&5GIK_2&1K1O(IG>sD^+xkMHc5L-MXa!gpr#64!|EH7X z|L4ekC$M)2l2cKuRc~x{GOJn>AyZD(w_z{eWK4Bud%MwWN9z+Y+tZBB3x7tw? zbYqWjOhJY0B8!-!LI>VgaVv7nqISxYku%)B0d5Pa(Y0{j1~gyEYwG{*~o0$he| z4A-={N@|-a)5Zy!ZGE9>@B(1@7XU%ug$U*1+_?H$G&#;M2MASk+>~mVGEyC>>5(uN zV?w@xWBWvG(Vs*Z<3V$P(1TRa|KGspe_Je|#0HUthAl8x2C=b_i;ZPRHB*mjm9Ju*m}msz{LwB&5tJu=U%-90;UuEkNy=Gi3LxXnXP$ZfihUcc=d8a<0; zu(zG0VxAwPHBO4uz&(S+^$X-aWdKC}oZf>YF#y>l<~i{H4{HcA@rOCxU>JPU5Chsx zN^{yxN>bWQx_LpnN!cIYbd8n}A|*3IghcGRK}%^=gRd+6SIDp!COQOs*F0SzK3AC2 zRaqo+d@BEq(n^2g$bI;SL>An1os2wd@KCR*G4zf4)s)DvP@;@W@PM$u1*-)PD7+F2x^Wb&9uuWJ+-z)Su>HmY z{?YTe1;ss<5c#gI^}iB{g}nu=z%2BrWEtn*mp=dgkY&UErAw= zVkK>i$={cxQ}zTQ;Qya0SqU|V0YxPVky%JyP0kJ|KK`>Hrn+6rBAQKc{O36c|DA`1 zDPtry0i~QAc|t0d`!GJ05M(SYYj?wt<{6ON?qnk)V}QI(vkmmyzPD*2gZ_5t%;_QP z+wiK6BijWc-rx}xjr}vp?S2ME|Lp5K~rRHmn%Ut2%h)aAb7zClhyw% z^C^gNw31rXG*X6)XFdR&4*)O60pLMUeWI-ATgcc1Z~s@$Hx+7QjR`m+wJ@&HM=wao zg!X_0yd<5nhyRa4{QqY}{4WM}e(}Kvf^k7{8D+XVen zly6}IhHErJDj&np8(HHi8C zI7o3Iu*T~_Q2TRfTJ|&> zW)#CXFfJsgNDiBE*sL63v(g-y1@`|hNdBj~L^BIG{I5(TmSZf(N+QRA|Noy(Jt~@1 z0Nk$4ug&8E?_q@w~IR+=BD2dsIvAOuYUla_=oS0{{Oa=l^#tAmkZw z{{QHg-+-q_-)M60lj{RoBG$nFzr^eR(gX6wK|2JD<0FLr#!TaK-FoEPG4^`OIf3IO ztpEQXH`#3u3DcfYRuRoq97WaOlHhLZ&DH2K@g_1S_Lx6P82oSt6VCX&9nfM=%m- z@I9Jbf$lBRQdsDot4-JW@Z?}AN;Zjg|DZ5%)ygqah|oOAcs01XYUPlye=g?f#2H;` zLNIXQGxK>W=a#~dNJivj<^RC1*wpPXt(ah^{?|%Sy`}Pv!HS3m4EMQt$Bj3Ox=e@W z!wl;(!Qq5u;IOK-dhp!kFL0u+yAR^4iO>vFvf3gFkT zU%BxG`}W_s1ij5<)7x5O>wNvfnO4-yOxI)~XXj{AEJE90^5Y^}lOo`kSpD$^U;!?o0fbORXt0t79)&C*u zf221@=Vzr*@*ti2y`{-4eBL7;qVcq88d!_o0S*#EyNj85^Dg$l-Ds9~@pO5uzCNZT%$y`(a=fqn@jjaCC;b1H1%DgV zez*3)+B<7e?Rf3(T2TGN>PM>Yu6{-Jt<~ezL)GV0{<8ABm7lMCcjX%^Usm~Nl{ZyB zukx9d=fP_Q{M@m7vKCg_QL7C??eN8Dr&))uYpoZ&bocXXOYx1vt*F(iH?|HpqqRnJ z9i9t5ZFi-1f2GxKY#&~2A3ndcu>m)qIK0-l95q)jM8WfSAFI8p(%M*EyL7l+-;7@I z{M|>z1$cKOI^5jZ3SO{#qW0>_cGPTbgCwnAj;eR=zOi!0z&P8%?Yqmhdny}^#--JZ z(dzo)^=P|&@#yn+KM%UEw;G3+=4a;*hrvsCAA#9LS4HR0O>3=L-)5x{mFzy|l4=w2J{wd!pEaB$b|>uPi2{uAhatG(Kef|u_;P&+1WHKw+qRPe?| zv~d`{d2si0Ys=#H*{QXQ(b}c$Mt!T@I()v-JRHBj8Ev(LSMJ_lJ1!nNV>|?f5Sde! zsENgHL>W}Hj0}oSyE24~ZN=z4*S&d1HqL@0iGhrTI!`3vFgo~TvFbm%sQ=!~)0JJd z;GiF{{r{8Tc{0j4LWK4N^9CRiGdXt1!o|{w!pr-F3*;ksY2Pgx41M9whjSm1)c%cHqkEPBV4iRMHAg_%MPC8{T00jL1+f8s%ds%~B zT^HK~dyVtt=-~nYJvCuiZ&(1@M0zgynF|1nC-w~d|F1E@Z~-7L03=0A3A8vD0P@&- z!2dr6cvb-?v(h)dY1H|~H~DyJY&s@dAjC80*M;zMz^!mlmy`6f94)GWAw(=h%{0owe!M<<3`I2`$ETDLg zfMP~9iy*sm_UhIA)tL%s93Xby)ZusleE)Os-|zGCKdb+36&Uhp>P(y;R{!Hs|Dycc zAE`LEI5w`n7EMm=+f$v5J`ctF+FJ!SuamnJr}+FIVVY2h+eY#Qa6M|<$ZjFGmo$LU zk$K*BA8{T|9~r7~>Jn%pU+O<_;qY?&pKi7Q=#4(=mr0|^^*+b{OCSF~aV5?9KmV5f zf2D2+KaH7ZIs9)C#DEiJrdp#B5^H$>3S7fG=!Ei?k16cO*GAL0(VJ7F9KSR^|Nl?X zgxUY+^q-hB;{W;htV7b6%Lb!*EAx6AC4Er7!h`1Ye+nHcJi-6}v&M!vmcWV(DIzhB z$1F()KtFH)U0pAzJd=cnbu;E{GfQ8-fk~Cpif#c=-oWj5NvG`Fe~$|P-*9ySl*lHq zf!YRaxTeF`cERY&*OONr$f1msQi{_kfw_aGIRG#L0e}?sKmI(Dtm7aaUJmG(#S}y! zC_JKaJOV7aSb)-HxnB+#iB1<2Eq3*Ck5)=?{O7s2{$F)p0Dt_MPzYSV`qXpa_@B+$ z`6)jB2QLVYt`HzPLgoDGMk`O}|5Yy~*A-mpo-5sh9aKIeXkx3}$NB%k!{YqEhtsRS z-+IAQp9JUCe&+rP7DEIk1FoArpkkEGr zsDMW&Z+arqrb~Jr7>NJ>uOD_TD}olwPvuV<*_BwGIqJ&0)Y<4Nk!pg5u$yqL2K@h*N}gLdUczV6K*%Ru65aDDrD^L4pP%#psRb;Bo?IA>jpTw;KQI4J!18~J{QuhPuWfcu0O1u<%W}8VD##47}87;a@$>`#8)YV zt`q5v``&hz0tv%;O}zpC|3fSd)#QlDZ=lU~fuIf^DR{JO<$+c!YPO^G<@LQ;-X4G% zj$d4DUVx$v5ASTPJ+Qvs9N_>bo*#0_3n^&hY_!&HB%lo7|L;|$AE~j6xR^Hpb(A^< zQSn6`ZvZMwY$wGAAmIQ1!1aHW+9RSCxO?=b4e5jSfP^mB|FOW|FL5Q-alo8+n%3@?Ct4Cq21Me<{vBOv02GW1M37_+`sraJQA-P2tcc7$ zoOVZ=d~quG$c)3JHIgDHSTt+IpcGnPJ+TBsd-Imwt>)xt@ zu>SX40ln_WCkJ4_1_6s#k^NxEeRAI>4YUSK1BA9csNGoq7E^=y50gjp}x{~%+?gic5wloF9V<^@0tpZYmfVhtk} zuF-gid<+{IBWv8~jiOoWX1fDt6P z08r@*06nrf`1wE8>a88q*TYC<&VuLwAUP|ooUOO&usQJ2sC}i;ytG$)1U(qCs)Auf zoto)NGg@gjF2l?lThTgnMsn<^=ozh|+A}3J02QpZFBUxt4f%ijc>iBd0IGzglZ~Br zRCMen#4H~GW=I!gH)SGLGifx{{=YlkZQ8I9c z*~H<$2?+nCsQ+F43|{}^^*_8zCKEyBX>|FLcdM#0(!5rh>o*>Fxg$S5nyjmA_Ytjnn@*{T~IQk@P5}$UC*Oz1DHQkSR6*T>M z^^lr~ENRqx@94b`uC{kJ@4NN-m1+m`;nDlAZf+ca+5sZV=h(q;YWm=TXlt#p4n<;* z9XxaT;lqmu@4xTXqum#En?|=j(1_MxMD+`2prSey8}1EFe_7aJ=oO2=(VLH-SCcc! zP9Y2$HM`I~qhc4jXVmLL_eg!G9!z6%l75QiHcRcla$>RCnn7W z052aqRPq9V!2h4pC1S*-d|H)7ChDt4RIVcEWp-K>79B)lOX)Jw;9@3?l7TznIFV;C z?J1Ul|8MK?e+LnJ+IieDB>+tcTf9I?l#Y=mC$WbvM_cUzM~5UZM#}aBfbZ&dy*U}X zBuaWxCGh|4=c48Tuyn#u28g-_fzW{}z!G|js#^+Tqqp5f)x+r}6cy^qBh|I14!yhQ zC1=y2uRy+8NgU0}2eN5;K!65O4@}$@@aaL00%+RE+$HcsclCWseRSNoyYjz#UW?A+ z`=PsM4>Elu>Y22Y{%4((;F*ZL$7W3Emcnzbrn#v;B_fmOFR9?@jYdQ!{hftS+5eUYWgm z^<>oAMn(j6E0BL~aVqH3nl5!MEzMDFhSlT@RVYbs8ZsNdXsB*{(@>xIreRTNH(fI^ z^q2OgYnskJU85arfsJrUM%Z4U_8bC(Ymsr08XoAq@y!!Be+u;f^N$@Glp_pl2hGQ| zpt?YfQuLk^wl26kVCxzSnFEoI^yl8tmy3p6a~WNV!rsi&iECU`Hyq4{a<-^0Dt_+6$GB0e|!6u{ktE$FgrK3 zl$qmnGP+Q2wKL4iBW4y5tcvTpOd2*7j~#M3o-Pw=fvRK#^F?J!1G%3B`~PXS|3&Pa zmUr|1NnJh$S;udK_5Z7`n2vlAu?R7~wKSdd6E?v z7u5f+KB)8>@BiifzddUZM>fvTO26 zQkjgDK!ZA0h`G2lN9jv*41O|4hbxDbz&;`b{r|~q|HrV7rQope9AMo(xDi0}kxkdI((fnc9b@Ov8N^FPLO{)t%sGbjjfH5xaL@VAEsG9j$8H%dV4 zkeR&7$g7M}!S*UYga7|Ok`xy|8L|5xhoB5$=@XTCH>HGE9JSiuc%bSD#gWv>Sq zp#NW}2#fRoIsc#Y|E>GsrAOolU&}|ZnLV_3nB2cfng3sXwKm?^zs>I?`S=mA)@YC~ z4on~^ZZ7l0PZ+3$mSjMvX9H&0xY3(A5yUTi{Ky_0Kf>|<4&@ImjG#o+%kE13Mp;|!T`oh|RlGKX;W;pIlpE8%`hy@r0oK9K^NT>9r`H-T7YA*G)D2vUv!2kDQsw_8@*LTDWCL!tS(N?wM73Ad~)Q&NQH@YEgET>qdE4ZEEn+qa*y~4CBmGP z4C4Gd1q;sq<@~!5<=+Y38>hkr{(lY8|F!|aHQhi{DgrH2FvygA!j@BQI+AGb7^Y5`mENpr$mfis$4PE$k z;+XaSy@qn9Q^5N5_{G)ch5FWov(Z|+QQ``-%WL)Z@swmB#*LsVgn$uRRniv2798q{ z^KbVc|5l3JaoN|P|7UppA2S%Q|Kmj;Vib8qhE+Iu)f?%w*C+mS&O?0&7|MeLZVh1dVnRq(|20HBc9|MfIA0Ey0kwhM+4hYYK9QZhX=x$p`6 z|7pD)pH30L3joS1<|rda8Osr61pc4K_FimXD2dNGT~c@wnNLL}67Qu+l~1p6FhxAKSi#|g;4m*f@mU2HTsV3z?xfd3ae_P@od8NCrhiGlQhxQJc7m?Q|dke?3lnXX<3 z&6MGQrj%W?*OsY+){|2TyLsu{ycqbv|8vn3CNBQv z_1=R19;JlDJYb<_=XhP)pBD8o>GNFbKbKj@J(5>m=y}f31bc+*%;%}Z2!&yP0m)%r z$^Y-@Dh8znM!cUyp$FJT=U%u#Py|=hKr9?A-`ML$$-wEb(V*G>j~vJu1deR~XU;94 z|Cc)a&#Vb>plqF2X_U!GnKci;SGt)=!zq+|`;BwRy z^|Oy145y|K9*DNq8tahDdFruK{-)i>M0fW+@dz=2+H~C`_4h#ce|HeP^kdrlW|;=mxLIZa-wYiwGIJqOdy^KH z&~7?HOQEyRX-Bh}2c@)?on$z7)mU-`AQxx*(?cHT>6**DBVan#V5%~Lllw{e4>AgM zXGGw9LM;|K@mmTg@iik{VO%i!!pg)HpD+@m9|C^)h{kV7LzTQy0u8Ef5O}%%FW3K- z{Mf7iEA0PDWjTO9{tN?w-+u0mH{P;;_q#uNetIf9bM$0%q26joO{fflRKA1hEzvCc zv}XP-(i&dK5_75M1&68SG;569T4gG^%o^8N$Q-DIlsq6bmZ?0Dz#J5IE^|Ju$>VYZ zhBfVi;8Sbh1H5!kHX0*xRba>F13{CC8Mrd6S|@!_PC)H*k)eWEY6GAY4mzzjBW?Rj zECRGpNB7FGl$HtkdKyhrWGD#s{iCJ+UxzdD%bsWJs|Chma+>A({}$%-D+0+Vn1JD$ zuKAT3!mi`U8aH~Q+D7YXjP?JIGXLMJC}1$OSxiJ5?U6?5Poip(8N&R}{76y_2IbE(0RDeKNEG-W%yR;; zfQK$F=}*F?2zs0V%n87Peh7tV9G1>-9DSp}|F09wFI&bQ6QOwdh_aP)IU_L@!np(y zh*f!)VT^hLFY?m?KHg*;7BMW~U`e4Od%4VneO1PFlTt%2?T z&*%K#4$ET>=loy8G)AJNkOq)AO_lS1yQD5OoX}_B|9`rp{)g0qSgXM`-RKleQoR#j z^C(RDmZx#j8~sV>6jN!mw$rS)ukj({D850!1vv0vX*_0)qzyIl5sY+j(kcBR2e(nzG3#!A4IELj)DN1D@Ou zL*E0_wDb*aVVV|Lq7PW`=Ej@_clJvL{@^i>;{Z>@Z(&=~()eJslFdTdH)v>F|{6Pl>Q{T6$u*7|FI|~KL#Y$Jn~;YhLJn6#tD*beIZ0=W7Z^?Kk)wv zC<_bOH#^(gjb=MqpNP5|ryCP7P2MNbv1~ouXEh?J{TExvPInKv$Y!})7=n7)EV8TL zHVW73w~eB=`fcCaG8Acay#6Pt#Ou>~bvs~!sB^gDag@D{5?w-j!0mUJJWoYU zDD_=n8J80{mVW)OQ~&ebLFL_IClG(~1A%AfcfSYw_HWS& zin@xbE;tU?TvP>DgW&n!52t@TjMNjTjrv+NIg4MXqLw%hCNsWJyA(=dYG^pw2-DVXDFPe zXH@BLyJMEVuFbp{JTiCNOJ>#$emSJRls@jzGcEVXEcrUP?-?^=2;FuAWyv#c&%ivl zodfeg)RM)7X5|~VhsuT-cNpTxc-JacL3=m6&6DVKLU9wJC*v;kQ6W9GMeEy@uLu19 z7JZped$lm@7zVaH5Ou+%+ZJ(v$WIdGNB$6(|K#$YLN^i$fh)*?%*&~C!2geT>Aeu+ z1t=zF#D|-W&54L}jksJh$%j!I&^X|Vb%j+|{?BZU;YcTFfG=l6s8C^yG&yd#T=P(T(h1*c zDiQd z3>AZR{L~}g!g|mEyqz#d);LkLa!A-dL`=YS3?`tC0r3B!Ll*nlMjLPq+3wB|@ZvCG zT6YN86NVjXox$C6IPHuNhrST6bE&{HEq7?zwznAJ$`cFqbZyy|jN0~q%)P?lTPbit zEOajUeqWsHc6C4<{g?Sh0abAXI!2mTDQR zP%AJ*0Rqm&>|<*zIMwHj1!t-iSWit1-pXR1f54_8;JZ>gTIK2iO$>W%8xSN~=8 zgVi6YeysW{)!(ZAVf8Poe^>pd+9%g;uYFqWP%W%|PVJ%EW3@Nc)@qxzE4AI)SJ%Fw z_MX~@YClr@SnXG9&({8^_E)vP_wRto;E7MJ?XQM&Q?r%lb-&G3KBfC@zH(dl+d}2} z-EWJP7j(ZZRbCi>o1dDl?C*XHD|g&lyR#b3PleN!SIVzp<$(M;Q+bvAdZcntex0qn zT7I3Ye7gKPU%6X;U8sD9{JK~VBK8yrlbWuJY3ExB1G;y5ANmFYkU^tbAJc+fwBf@wWw-@@u-^!ph;elLay5dHFT0 zEXc1jl|}jWNM%WWovpl9ex0j)j{G`bIV!&{RF287irCZ!^6Qbxart$&@?f`tBb9r*-)1Y*-EVW1u={PkGSmIGP&v~5wpf|%ep{-{ z#orbI5D#^~g_Vc9-)1V0biW;`d|vn4Y-PFoZLaeA?zj2M8@k^XDsSw5TdbUjzb!$_ zk9NO>mB-@YF9{HTf&3a)-Xy=yRNgGV9;v)Vex0p+q5L{m`6BsszVgLl|6i@LFQ|T` z`g-_hB0o3p*nRyickVuYcQ`W@&Stim4pwGPMy+iW<8T@BW(EpQU&7-O4s;+H!LZ@SpBYe>`tff!PAou;S7tq+cq{mXtHL}Nqvh3tnre9yWcWWy&FsJ zebjDfxw&!C+3`HJe>4m)IPbbg48I#&5ofTJB!i`7*()jSq_olo`2V~#f2d(*Ns!e2g7^i?CBsDY8;O#M@qzvi>H#wZ5D^iz(|Ki4FM*hATr_ee=Ka|XCw(zO!XGj z%EuJ;V}sVirSdIL;{?g_E!-DE^f=G|`Ag=1g_Xh3#{A#4zB|eev&3M4%;vOKJRatM z10zBvLHz%V6!qJr6kHpPM9j2tV{%UOivt5380chqPkLYg?Eee;so>c8ckbaBxP+!n z0Qh8!SFsSrr)-bf&#rU{7N9Um1wmh~f^%sq^liX#EGU2+X7R!Z^2w#)LZCnXaoLVPvZ5A zkPmsosl}=Fk**j1fZx$aDm;y@thO(nUcC^rC`xOL>B$%jw3U!Ob7ZzB*DiAB)$xsb zwAI#X>~(yky+=1*3jVW`tYck=nJoQT%zt7WO?s?A&fp?LL?&Bu1yJwc4@P-zbIUOam5gRAYG&HG^c zPqk_Al!J=0GorE7?~St~j>aK4va&t#G!4Lu=~Cdw*A$MeQc}Lfs#Lpu7S@=i_@IOQWIvBJ--YF8SDDAv~5lSFxLneYMZ`Z-$J&npsL2$iD zGbJrV11F=kMst0FO0YI|+G7gJ3jeUwdKhC)J%5uMrOuUwPj8^?LFnJ z@=8WkwPpWL1NT3r)ITwHH0{FV$yt>Tl#V4ovHr+ULdS@TEeA?t zVp4%+O}pfU_63h7p6bKR#%AH8{bukL`2VVagNiMfmHzNeW9tFFX>453Zqhn@+D*C> zM!V^VgqW2D@tdyE4wk>sp9d_|Y?1s5zFFj{xMD?Rn&;^9aZ=z@smA0|BlqdY!2hcj z6)`ej=e zP`-y$<4Oq7u@Tvg24kT=I&^40nJa9R-be4bwsRO|_tATqyTT&{TAIdk?{9W=O@}Jf z1Pum|R5(&&GLuG=b4M;?%_8NGFtk9Co2la`;dzYdb%7bJ{dsoy@&SybNvq??}{p@$iS(&g=mA>zx3>X;!2wOAG_wN zpiuDeLDa)rGP)o!j3opli~l376Kp6Eo|TV`)Yc_^IOGBcPA55V3jY5;?^Hsy60f99 zOulf9YD@VTCSkaS;+VFb^71WDkSV+WnMUq z#We+-jw^~O3+a@8;S~7)I$~2^JmvZy9YZIUZHO{#0^BROq=d(M0drZZMk!M}6u{2* zcB2W0KbFPsH{pq(nYRANler9WIH!8HzB&;o<@0|mwz=P+lCJM1`9B>0164N|wydsF-jyN8|2Y2FBXbo0uinVb8iz+nrenL_oI7@{!|7Xjpalgg z!Cc&{tu+Pw|4v}bD4S$hiU9~cR)Ca!9*HR*%cOCFW?Nrq8Z3?{KpX@A ze|1M9d8mQQ|0xE~RwOIdABgF9!)#8G@qPy8lyNg=ey)<`IfFT>kA`@wh z3*Jw*Bh6K0WmE-uU;Smzgilogitl}kfMRxKjhDAB*Ms0SKLPsx|K$ANt_6e$XL9OC zaQJV6!++<1|3AX{ztRKpdhvN*;$OmX0`hXPgKaQ&YS zX~yJI_#IF>yD2>AbfnC964U<05h42O5H$1M%n0Pq+9V*gJy_|u?r68=}t&ok3+ zzbtlCya{$xgkfg;QaU>-UiNd(e)-#Xpt}$4i0-B{>#nm#dor_~Fbj+Qw|5b94px;J$hy<)e-Jw-X(xg%Pvp0-(@2x*DQC`*STP0CEDL)n-8)mQHhcq)3WJgW!`sqs#v|3t;gGweFBtq~D`_ zLAa(rn^;C`nt8|zES)!|OauzU{y@v>fL~<+32JabUAr5GGlWpc?OEsT>CkyQoO9mx zy-gzuWN7oQ#)&Hquj+JdyFjo8k0_VXLhNuqenXML2pdg`Pq6=gitT>|EfdY7$13TA z3Oz(MZ2z30&NUhv(dyO#*iqPS?nD>_$!?ur z-Ds)TG!26E1)TA6zSlMafV6~q@8R=5-YX0~-MXQWMqTg*U;(adg)(md&Jx0e)@|5C z^nN;OZkBlMOQ^i;hgWsKOO+CF2;An(0b2T4^>e*IV_*R>TPa#}1Vt0RZxU-k+QE z|B^Ex9{}7DS>uohnV4zImsVDrtD8}qq+i=6=ofnOEo|YzHC?{PB0n#-@3;~G*#7S@ zl0h5PkoFT@=M7A9d(kNAgAN;+2WXIcs{vzEXs^|mwA4oG(k9o5TmUGxf_1}q0Pt}EAj5$`7FQ;o zQo2U_;S~7)M|uB$M*_yIfQ%t?x0sYxdo3mVVXr%GOme*c-+`RL;aL9t|GfTZQGt@t zM{1U2(r9v$X8*tR{{M+9gZlrS^FKcUr+`&oU-`s@Ccu?*+8=-O+g}WY2;Ot}$l}yY zc7+HYSi1zre?IrCKK`b+-!8hl2f7QFGOK&g>F)W>n|HqbQ=z-34~gy;GwV(qZkkz* z1=o(2>`xm#5Ckv$J+S}31)01Y|Ks>yiJT#h|0Rh3)p{9267!vxupb4cs~#hYZDu3( z0goYJV)LJ+4eV*0^hSS@j!~yvnu9ZQ%8{9~kz|GAWVF_3t`BioHR%8E0iIO*D7gN& zB^*GdC=xi9a4daVgRjfxD?v@Eoy~JmQ*3i_&2#+war!HezW7ucE4enxYPYr;3(yu- z%og(NuatrRzc*IQv6`Hu(^V8{NvmPeKV{{Q}X zTzKGI{s%xprAT6~;PO9Q{zuSHAw&c0{{OJx|DnYeWfwAg)IMwh--%jnNJ7&B55<6& zDHq%mE%y0X9x4_aU{0@Ih%@&!T-x6A)0lhW4BuNIq|KG{=Kkiiq6_ElSshG}8B7IPOjWhxm0Jc~&etSk@4V%(% zO;^N1?NQLj*F46Oe9P0g(VN*9LiG6Re^h^bPZEu+@nHD5Q(oZh!(nLvt|9_^jAriK&Q>ojvStzGKjz`S`2hAnnjnsY~9FAo#|8W%f|HrugPl+@h*Z;w~ zigG-WtA0URb^!qV{}X$&)39h^vBpk2DzE~jl;5A!IUn1y41mo@+dlSTV|7+*d)P)( z1OS2mKZ?SV?EbU+Um|0O!++F02EPiid%Fqz|I>W_uktd9+8nbR%FF*2)l5m)BwvX& z>>y&h)F6Wk%;8b_Got1NH~@~ zvZawu^KyMHnw*@jQ&CHt()dtZpQYuBVhM$xljEk-2@snRhf!ac;7z*eCzqdG{=4+$ zzaQCrY^U9`%TQ6j>F&iIwH&?o!PWN8=6$yc{wJZ~*fG+A1gSl&UVj}EW5Rhglj#!> zI}9im023ep2Ce@O_W#c!Ug!8f$N#0Q_J_i9?=o`ypXvjORN()gGu37dU~)CW1waM3vJ07J+BiY8 ztuJITZ~@Tr7XStR|Anq=i!jgiKP@s*PamTq06~xIe~uELz?snMr3___|pavcD+ zu+UrC?NB_z+2WD@_m=c~bYh96+9>Cl_5d)~p}3jPQw97e42d;}?*iDg13!EA4o^Oz~+;bvpAgcAk+|BHdtUC;74 z8?Ch)g|&NPndg*e%WL)Z_+*=?O>zQkl;{_Q@+~Z3;hN5CF*h1gc4Unky*VMk{(t%X z|Jz^zuu`c9@W-DlA@KWayQg4Z$4BlDXR_Sa@w#gf?B_?`0OfGE#YUe7$)h~OdB77f&YIM-{zHVUfC|k$~ITElKhXj-`D~f z1hwVPbJPyg9aCx;qBeO$={gAzP+++Pa2NPv3BFR4J52Ay8%ib7VWnbOI*|GvM?=VP zp60{{O9KL3l)|I%wf zP_>x70keE*ve#P1wE+nD|JP-qA~W*`@UFs)q~wz@^w8Zfq|ssh_B0KglG`+fsonN< zJx2nd+RNdzv+X54I&Dmgrrqdmhn{JZp6c=nH#XC9l;Zfi@YSKPBmlc0qm^&1ta}JyBmg1o5kaccx?J%jWMSk=&{vY*4Buv zqO_nN$`|t(=+kc4`OILqJLR^qeFnPQ_@8#tqq}V*%SI!0lK&)#0I`Wtomsm(YHFgf zbKw8qqHsZjGbV=a8Ph`dj7gz;WJ*MH)1Sm1aoZx6xRpa5p)nP5RF6&-2O8THAiUvK7%_zYC&-PXt07M>BKldPvD;}3{pGJq~ zF@8$AA;p|1Z$<~0P${BILx)iDY(@wE|4k_w^Dj#?87T#Ae~V*6H>6{_01P-RD(x<+1YT5zF_V~rs<^`x^XxXv{{Qq%Y|L668UjOeJ9)8Y*Ck#gduIU=tc7Z4s zt*3FV|9AHPeITfOAj{2f-1blqc=GWZ_wC#N&U@yTrlzww5o)cmb-sS#(Wrf;(Y!=9 z5T0u^Hlo$71F&S!Ztg@V)#B*Tx6ZF_v_{+F$cLE61~p-WED2cRJ>SC*GSp;Dw)bA| z{EwLbtNQ}@#~;N; zf^rlhugAy2XhA?r$N#n9P*A<4vH}0}``p}r<8`;}hqE1lMzTBFadtX98MU^15)9_H zHv}?A*M1Q3xQ=ghEpzBAMnUkRKYONr;{gET`%VB5vpd=GWOSk4f|4Z(ISm}Z-@kt4 z#^-_nxCG;xVF7?}Ke~EjNC1q$pcozh1N#4<=lNh!Vv)a+9UaRu+Q8)VC=8;49(=Tg zA>4>Cw_-rT6ypG{QRh=Wra(W!#*N;nl!o3FqQ~Xg63sET`CHLwMi2%A>c|=e{{KWf zyOJ@^b#=$_(u*|B8wq7so38RKBwv95oc<)_g9zFJdkX^;#WKzJJV&R1Q_NGz*yO}f zwEPO-|G(?4|C4Fjl!%)T%k6-1B}9H+qle|YSWh3hB}!90~pTXgu#M9pgNEjUsQooZdLVXd_}fXdh3 z)8{~WK$lt+8g7=OPiy@eY0((2bPpN2=Yp#%4pFppOINVYh3m}csgxR}6(SN4apc|{ z5COl!YbD;HfdH%bOhv4IB7?m&!s9nk}TkKF;H`-{dBVE-S4F%tqHlR^x` z<^Ox463an9+HJDX0KAgJnKVw&EQf^qLa63V(i5;r8u6W+7HwwHN$s-`rS$q_%E;#b}e>%~P9wEU0e-v{+v;X$SsE(~<_V2%; zg4tgrQl}H0qi6pE!2f>|^FO=)m}ZGm0>I}o(2)T_K$E)8aYawq{Vxci^u;Og|DRiI zT{101{Tu)g;3Du55){G6D&6Hnq<{`Hsr>RDPuLla*hn z{CefLDxawQY2|M!e_#3E)#p}USba(LVD+BrZ1q_6q3Wa6$E$Cv)~iocuT^)e@2q}Z z^;@d%tA0=Q$ErVD{q^eaRR5&yHyI%X6 z+BenSSNopYkJWyr_N%pLYkySxtJ>f9+nO+f>(8y-UYVYnu5|tltDjWc55L3d=XJk? zpVIv@b6fYzk>_{6%)X%eW$uODFY_y`{dcmzT4k;!)<{q9c2fv*v`$B|c8& zXCYVl2KMI&{mVx*T<0s01pNP31FJvInu!U9#L39d{(|%&4x16+0HfrKEe2+ZqOO?3 z`JYGF{*M*F0D*6||JnX8i~S!2dhNGZwRxnmG;FZ#1J`s7XuD7lxi9CJW5aD=4aJ)z zM!87>Q@%;}qbGB%5B-PY)kiiT+fmLu@&NnS{{s8}uaoKjbS{uKRFkcc+2<)#Y`zOu z)YKiL!%PhCIARLgUEg7G)9!Nv-KX5;=M0gt60(U@gwhGEw!F6p0sj9dz=E#1X($9E z#ZgPRYekP<_?ct^R}%4ldSKFnQm_=E@EM`WWSgpgvhpoFUAU%W)po&!E6)F)jQsz9 z3xuJRqIvKZzG)oagl`(BGif*V?e?TkM_mB(R93B7M||HrBn-WodEi?U7z)0;ka6sg zYm0ww%N!`#O5`fl21qmIe*6Cck^fT--WpUt3jZ7Z=gG(4ewV0ReWY}itJ76+%w;wS z$l^Uq$v_W`<=Jk2_8wfXD62G0ukKN<s*)`9Kd=8; zLS>`pdJhGpvwjGbvHHKZd9JY`w%D$mh}P??`S-wM^WJNaYIxRvC{sPv`d{rUU<4>I zX0ChTo5u0(_~wiwjHkOEq|0eXhHCnNq;XO`9&6~RFzyT-I>+OjrMt^nl!YC8H7I82 zNbYrpM_t2l)eN0;AaXRmr%nJ%4xcr2QI)xligBDeT0N@ZaQ>waddM(?O!vm|#01l7c8Fcr=9YAfl*91UuwJ>&+s| zTMx$z?Rk3j!pdrMbyE{Qw)fx~2q0Mf+W=>&sM{Axp1O$5EW*$>lp=9GK8*qcOKtr< zFp&lSu>J<By<|8K1SE$+_*ndXHuScecVa3bms>wih>0LWPX z*WMUCfs6%e-@0`QeOi-1^N!rSc}GZVL4Pl`If1snVq~JKYw&770$4_4C&X3`ftD!T>ZW;zyp~6wR;Dy7s`tGjI>CeGsLI^#hH}$SELi57)T!ZO^=>os`liS_u6A--VJV zI+gtN%gK@J8!Y!V5F1{)c9&0~RDjEsRj-Cc1h*TXi%yQ1b*cm-#-ve-Q58|U>wb5^ zIVumIdK8sgz%03|PJ}e9rcKHsR)PQjM~o1Uscw1!sYQke!xkq&0su&aA^F)~Hgdd~ zFujMy0Ms!s+1C^tX@dqKMfnH@^MF1Q@c%!m*GJ#Jn1;?UoplZ=H(7W$JA7a}c-IJ5Z4 z3I>LIipG?7vD~%wW>i~G@-WY_CIu*~7SvfXe7X)%Fe8?zQ8OT!^rjJm#VPz8&{K+*0p1J>xx9s12@3r}rs-{Fq3HBT+CtgNnGioh!Tcb_=&2I%d_SE08s z+ul^kYJHeOD&xVKOaA&q;^&p7cWHBCO+r8FJ(uq>MHV9t$6kz%v`W#5^1TLG! z>C0G-)ht$~05Jq8x)JB)e;a$pfHPJP$P`WS;uA3P4Fxs0GEh7_omEEqaNuUhv$%p_ z-%m2|)}toc0wIyE4Dq~@NhTv5fcE$xGZJXZE1~qoDd_*-Mv`8n@zmF%F)m2NMjWz8 zO`}f|y+bDVoo+1ZG@~+V2@ATj1)x>lJWq_{`Zg4&n2f3JY;QN3u$(**vpwAye3}sd zyCsr}&S7S7`H!yXD7wHmBp|0_X|WLlKIsg2siY)piDt13PNmj7jixC7aSrtV2Rro= zt@D&UVqFW@s0Sn;!?T5J9yKoC@-$9*qdy5l;!b({&nkO1+bHEor(1`*liR4uzWwKD z5WL`ph)vo2FK8rS0IA64f2@p&-teodj<~?eiU3{eGpq%%I!dMUNgocGmB##Ug8qMl z8ZT{q1VBkX{>%;l-D{MMnGX2eOw&LeFJb5S%uL|_za8HGCrs{PfYVWPv-}yJ9w3w- z0E8$g3nI-&kfYkY*|NmE-N-7@hW(_8GG{9b4 z#!DySJ;HD*CKWTtL5Y8v?eINSf-6C)?{_=)^-%u0>}=jh02DOb`1a(woGy#KHI z@}PDB{>LAN0D{2Hm%Zafum$kxaDHxTKC>-=C!-7XRy%5*j9S~s4yA@8vUx{oX1exb zjp(G)AUOPs&(z=XLICCaP5>z9_5hTLPV@+ZyCT8=mCA<$_~TE3An@#6Pc?y{K6uaE zk*S5e5Y(|lgRg(n8aA@PUIlv2^(Erboxj+_+U9we<)IHJu z+H8c~p=6xg#Kp&dDNCDzO9xnf@&_d0sgaLhq=S>r1nmE--AR}mtkEa@<1uk^v-Q=% zYn>Euo{wL-BIF&MURqyUZAS&3vqv&5Us_phu5L!K5Qr851?y715?@0`o~c{ZTUb(B zm_5_R2b0Xl$25Pi|IYvzl+HKL2*WpBMaMlw&>bs1=Gla}&yXIrrro3`z~P&&(Po|t zs9CNGzG+u&a+~v*VxF$KxK`T6dTxS}C4{r7fI^0E{%uv@|4-`$Pm+jMuVs)NIuAD+ zn+4Wr$tTJw?n002o(lch-{Iqh=t#+)q2SnRMWPrY4)lwZ7XtbuQb1ZxcwolRY!{5a zkhHWeIC|xc9EzrgJoaIU8cohe#~WL1a3oG&+b*&nk$k=@C!+QGYW`KQ;J2=qgV~8r z6pK&o9^#-ASC+SW?h~?vr3Kx4@94eVgCRiw-&H`rnEn5lYI=lIc;UzX|9IjbLjUVa z!?85-=uexxvT1uPv*LDH{i|w}NdWCNRC*F!v?kG_qyf?mtp2yk;%sV2M<_mV<*^-g zm{L;x{}R*!*Z<-AKX{|5M-O<#lPQtl%CL=UH+Q=A2zqv;xy> zB$7U;6ha{6`d<_{ep>c|UlMy?8!=nC&x@lXZlg;Q`jhY+;)r1vM}hxe4o61!77aSG zAn!E8;eRQ!iy{v^LWaZt;|c$_f&X8L;xT;w56M3*3V$Wn7+n4vnYtsjc|0;MYvVZO z`9HM-y#G&X)8S*&W2OPQ)0GB1-x z2e6X5XUCRZ06_hZ?_l<4_Gk77frB04wVh_YeXZ>559j~ZUftXOL!Dg&5H6n5kr5O` zI@Q?rqITZM@0!ZV=!u=E)jrd#YeC?0PPE=E^4`vFL?s`bwK|f!wD&fjSlJR`?th;Qv># z{_j#1Lhi}NPNBJ0}!f-~Go9Mb#T6sCwO&y2_fHL2IGdwDw_|_v+M>2z=I)N?1n@4Z2=@0Uzn=TL5J|J&3eTx0vcj6j$G`~S1q{+BF`opWla5_iBM zBH8{Q5ggh6*NIM&DGm<#^p3|N0~_F;nEyS`iDxV}jz{T@r%}qe{aKak)yH_%scZo7 z?R~xa-da^W@L|a>`BckVs}}hGxl)`YhX(Tv^9_naQN@6CQd#*%;9v813K}yP@xN+t zTTp!t{O|hZ&)IkTjY~(SX0nO3tTndI*DsubD#WnpjACgH`mqF=>C=D)6>4#n*H2q^ z-gQR&V8;lYYcw{Z)h&@~-)`X&B zsgMzm05-bw1`u}7uWq#RgL%;Zhr6;&F_9}KNn)8jTIx1JOv(PHcODpfbokwyc{)$F zcN~PW=s4MaFaefgo+=hVX{CQ-WhvU7f1ern{}rVC2X)$$qivKtJu$T27ii2lBVFl^ z?R6q@Gz;E>2+6++6>x>9IP#P9fXuR7I?clVuT)M3@W-E#K;YRge`@EJJ9j^{GY97M zbT;<%spXZ9znR_Y|H5L=g)r>H1xF%;%hqto^abgibb13mQ}*bh-d}1Cv~YN8XVNtn zm!s)|Pv*9mjP%8_a4QI2RPXTryMoHQMne4D$Os_t?9r!Mx9s2jU<)M3VrBxQ#OYT+ z-bi}ziIy?Dn|4YNJm)6Z|Mw{~i%LUez3>L$j$)!90#X}x6$+XlR^td7rAm_YfCkMQ zfU82gtQ{9mav6S`50*OHEP#WNm8zL|tVdJThEsJ6u z->Abmf(72#Kp{Y2jbx*oa%tVI`K6DC&*yu`9X!m{)=RgerQP(4-b8-hqu z-nX%&s@)~)L9v`t@0usOYcGf40*Nw^+w;!b#`*5r+hjKZ9oaNp6wzJ|-EA+q$30Dh z8H2QK`YYPoo@s^duES7=DDeM>05S;OVdw<9r~7F=R6~I70h_z$C1=y251({>j7-`M zw&^1}*mRJ2U=n(|cEa1sLBo)7=q6P6ycV4>@i35w$it9^A9Zw1J3;EB6v6{KGH0Dl zmrdM>a222bNgW^{HewUP6{OaSSm%q+|Kjt%dbWEn^9%I;HkfHUafNjtL4AACs&R zHE{iJ`+}!|56&eK;}8=YJGr zvB#sLQ>6c$1N(p7mH#8V#Pkc-bbrBaJiud0Wm>5?VdJDX`ja3JciKI~jT6?CJ3%FZ zA4}sAV3Ib}$VV{J!AYm=$!fs=pF4a_bsMt$=#p=FWD7-_E_*0FGy98k>q?ui>e5wS zK}9LauQ|%j{^I<<2auL7P`)ab8Wgbuh=^9J-q`9aWVI$ErMDF9;A%Y?(^BV)48&em5a0;P{%xgt_XV7E$EB+;7Mcd@UDG?pzDQ+9?`1YFa#!rnTqa!7p`=J>eg5Bz^S$NxI9Jshv#^Z$r( z3P$6iAvuwhPF{OtK)ObWoT0-;N`Nzd1p`ue z>3Da6k1PHg+7eM$I_e!KOF;GSx*O+|fi(E0-2k*ex11xK8C!AD zy*zGoO1lAQbd}gs;8WSURDAYtEcY9L!2bUQj{hl#grIhuq8Xe4j{jMbQUNE*I<{(D zi8aNs7NaM=L^wCTHk!rBLaMqiqU?oK9p?k*JyJ2!Fdvb zUBo9XZk1+;TTx*$Ba8!msJmfE%iWOMG{&aiHVW71w~azO`fcCaxSkI1{~Pd0j)^0| zT+MTxHt_%1u81RMCG=sq9z)y1 zqz~EyYM&SCV^KuxG4hij2!oFo>Irawo(nG5vnb2O^?y66PG_u4WM3wYCKsq&|Cj6k z_NWEd|NRVX;dN{QEs{Z(;$ppoLLD<^Idvd)^nfK6qCa3Ut+WS>)h;pwlHwBIr3?)X z(o5t5{Ymr((jM8SWGdU3j0mPc#spU~)@f(!tvYO=do*gVG^3Sf<1+kiY(-rEr#$t4 zRub_%VrYZiOgc4KZO;ien;m6}Hw~a!0>YXQvw3m)1D3N>$OER2sXt&jKt+4Nz#QDA zsIp%&@CT21L=QX>zon}eqd)V4(HH6|n?#w(MJwC?F(VH~gw~`pli2s7QPKxB5HRO7 zw%V|f`1G~yXd?Dbubhb1>#Mm>!0qZ0LsC-2Vll1VLnwY^^RbVv6l z>>AGyVNADy0Z<8kI}m@R`TW6^>&;v4-2KT5GmBH4OKN zt+mEF6{Om?4QE(xtn}qLQVtP9-8h zKGH|Wr*j)gA5DcAp9 zEozpcB)l>4(xjxf2EnKPv|vO_td{VZd}O2u$)r&-aEHX?B%>Jhx-=gEe4J!Nln>Ce zN9T2@5oF$-<^gUw5W?2wc1b=yti}|TLnc| zZPtl$0niRuVhjTf0RKO(Hj24W&NUeo%Wwi9Cjgcs0Z^>}RVyzDYF`Kcd?~HY(`TV1%gUKi9I@9Nj90-V0}Bnut^pNpBik z%yWd@uQZyMNHyqljmAc_ zx+RK4wwpT<4q6O->-_3QYqTwne295$P;=LjRDl`~=X>};(GnT)=)Kq5|I^|Br-RDV z`6d2IAK8;%@YJP!``>wZF30Sjl95xsmPeih-8{57OggU~9}A;;DEYgx|Tpg=i;eR z1q?S^&;{H0-~@B4m<96+zOLnY*REAQ|L@o#J`TuY=M5zzfdAhH{12Zo2p`mM9}_g4 zm?RLP?1)q~Zvcu>PfQ!~ljt!FKHdOCfRjrlFSxr8PJ#c=!Qnpx>aaye@)fBDq1hI$ zDiSW;=c-!as@UKf3z-82P#<{3BFl$lDsVIyxb%P8Y7Rz$RAgI?A~9_*?Hm^jT)57B zo+`FNX@$rDBp`ENehm2k+tGMWas3aj|Iw9kLTlu2!P=qAEV7vowX^6Vj8x$NFYLgL z?f-j~6XJndZYm}MixTBC0;Wx_-X3E6fArwrQ=9_-KgBC^rtAYG=pKL&k|wYDxlO*M ztjD+|+PKl1*%wmAyfRn*mASpyl?(j8vo}5U@{&5{Mnb-jk15q0vkx|5EXr8EH5k(o z9;6(I_>VUL@CJZ#YybfMzZNs3sR9W*NS?x+h*-iBLX>Y{F5HVoNgobA=J3D87#RS3 zZ2lMA{67Hv|57L$M3nP*gh6t`N&m{(lSLMt4UY8k5t1 zf%7PQVkJ5nmn75137TzvA&ZWK3=pY_+3Z73y73NV-kxppbM&Pda)_bR z?f?s{@&!-_tkG3`$hHJ#*R__w(o6O*9L_wl%x&Ad7>t@#tD(bJzeJ8F63#oFC{(~ zmo%V2_3!UfEtw$L^BJG5x9aU^9ZFHHG^3Sf<1+kiY(<=JQjUBRK5ItGDr6>{Z0xk7 z!nN6CWh!#u$?!BN?s3 z7td3lDWCuA6ocvDZN9xd)i>}7g zC>eMH(m5M7>*uePmvn&tzeMAh=H>cYG&#!eRMZmdi=9F?t@7d-qj8r@;!%Vj%0Z-@$0TdC*fe?ulmhb zU!Q^Q-haR7ZYHz*PSIWT1TvN=yfEXKdtm6(09~|@itJv7LaphU5 zl-R_=%HUty1*0#-)S1LY%ibt8QwV?&cwuvB8^WNcuWgSh*E9)Xd39j&`L3LZ*6XYJ z--08+(iM)Fo#;fd{i)qUD1Kyfd8_BkB8Nfx6213&=l_EK|3BgZV8@lDWcA+aK8Qym zN3LSOXgC($vnT=OF!TN&Sa8mYU=@a9dUHS>aH{Tl(?FdmkKTkyPtKz=b1)1gU3UnR z%!~K`^uU7fY3%>0y`8{~^Z!ku23I^5kymjQr%@{J`e)#}UP z6ma+-e;5J?0ykgwWc`-?yHAHl=BMT}i?E-JF4SA?s9EAL`@Z@!^(QX^DBpJiK$%^! z5(UacD_TKt>-U5G|9!EUFq!)6a!1b%w+xzz4*o5+;8D%A{HMY*zFPv!!D?gEGI{1;) zuGq2bNMR$|g<@r+t2Z`u(a`g&8?8u%_HhUv8DxXk{{;PikoW&|O|F8BhJBAWAet81`z=U$CE*PkJjA)rR0PqF?K|dsK0jgIXB&;xm5ecc8a;4;$92Iv7N4UU< zr_@gb38I0M(ORRqK18ev`2U*)@WjU{u$CM3@mMHi^6@|wrmZ4RPKAYxKd)TEiiJ$f z1BTT{$Pe*eDTEC0|2u&MaK1N9=*BmVDzo^eahQX4bB351+D)40t=*(q-r7x?K#p&^ zM$3B~Vo93Vsj&!Ji@s2Fl*M}7oP!cF$EQ*z$<=dKdpXotfOmBidgM7pBk=!M#e%Pc z%+WPG#zqN5D48M=&gK7YLO>@d7x=jRKQRx0`#iSkc=)U@O920Wb z{_@|qiu~VN$gF5y7zz944h7#QBp0`-Wzbk*I-$-LGb+N z{l(j^e+tawHwrkg$3Dw- z#Swm-@Ry6_^dNXuC@IS>2Y}-A(3g4)6Cpg7i3veEcc?pg^aY>xq3}Y%<;POz4Q%ES z3=~HKk%3cKV0!JIno{=DKC~&vCw&P2e_yZ@)HbW1S@|e@*^AH3JJv<%_PaxHDzhu? zzp}b^DN@FfNw*jp1D5u8Ic_co%;~t%Gm()wr#o&3g5c1LpEAOENE21$hgI!53!y#`6=S{pQeLM7V>8ci-c zPx0}8_6Szd5qr9kV#^co|Nrec`_)FyaE%hQd<;u>KT*rKFt1n|C%w_1gh4SD`S{<} z^{Clf9x4*qOWME`g;ASI@(xZqr4I-K|G%r}{8PPz06z3aLyZb0b}{D@k1Q|GU}#?^-~J z&Dj1YaTUK1>PST_-v*O6Rt(p9EwMw2ky(;O68k#tQ%fTto!L@(=;mmYpKs z^2k2<7-j>wHk!r>nr(fdo_GPE{0jiU|3A*>{~!x!Fc!($59RZJCPdaAzcii=0Kor0 zigXKy|2h0GjG4{{*#hYVoyWjP*C>(D)E2{o-r3%6G}}>;4}nQO+ce?-rr7_RoiR%W zp9wikc%uZw4sPHLz@^^+eB#RTRxkY=m5=CO4Gi@Ecl5FXDDePmDcgV(fE6q_0hkkj z%aH&K{QnwYb9HV@81nf)01$n>g9=6@7A-a`eOiOBt8&o7k)H7G8sG{qi;jbi79A+d z{9GIys6=$+nx|_n^Gp3<;Hs>Y`8-wJHaT$=;{2bdRrMcAxrokr17MdW4Q~kn$s!DZ z`QtYf`54kgKB94wGB(mRnw&^a@&-Uk_kfXM;hzaoJ&mT=00{d31O0LXFu`N;g;D70 zQ9NjZ5UzQEDBtolPI{w12}9yexc~qc0KnDl1}B}eCjbKff2YPVTmYz;1v3U9Z7u+0 zS6G-2Y#AJRH{{YR0094gkk|it{U2*dX_k%DAMrHG1pvpj{=e_8yzKc%uEMzfXU8}5 zFjcz9!8jUa_8$-Xw|V`)!%0N;jDrW#aVr@(4Z|Rtme>Dz{a?oIaQ*KeJ{L6)K&Epz z9g?LN-~zP(wY1>68&1m{1F4y`mpyHpi;mjcWNioT$$7}m$OZb-6(Vf4>W!_3;*;!K z1>P__z?9kl7i2>vC0y}@tIO#Bi}Qafm6HMd@n<9uc=pS87vZR!5ABG9d9phy=g~&H ze*W5Er{Rz)%0my?@)z^ z#^jodE5E@7AEM{7o@Wr;{?!ow`#dD}IRBsX|D{b;e1&+5^ZzaK4Y7M$HS7mCY&fV4CPq2E@PZ+UVZ3+8B$N|jJgK=2aD}Exgzut@rysF_5Q7IDM+1b^cU9kVZr%!3Xu3Hdu1*UPpiEb{4 z2QyTOq&NDLa4k|`vZNbV160<8i6;!O{A9h_C~D}D4o*5{Pyas(`u_tcAjt85j{j@= zVbi5A^KSoe{NJLNbtww^|HGXB&-wqH|KAgPI)j+OSZSJgY+_<;$hVX!23M5k9b^5! zA7cAIG46A(@p$p__{~6o(?JmDt#VYjj<}ykPW&crG0Q z$f4lLO;Do*#MB-@kl_7)rQiSe$YzTAzrUs>`AK%doK0v|KJ>Kd&dJ#<-)&ah_YEpsW zmwc)ZHyfK}oT%{s_1v$RDU~f?r6I|-SX>xIM7%BeBM( zo`y}Y`qj03YcRv0Czd)xbIGCA_Qf)qVcm%pz%WL)ZF=Zj!0D*DS$+gC1?nazB|k)Z?0shDeFnjE{@y5M45X>7IHQ=ce%HC8 zYPUILzQLjlOGuHdwd`JQop%~ii_T?t_q#?RYHd{R84b7S?rz&Xu0^MEjNPx|5+?)x#l7XMgT92 ze$j&TL3_Xmk(DOTMr-XxaqCRR#-t07?0t^K`{eb%*!Um}nF-Tp(kL0YLz3|NU+LHX zPFxvy{ZE|#Qwt6U)sI$M@Q?d*^N!sUaJ0?ScZV}m;lk1TuWmx2=BOzS&^mT7oSHs( zAlh1MtV2D4V+YTie)#a>!TayK_2`4E?VU{#XTijYzr!6B_&&9~GBZ7$-MKbP)KEsQ z&KxyI(Y;w}LMObZ8+%Z0`P$7pci$+Wct}8TJ~JqWi(`V~EX}t@keZ`8%jlj9!a5WW zK-IcOff(P=BgQ!fqx7nigE0tRv;o}z^C|{Pw298L9WNcTYN~RPqz_#XXriF3IadZC zIo}#ULg^xTbdb+mz{~A}!BHrDL61JRmZAXnWZ=wp!R7N=mlQez0rx{@B!{BJ7F!f_JnfBtfPEt;H~I;Y@hK8RO7 z6mMN?O++s7srvSrW_>cI$|wE~W*>t7|AeKMjWjc{Ljc!w`Dt7r_vuKma_!cs=A(I3 z6oY~*uhxj94K?x+jC63)DZOe&rf7D@@&Nz;AlLux+W$yEO^!h%%Hl??HdqL~oudLA zMUh6y1qavv#S*(Kvw{DA#p)`NxIJQx-VwlsKl~VApj$MQ=xwv+L_7-_6)S|~k#1v2 z#FHwB@Lep5ktJYT+>+B7%vkTd1^oZ7Q0Y-b@aY!kk~0*q?$ce5LjzwD0%p*BHkzDF zN>fd3kSXt7;WOa>-_XcKZTwl%H__1XC)S)6LDJE)N?y^ni4a6I{J>88Vxw9AlGQc@ z@d_N$DkH0MHMLk<6UHDv`;&GjB)!Kp4g7!e*rC2G+D9}PwHr_x=e#5RbHR~(YwUYM zZ5sRe@IAT%5#4i*h0KA9pu}h!6n3rzWMi*o!nwFoZZj9-eQ3lrPbaSFwmk%cMF*}k zpJyr674ZLWmBJ2PfyzLqS1-g#6YDYbgQ(aL51=W&0tU(;$^Hq^rJN)#zB$9FMN-$HQF;!yKGA4HEdj8LI%q3$``JywCV_V~+!; z<{~&s_NVK+;eZATU}k%-Bo?&bJ^~C+{byJbI&~&`2Rz;{E!Xl z023;1d&W>=_#x?AnI&rv?H28@FH12xLWB7uB-;OPNmA&>V-Bc+;AjurGg-uS!|Kb| z(`XD2H9u`6!W|DxMl(_Z^JEZu*l5sF4xr2lBL<$$ADS-vF9#6uKVARxle%ILVSinL_%YJqY_(Bwx(Hv-v}_e}?*hVE_N(43{P|($o?yUyLc+oP_9H zG6Xf$08o}mmcIo?`e0;`EVsmJz{E)(;LHEK)mrUE3tPA*5XIh5byQTgLaGrM{F^_! z+R}5lIF@Pz1=)gG5DWVMHyr!_y>@4ozPyd5mxK}rk7y|RD?nb4qR~;u!4qI65Y+~? zGs3CBgT*x5GnKmQ1}Dl-ULH+3FyQ}xP;U}mn;cnOR;W=FFMmWRD%PFA9S`N_ ziQUvI)Dd+KJg^bZc6?W-f&bszga3&*po#|JL>9b4tPCjNOwGW;ad;a)W2DoO5;22O ztj-~lq7TOI5{k`nl~uh2An^YOV+l)8U$%L4&M+?8C>hBf&C#S9Nqq*oE{4QmHahFY zgaZ-pV2uL*|3PG6rPonP5l9^zY&!eprNR@o6fD5IMR9J86Ev$K;fWw3pQJiCI0SBh zyW)pY1ONX{pQfNg_BpH|R7Zr_^gk&Z-m}h=JCRH_yvKwaX)iHe)9m4Ot-b>P|5*o& zL^;r(1ja~D^eYf@Vg@?E)Fw>N@oLpf+wMJiNjK0?15PxNPzY<1J}C1e!gLXQMC|kv zxHD+vvpkKO;DeJCZ-KFEZEYXAjvvl4y4*fd9e)|nBhihAY_rU%oP3|$Xbab#hEc8I zTe-408RnUj0x;;daC~YpXL67wO^_@Zf8_xB|1Z1oB~~sjH5;Q@q9nRE7T_Lnt)#KW zS^SlyoXi{P@w$AzvE68g>ko(RYt7c>rS%eTK2)$W_*lbN&vdyJF1MOjVdl-va2<>& zBM|Ot2JY#G99Eas#U4Zz+Bii!Aqql%Xhu=VsS+bTo;UFSM*zB7KZ*W#hzcqg5fM1Z zn!atoSM>klOji9bx#%5Z1B*){zFeY`A=les|Ie=4XV#`0Q~T?0f&c0A@0l0AWcQsn zo`R$7i#y5wOn9lW-40u4!tE`jb10iJvjmo=Z>MHTE(FJ&waz`Wj6b&PHTSV36bghbPD^SX$P@8VPm8WsaSVW}|{2&Rcbg>+AtntE9Btbkv1HlRX*;{alaab0$*%PP0|9|f1{hpsE zT#PtY3UehOQ35qr!8VFUr7%~ev)+OK|4Q$Drs51Swk!vBWF1k5z>}V3h6Jd^nsI|@ zaaj(miuapg@eTO@ZzcY(bawffS*alTmjHj)gD4jkx$WWdA?g7(xy# zK!Hv)CeoL3!V`7A3o-HgKuBTLov$y`{ut>8qgv|NlLjm>j^d9-8~wsf`FS zUJJ@>>l4rfF^O_$G`)^rkpnm)mM#DXg*2KTv018&1ONXCHq8)mOTiD#=u+@Q3Vtlk zMDeu}Z-aD665#)TlJkGio&y4;5sUOkuU(63NQIm2#@cGBwvhs9QiJ0hGp8qTz+2avA~QYWevd0<9{d*-5tc?0jhBq`tkpj8DAGR{#iQ5NkKM~8H%g$vaF1*= zlx>EJLA%=wBmF;JyQenwQ}u255C8Yf^KRa=`>q>Lz2wm0gTZ`ZD(ukgY*kDB)@r-I z_L;kGz9NF+Oa#T^swM{uBZ4AV822b+L2$)(t%ABAcOHoG_QPF7Mw!1jb=oa!}fsK7ms zs#ITj8t)G(a*F-c#hHqqVlO9HChSW%gR%Nl3JXO4{6^K_gBT zk$iz=I3deI8YO+uVI$SEtTykR57*kwR*4h(J%C(VYpnZn7lHr(Kc)XE%nVdZ{+~8p zl<<_}f4hp;MT!RfI7Nl}3JVLkr)*(GnCi7*Sd*l4$`e?QRADzzbo!?SacVA{;5Y&Q|4=MuacY#At_5VGQ;n*W%Ec{Imn@ZQhTz4(*+^5?v}z~P zhfy-omd9qR@%q&^oHSfr``l>~C1BA|158qLh(Zot(Y9%yjROC}`Jafv?TSkHp;ZwH zKeVbT84qb4C*vVK;L~_W%PbiWX$2?zkQ?ndGWfi8*r*n~T)yhU5tQ#6Npl2*ahxYN z7fz6kRA6hCBn(N}5i#TV3o_vU-HHB><2-tj15qNcJ`l+63H8)CZiS(Q(@P9q#e{4fY`d_3&vvP$joXEmSL_eiiI062D zUd;bqSy`4D*_=xdf$THU{}JvpOFB9KryNXfqqxfw(f*&Q+I(&5J@Bvee;<7KP1j-b z#e4Q0g*_~X3)=~FYB_(^y9-8x@pR`UR6;a@!;wW%rd(jvQXXu>|n{o^}X(K+y^^!#)o7q;G=?))IzW(VkyGeGQk z$;vV%dcqO}%?e&_tA>R^#_CLLO3z4F!m&m{xGrLzlDgC}gNxFrVE_N0uKssf&xB3X zD+UdWy_drXKwxMIV>{$m$#E(Ht%&A{P9r}f6$kwPza!nN__`=L)0Ht~Osd~pJ0ajR~m4DRu!{1BS~dyoN#TY)o4Evo#Pr- zcx$^u=qgK6vnkvmmJIpH2=xve&xftX#V0CEI!XQC+1k`@sQ)|bPXK!66Ykr6CsY7F zdhkeLITuBiu;;YW(TphI9mpI%!85WfB7(SyY$PNfH7t#;?fZeBmW>&_>e zM-LX1M|18$sBm_%acQR&@90BeUur({#xs4}uv*1F$ytBisEzXLfepf(z7;hE-6sn441PP3yQIXS<*4SP%z zKX$vqavtGWj{lC0CPEaZ8PzV~nYdYw|84>Q-`Uu_)D;?-V;D)!#0FL&OWgfPK2Gad^%ijtd4yEF5zo0nHzXEe`pSRXycI`ee_#O z`(OAUP+&kbk&Kwj(#S+F3YAnIk-qv$RJSj$AJ95Yrk$F3LA_6Z&(|Za}!s@ z|F5Qi&+7jlh`<5LNs9qVo{HdMx=ZvYkqZcVvKvr#14i^iD8%5fZ0nZ=Gz#&*eX{-^ z$-npyvGLfT$QDI}vhbi~{ok1!F{f4lDL2LCC2BE=%-f5vj62o@f(T#)lWOM_GorDQw*bJq(J%Jwu~#?lAa6olzn zI^MiNo-@Kw&i`2l@5q@mf)_Uc0tf=n-2G&2_r4oX1xJq@oGUEb`%HMLvE2?^BP#T$Qe(SHQ14*kO6hUW zteo#%pZs*=O)Z8cf{1CS7Ap+6bB@Wk3$xV;UBgD!1eY?jzU^vDONMW3h+Y|m4` zrMIt7Y;T9HcDTN@J{%y@kuoS&TJY4)=Guw%_44kt1pfcTnE$@0b05Inj@y#B^>yY@Y~0plvD0LWTg{^K0D^MzHK=Ip8pl>fN6 zdSzQz4KcJ7@;EZp|9COT=F~3VvWk4157*kw^2R-4MN14fL-oqBClddkjQIbj$5v-# zc(VM^Y>dc6p&M}xHg&k)nzgmd7T+_4oGtat=M)-9%u4=`VN-)@P7<} zK8&FAjqL_3Ou-W0wPx$`u-2zM651&W6DfuTA(^J9Q9aY;R=C`1UWJ)AH$&n7itxYW z|JgAQxsyNuVn3g&Vn34q2RZ^Rll7PXcL`!YuT`<1G0OjY*0)5M9+rXaQ8k6=uc|jn zv^nFn$o{{|@BhnG|7-fE4Z$Ys|BhGz!&VLfL*F*w%f+c>{eO`?^)SD3+$7S4Vmm$Y zseP#QGPext|I@!J{=fMD-96y3^wT+P;{Ti0F_IJ&iT~|-Dd?y4p>J9LbGb2aPxFjJ zg~VJHD;=#y;(I3G^=mpKi7@0KjT1DxCW59R>wlB6{&!zj_EW_9ezAQ7c+!%@oB8EbUP5DBK`_UCeT*OW0{3k&>v_zMn`~Dk0P{`y5G|rd zCe6cSmR2?(UmxM7&4bJX@4(kJ3$q|#r%ehkz@%t&johF=d&}J%k8lG1KQ#6({?67` zGb#i%?gBWYv>K2~XIXLP|s`5(Wiv%EjdA+ zQ}v9LbCv_ZVE@lwMA9DqNJnskNFcZ~s3k!9pgrLBp@bgnG)YQKZI3(WGs}B@Oj%Cm zi|H_bvKuiiXJO3NaH{fv{y#jVt~&B07gjmnSe*!wAO(ONTF9@56u)CygL~8fSFaJf z&7R zZnmM4*x4tx%A5m}e!k16!}Z4M_^03}#&^tw44E7AHh*X-^3cZ8X4m;Z@h}yr=ze$n z-Un9OI~(`y0sa5Ia+FIYQn@9KGv*{id7WwQl)7wUmtm8sG15KbF>b*BpQ*s+6G2Mp zV{-}Vmu#9g{S2krG)2Eb>e;|QVw_5*2{0dJ0n<&PNJku(L#7Gv|B(rCvCf9Ajp}C+ zdl2_)-fahyJ0W3uqIq!qc@Q^ek(^R<0s1S&z+s zp4xe%ZTBX@oRDS!Z=W65h2 z%|vpeL5p*pl`A5S$icb3)Q!bQ{HcWGu#FVeuha4Y{-0Z%$)-xuQ{u85auGPGbc`moct=?GG#g}mb{{K{K{Iop;6gmH+E5{4Lt)j0& z8qbq(94=#S1U^PUsCv-2R@;3x5?9e5WqSjk5;)eHLF#Wv{f(UJZ)m>57Da!8dJyX! z^#3bk=Es(gIF6AtG;KQiv$xwl8II!+d=zmS3DJ2}bQU=P{J+9f|4}_+;bgIfmSMxN zS_w?3(Sm#xRT}8zmBx53z9fRzzYx&>l%*O{3|k5~BGP-ya78-j!&c+s6Jxk;mlx^C z`5!JqQDP6vGb~t!Tm=D3-^?T}=YPogA6?=>`Tx5Qlwg@ctj$ZXAN17D=Guw%^)jEj z+@-)ofic#bM4ACa6h0Bue2PeYg|!CUGi{%^A+UeI{y*vH2lXL%aKI-9pAHB*J+Hp- zaHYF@Cu%x3BwJXw2@0W_Un(k|7{>w#Rgd^5^reUs_Q6D5SRsC|RY!Lk&N$FhV@&$PUm*=DLTEcrh%`4gaf zq;)C1e#!rl{GTqFqx_#;pC$Icw#vE?Do`tuJ{XZM<-aE+>0p%h|B~4Ma>@vZJ1U3Z z4x$W~E1Z167_WsinqGXai2d(FD)|2onJWUa8o?yu;inr|lak+JUNRCN44IS41 zJ{o}vmHP`kr@GCur@HYct67CTjh^S&lkBYGp2oMNyeB*}11GKs(@8J8~Anz0M_g8sMX(5e`$TTeyskg`m5__ z>z`j=uV1OR>t9@dL;b7j-%$Vd`cw5EslTiK-uf@q-&g}Onu(e+SKK#ovAOK`iiM1fnLa=Lh10K_Zcl&7^qZ%@e)>D7-#Pu`)9;=BmFZuf z{=MlxpZ;hRp&Z@ct-^85+dKbr_~Vjy4^1ck zJ-jRV?~&cfe~;dh{CDow?Bu`4_C)^;4$eL&`ET&?QNwRISKoE#TV4i3 zIe!23jVt@FhOOv$#Ki;f;(`6)=2~+d!Z?cu&YeAV&%%NG@7r^{bHIxd4M~W@GzSs0 zFP%FJ0m6%oOFOOAHZ+VX*B!smY+eahH>09>?bc2xk46p+L$@I;Mkwr}2dQ-S{GUgF zM0By=z&a2XKeSH2#t#Ftk~nFWS`EgROf7Kxm}TQju1{{X#9lBUYN<|>ZQwDhkLlY6 zAdWFpowv@0)p)TiCj^BBdWJ80HjeY;=3?1^XfBooh@KTbPi`g=kQaIj)1-R!?f$A&F z8W!N)c0g{86OpEd)PtNP{yzcnf8hVe5amk#e@U%!!rDyCW2LcmuGOe;NlQe|lK(>q zf$9?A|5tbS|I?R|PLpZ?9WRNPMiicQEF}RdR{MlkJ!-h<7^qYOC{1A7Ln&FR0RaC$ znozcyjl4?K|sRji6{~D~DVh>cWI@^oyASUqRIU|Nmz9wt3@TnO@bKS^a zzmiTFBd54hr`W|dAZVon7*B(MW=)XCbm8B8Y~??gkF9(S^Re%1l~khChxv6dE|ifK z^s|G&_Sihf7r`tKJ0Ilvk@09H`MJRVuNC{hL&DhKY3{VciExs|{-1FB|8trBE+Erm zg>0G#M5D%9-_qOgskWG%PHf7?NpJKg=@@s~*~B5$z_bpe){h@cHUSU}C^YI$#-oyk@|o~bW4j%;&V<`r zXyJq^Hyog`{ZaZhFtJ{#wAR_sv!is84Lv)ufW{LCI(3`ec2sMbW$KkrH{SFBfb#99 z0hEV_0LsVF$SG{PkgU~SapC6mH=W$I@5v1q*P&v@wHB8aIJX^PIMuM6=e^QNq(*So z{l-V>G94levbNpjEVnN?a0!Krt5>#lS2s)c@GHz%0n;t)_who3Z}Kx?J}E0!XMDBucWkM3DWzvi~=tA3`B;XAG@n z;QxPP(>fVC8hCLjvSa3YNc~UQ|2rA`f7doHgsrH!;{sEDZjPz5H_w!`Bj#LYrJARi zoi!Z9#rygT2lbY(dCrq_C+2B_Itp!ZbTF3lWabiBx%6nFft4zs_Mw&Ek3XDc_=p`3 z2^xc5*1_gEx}O3)vnzJvht_5T{1Ej2#X}7LazhH(iDs@N%EH##R)QzP)ixa*X*d;HWC#VaiN{W!b!h)A*O|j9vCTVgb>D zAJIlp+sNW~Xr%a!_$zF*TW*BwhSis^r#vRPc?m6rxd%@S6Bv3)MoI=whmF812>_K( z062YZNmp)1`c3JYF0pji|3Uw6M*N;Wx+Mj`T*3kFd7?Y&E04%jui@P^xiwDE?CJ|m zLjnNR4*&rFziv#_BOy*klgYAuY{U?mO@0#l1@W~k+f&-|3)tifEV~K0dSt27iuN{2 z`k=!`IL*3b2mHSQL)UQzS^szOR&Qo4B(`4uGT2e|9+JrV@3aq{@)XUAo}AOEwh~? z`ac1$L%8t}SL#UHB5=p_`_wC1rLkxP{eON;{Qo{jo)Bnkm^0uY(4i!Yz%6NelC~F# zJmTuH+=FNk^Ba7l9cs(rGoFsR!XxniHBaUblU=dE?40AWPq<_T;s8%Mqm?P1mCkUd$q<^?UCJA>u-cj;J zr%~YlW!%1M5Z}wY&tz)mL`WZWR%lLVq%tQh*nptpka{IRY54d~qgCc|s|v=3Zqa<0 zr7}OW2}t#ZnH27s92IdHWuy3>9u^P_@c-3>AAOdztF^Kdo-8EB6k!q$p(9E|2kzuoGl>-fN0E00YE7LSd9XJ!2es8=|H6#l4-L4FO^wk%Y9`& zF01zcw zKn`e|rx32s)@XV)u_6b6Qzc4}3jF_Na{gb3;t{#aDkB#Q&c?Te*cIu8L3GfetTGbe z4*Y*xRQtz)QHSJUvYJq~43`l@vU`9ebes8=TPC!N_<9`XDce{&3)92)FAEVsg*2L8 zstve=9o7G!=_D{CkKL!{j1dU;%ynef4Z@iIo<-}UePbNhZc51*?P%NN-Z5F|2Hzj ziKL8-Z(f7MZ^U0|EfU`|0k2;pvTPLbSjqpLjQrm(UYzj=zESEaUJ;d4BwH(;hL*BQ z_4o1Ar-fME>QOUx?R{flUgz4Q_C4_oo)D~~AB>?9-vFLbxl3-)pG4pzVPEotK|%k2 zN&3mk!a$_yP1>P9dy|SR42<)_0I|4qDAfws7^1}rO&L$EK!@>kffaeYD7QjIX3MlN zkMR_Z3i$uaBdZghTjnXDZ1oBT6cU7vIGFkZ+q}bQl=MN(bu{R_*BORAQw8B%anc9) zu5Xn)qb~haORnd8O%(Y5OB4PFQqnSymp%4*W5&n9EGvEZwvlXdjLReSSnHPWmzTvy zSnG3+4b<@(g8z1Y01e>_;_<$d&)DY;Zo7)CNg=*49q%ewC)yc}^LQQp~I!2e&}IsKC*HBW?KprQ8~TQaV|7pi7y#WQZ6k~}c=5V>z!EWEwJ ze@_ISl~=yp0qa~xgUCJevd(=pKK6l>@7l|}o@slSmt`;yCHXkOGcuNlJ^1n=glil4 z|FefvY0Tba41{6%9B|KcudN&8Ib+r6S?#~HRt zJY_{2BXVpM>6{N+jf+o|7>+(}0sg;&omO`wz+yuE8b%PjR>(q?ZxXswDa<96IVw__ zV>r8Vf&c$w$InK*D{+2+36(mgUBcKM66YW1I6u~Q*-@-c!9BIJxprcGy|kv5?Ej0U zA0dQ7tj|IkB?D)qlI;Jh{Qkd(Hu~QGcRL7xdi@(}@Q?hB2?XAM{O0oReK+2*edy@H zh2!^M-?*|LocXBk-r|Aa;Ov3@;pSR%9pWjA2hN>6b&PL>nVG)4; zAD(DGX=Q2o$ZT*X+}`SL7d5|(9X#}Y+bR-gwjIB(*N?0J=Pczyxd)r22wsl=MMK7_~3;e@Gq^K$jHnt;V>o3}8_UTx}a@5dV9VdZ`cXD5BIB zrLv3~hf@5WLkjhxUQwi(OQY%OTj{LoFQWqgzx9eZ03FIjCayRD;s7ubJ#ifw1Gx|h z=4mv;F@wPW-!1h&fc>d*u)`%5|GxqxMrv&* z^*8&AFD(2;||;lft;56#YwXmy`i+h$kyX)QG55}2#|wc4JwXI^mgRS^_l z9zpR?VNg7B{rZTY$mJFsVn7^l4^24khqb@o2mSvwGXrhdwfr?uE7}XRyjJ6><+mD7 zNkRiWGtCt126;|3Dbj6SGp6kMn~}j_LM6?t&xdR6W}Z2#I0j(iklTDV<1HD)?#T1) zCA6}4jFEZ2rd(!z&F}Z?n{=UZ%cw;3>NF{nFR(#LNWs(S(pqC3`2XuJFmX=R1nvdy znItz{vz2sC;fA3m8vskY=TQ+JmMj>xcGOjUfk~Cpib=OANT=!>0D=EMP{hfj7;Uk5 z&?bSE8%mzLlmg&ZH()1p(iW^VN&13AHJDxaTd>uG*@8ns7%x~V0-l=W84ucV%Tg5Z zWj@gdYXFo(jGiPwQ2qcxt+xAemi#{;1d9xPM3{V$i+Gmvza!xg{S|UHDUsO^xC!P2pK3})L2_>hvS}Zj`dA{fE4{dD*a!pS%y535f1sF*a9OQ?ok87 zzG3xcNFzs2qfs$xep)X0VKSPL5)e~ykH9Mh04AUSz|v-SlQfE$saRE)SdQP@*)LwJ zeZpm(*ve4PnQ*PyTA!e-_~uTj^=%i`i8aq+_VJx?yA8Y9x}+1^{v{FB{Y|vo<;p#3 zDO>*kcXhY2Q6e#Po+JQkzey5+B>}h^3Bch0e|#p!yxN>TrZ9~D$>MpoBV5U?S!!PQUT-Qa?<3_}F-r^ec|F;8Dx#U{>&`OKN z53QtH;~}@BDWJPVj4##dMQkoa>I#o`Xw_2nDhZ50yGjl|qV|R{;;b^(+Gd5IFw(LZ zhA7aO;pWNB#o922=4ovgL(fE)blHRGHkMq0|G$~C6y0=%plolN!Vg6NBseHU0F14X zHADe$lu-pD0I~=G;Q#N8zoP~-NDb5eh8z6|mJv2e22O{Kl(*QE5t=BxOuTd8ljFb3 z&Jw`?KNz!W1-ZMTA)5qU*ayjZxdtnAkPeJZZ#;GF+e9C`c5ULvmTO5Gr;eWa*!MLx z9L%pBdo|I}h-CqvniA4=W1Qpyhfm=D*LV0|`?NXJ)3D=7fRFsaPjF6qKt_cu|H<-S zWL4!)g9S7S{Qs1WY|$|zs+RoUs+vh>;4lZt|J~AD5Fr{-z9Yh`7;(%rTc-TqTW(^) z9^=a zvq>cdH0+KItY&)QwF6+(zHI+1b2f*8XY+^l+cTX1TdO^5C1OJztcpH({xnCJS7336IRI0Ob7q}`{5*MW9O$*RJnD6xq@lb5Nm1> zn!1oKi(FRO$=T8Ik@(g+z-gN(U}E6IJ<}$PnzJQWZjF=P=ucu9;u%R5*W#+U0{^$9 z{%?9tN*Dz55g}w34`E^+Qr+6>pIn)xRt&)vm3A0U9icM;^?!eMO5OBZHwIK5QOr56}QZ2+u1EyZ+%$SA0GTHW|MfqkrM z1OGqCOe8(mNPbX9jFLdsxEkdBU^dtMAQ6K=C`d|hJ;gj9GO`A8Y7=0i<-v7 z`j)!s^`+$hOa6bvMWrwVf&YJ`BWlu9cpv_SXJMLp=>RsmC|wRXS_7xUMpltj&7!~o z=#3?z5MrdmMuRTvmbu#@|F>RSt4045^!K60lb^VI-;JL+eRS^Nd|^kmp9wEDw%cI~ zQiG7*XE5e)c<9?emO7@pz!Wgziq_0CwT-xkRm{gxH$zuh^4547pmKYW&L=~UJZU6poO};&Sey^{OlEi8u=?`#WcOqDGRch+ zXe8j$gn_^-8-ONY15p3xf9-l_#PB8N)$|-7CWe?85v7+zU-UuPCm&mFU4lH`z7OSr z_}|+l{}<^?%Y@0FSkmKFj{kKqD=@GpSg2SW`=t&Ar(V<8kM&?ajT0oh`a;t4=Guw%_116(Scu}ovj+bEdHmZE9>L0A2%TZc ze&8sCZc5j}3Ee~3ioN>|pp`s%9{B%V02%GWPaES+^~aL&tsZ}WQ_YT&22KC`X+tIQ(WKEIA7R5pr=t8 zL*p^+A>?4z(=`jTAYi9mV1oHdW9wY2k&gia{QpyNgqzW80P#@!&e6kZY8A(%OX3#xOho!}lNO!XR(z@GIA^_8b_(i{CrR3n;ERE~e# zbr$gdyNh636B7Vw)^<0ZyYvQm!L|v_7pyA9F|Fw#1XiVD`hvd&+xj!d;3$4!ykKbp zc2}u8aWT)M=x{%6Mx~fYp$M1b$wY{@(-yYEazaaU4+FI#CDAKCYALS^x<1s6} zB8&7vdqC|={+|Q>ehetAVYLDG#@Lh^Vg6rzwnONetR)*DVtkWa=ucwFAf}aF2C~bb z7{#IFnpRhEN3(4fTNm{Ie?TpSQaIKOTT$gaFu)^WTR@}f#Z#WEN3jsZT9yoB)Ke|X z$`J!X0#Qmji2bw1|KB6_zZR$j+#@DnvHu;i(l3G))-YSaJ=36b3*y`ww|b+TYxFci z`+wKZi2l#Na6Bfx{zxH<6=xAQB{rlcME^&e?~p4PMn%-EEgG>|_5aT{d*?7JIALN9ULcz#*kC9ebkW7N+=-bP6u zmR_jUc27H`A)1VA_;bJ~7J2!IHy7Idh*w`>dV+h@#I(2pn+{%pis zq!CjB#Q)xB2po$(3<`1DFz`nFm4_D9Yq-1I8n@?bO$5m_A@qqObWC-K5+*%sRq}s& zh)YgVHqw{;*a*1OKY#-_x@<9@>4^ zjqm>4;LyP!D69ba(&p6$SW|!T{x7+43c7pePSo9OVcjJ;8fU`ot!~1XZD1iq=MXPc zSitu>MS7m@C&bU_mLv3xD^1RoJD*oMYOy?yELc631+%{{6(_IKpG0yG00V26DH;PHe=?{D5VaD z>~q{N8uv2BQ9l@sy#U-j43;2-%b6apW-aO0H_7kJNN5F88+ z7Zw+Y!VvASuv5@Dx0eeUEYOk~$R+05)wcZGsV)6fxc5jz>e-{(>}$@kO9P0gS*a@qdZ`cd4Zt z|A*-RceP{#fOdMiAnI+`BBpYv4khKhrdOysWtdhr0627pUu(E<0QXGKI6^Q5eSFWO zlGIli!H&kQ-t4{*A&qJS0N4QUO+$!h!nI~={Y-PG9Zp1SWP)ZIKE4xfx1pjWT1Zqh zu0&KCzDVdBb47nFP_!%spJ=DiDl_?duo49%&aPgH%Xt~NbbSZ+A~^^A|0@x4qd!(a zN&HW%1&RMjdB4S(O2q$w|NnboIV5vT9>g3ic8vlo^X7L%jnJPYrhtqphemP8xO9OX zHb`ZT7bK}}lM7%K71(jhay_Q11hBgE)J8{o;yAI>eyrJQyneL}^-4=@(|Yu_g9p?X z5!8VH|Fi7>i>#mcj~5;oaNRGcQ|XW}+H&wfb`v1NjR5xN2Ja{$SY)`CQ?tzo^6f6gr79fa6%n}9EYp1 zqT|44~VJG!JUL5WJd2x^JFVEcd>%fU>v^fEtvKqa;wuCtX!k zt9{(fo7Zmc+O_Y=%P_8jSq<))hDL;43i|k-$4XaUc^bERv-?7b9^L+*-4DfN?f_4J zGms4enr>tjMOIPDv5Eqo>Hi}OB}xKn4wn6Y#0>}iprPZi&0SitKLwJlQPKxhvS`q< z{|_fqckl`P|IZ2a+ZGc6t->&F1%bC{^hs)aK2dcA$J|rfF(O?^G;TYX4cNy4-I`@K?)zFf&Z=kg>wv~XjmIQF0MDrZVc*DK=#oCDd<6dg9~Yb} zgKEmQTyV?;ZdpTzdmfFUzUt4D^2`W#D&;_Rrbh>#Hl8rRT*tK81VAvL(1-=Vcs5D~ zPGNxu-65Uar6i_xGMqx-Ncx~thBbhhJtnL7K%@BgTAGP}FaCWw{Ch^+#F7E@|F44F zF)b4+B#>N`(*QwOQusvj6T!&o38}9zLM*_?4GqnZQbXz?@a2%S2{3c1_)`(T5#y~9jiD)A~d$WPm7@)LesL?X8 zM3nFs^MCR$#2e1hDs^QJw+0$r5CqTf0ijO8nGt%@z zzJi6%jmabYJhZX2*0%AIB z1l|hjK^skIzRRb>^~UP>vtYzI9dg6$L=lTw$#{mQoJs%xzU2Q){y#obNKs>tbpeNl zR9`Ukt6u5R=+fo5Y<&oOz`6!(%oq+q3{B~!Sm$U|XLvkt53^9=ja$7@(QHg(R6cN| z|4rP-(kLJJ_6GtdCPn>2ohnSm1g7*Sv04zLi25&cm2U&j<`2!Q4{bcM)9#8-|P$B%{&yW@3BYed~yY9ET-BX*Ce`&boSh<+Ni-2?f5&t9B4Mi1iv+eC+~ zf>~Mx!+acgzNW!F<7=`{K9)teYZ~7(J`MsU*%ARkzV@`ur*8+dG!SZbZ3P#N$9&gT zAj|mHDlF2+Q@&q2xN9^$U^2Zgk)Ndl4=MvIxZKakNw60_rLF+EL4Wo(t4_6=8^cLY zfKiiSz#Xmpvxz5I|9`rdOV(^u+$T$qWl8vzgx_i;{9ZA4`vU*}Q78YON*5$s%8}@S z<(Q!ztTi|DDQmv?6e?>Pjj>(jF>ZLXYxZ#0%T$J!VJ~_b_ZR}~*FJo(Tk3-Sq>mEiG@Hohy3hK`zwvDbFD^+W7g@}T+aWqEPFz~!2f?P^?#I2 zM1WJm1OZjuOAY`ZP)JTp{hwWb*)HzH2-cvaVM%OI(l9Q1#Pm0c}{|30s8;1bp0>WhAhNREu_)(7NP9;kMtsi zmx*`k@*w}P91FpkaR-=c$rF1hihKBj!2f>=K~JgpGYD5m#h-k(C`iR0Dwzw{mcakN zO;Uoo2}01hUWGant~Fch6I2$zxzi3OB1k5uB>RG7V-pARh=UBLBm@8d2IBH4Y}8l_ zCx^{f!tL!wb2G7Pw}1&kSF7Fftz#qJQu-|5ubgkJP6V&Y z`F{@G?B`UaCvhME?wMhZI1pk9f!rFmdZS?#qo>jB|KIhuqW?wzyO{w~#`qi!LO6@^ z6(01?)>bnrAv_VvBAfo-^^qCRwg}I*P|vQ3S$2!Ar)|%MRk8%+5b=~&OclV8&g8g2 z;{Q8r3@k*(NAdxITLudnX*U1=?tmsPd-Z#3Xau3|7+J@>-B$5 zxXAfmS~N&G04WDhjdB1G|Nr}q3t?+N1l7DHSUmf-Y0e&4D>^&Ovu}HrCbStJdt3~@ zkk2u;X|M0Y?}X>~ga`aac@IoHC2#my2Z0A$>@ItsTgE$e{JgA9V+N`{J$sNj;G|hs z^$1G|o>}<@MmJZPF!7*zfKpUY|La9y_)<5S7y{VGP)8q~57*kw@*aHT4R|fBHP$O$ z{|N9-5Dj;^#5-v@0TS8G5KeiE5QF>i$uQU|E$aYU!@NW zW1yVTP+9+DmHJ9s&i_fMoj5=q%ea)xAO`?c{s4f}*ZMvG?{*LX_4+r|;2-%L69~Nj z_?yq}-go02+jGYbE*!uA`o@+0SHo76ro4C{I5>M?f4I5UT!+)A7Z02}d+MHr1NYyz z=lBDw?VXKiXD$}_`2S69zO;N~HaHV*Z=ph-=G*4`_8K^S8{XH^UT!b&QKo2=Rr(yY z$?bWzB97=gJBI{6v|?xYp%sBO9y0T=qp!x7G|p%|q+v$eGXh_;97y}HE_KeuKVFS4j1%y8}xS@$fDam4X&5K^{H^Z z7_I|weF|Kk4A&>Z^+|BO0Ip}l^(?qlP-1ooW`Xjjh7_NVS>!Wae4BiLW@BL1=z7?)-gzIf^eH~n11J_&O z`f9ko3f}#7fB}sCws*n>^SBM>a~sU-Hkik4-v$@p^R^#`>qp@I$Kl$73-Gmf6Rr)o z0FQgO;R3ww-GS>WTpxk=|0B@JH^G15z1v_8w_S$ob#T2BuFrsL0j_zt=HNOC7qoTf zm%#P!;QCUyz6`D}f(!b*6Z*Up`n(g`x-;tYpW%IIe(%4+^)K-Mb-1SB|NjXtpv}F} z{Qm~7zlQ6t;QBMT{v58qfa_1;`Y>F70vEt+FTif^@51#Vxc(1Z?}h7U;re;FegUrk z8?Il1>zCpB6}SNYdw;7|d(nRa*hT$)1zf)k*YCg>UIEuVa2 z$waEJ43P2+w*E%}{(V4O@_$@n(JvU)SJ;lQ03WLdq5$H1I{Co4_K>o1f@bwq5BV1 zvFAfD2i^5?b_B?7o$EyAK*d_>=)S|1q%zUym&>u@V9-6t4b}}G2K|3)to+Sk4%Z%_ zAS3P`)V$0nkdQ;EtgWA~9KP~$0Ko0#G>Q`rf0#>YW0stvO<^EBn|2yF6*|v5 ze_mS+WE_Re)zfIE`rox$tW`ASJ8`Re#>yP-nYOR%MoFkh%}?VK?s#D0HE#-Ol)#*t z18C5);a4{NDh54%Z>K;6;YZN_cl6jA*ini$l{?tnMd^M9QeX8aRMInmD&l_fN+aBC zPsF;RnsQXgEv#^LR;QA(NtM!yVuysb8QH1eSpE9{yPwlxbi78x#~yr(v$O0HDc?4V zO*qEoiF&X#t@(cWSPWnLd5&F-<|9P>xAOx;hz4A`v})ggv_|Xm{5rR1Ejk#epmo46 zlk<2U6e?_ydk^Qc3vf?zf0Bthrm^6ZroniO&z{Hm!gvQiP=7k8=usE^@qUp-N~sg?I=4 zUv?e4p_m_|#3dn2kwGK~)hNiiQ27;-nxmtk6kGsrTVNYom6IIuR79=z zarbxqe>!9&5+oYXk&>mrsx7_9uno*gG=M;7Tx}$eP|2|U=K|>e=Up=V1l7r~txBqI z2~IG@Hh0?jo`RyyV=@W_4E;h5v_bk{rLOQMp@SUYUkFk?jb`D^CY<}aIOEjnsyED} zaL+VZBaKCgE53)k%3AH#gGCj0oTK?yC?mm2dq>aa&F{#p=ubi)NKQB)XM+RvYZZDx z&#Wv*^vud}M9-`YNA!#&iP4Ff$fP45vw0p>DJF@T1caye3KTw1%>@*Oy@}(*PW!QD ztMU5PHl%-)I2ppl;yi7rFJh>{`v1SQ;3(;mnE+A_q|0Z7!~wfVyt_iXi6qfH17Db; zMiEG^MvtdaDF-r|awwqxzqq?bNOg=sOHz|f^Hs4m*)-pc0b`zTY&Y8B`om#+xfL$A znpfd>b2BWgAbo70QhDSO9tLqbOue|FSU6%)2Vc>~$qo9G$X6s?Bb&a&mP0&I@c-|M zRmoUt1t(g)BTbJ%Igi%CZhe3+|MO^vEBn$)0{?#^$VBa|*?X?=Lu=0zerW9& zHy+ZRUdBVZOU!u4xRwFiCpX%{ol;H727I|7gH`(gfq@G^a3@!c<2<>!jBPMQTM_A{ z#`p&rfd8K>?!V?$f?Hr+V*kM%?FSTXpFDc)T0}xnyr{9ZTIw|q45x{`V z(x8%}t)F7*{A1NbaY`^wCXX1TGMfx)wdcH5E2LNsU_szSu_6l$NsC=vHwZipVv^ma z6R_Jfp)W;0*l<9+B@0d3$S!=L3H<-wNHG|6c%neg{{~SYTrfl~=&%4W2Rw4h$q?Sf zDNm!rUTy{d|K)}pj&(HF?85*G>4RFGNI7&3FR4F*(UzN}c9CapjT1Dx`a-A{i*N`Q zA?W{Ca`pcQm1l(rNvX{vyfFmcP=+y$1V#6$ii+=Pi^WOy>MN{W;hq_EaNXei<^kYPXZC7H468bI#fYMQP}{TFg^v54N@vjlP|E)Cv@y$Aq4qsvV-(N zhmG2oa$pW^j^L9G{)Hgb(`bfGhQR+XMst-V7l%DYjEx*PK0R|vyaU886<)C+l8=Q^ zXyXLUuD%fOjl`z|{{NI1oH{XMet~QTgmI&%$GE2?+Z4W}_M&}bl^{-;Qv`|{}aI~3vsd#2O?Z+S_!UHZQmpC|0iqwMyJNg@gIh( zp1*bCF$1%?o9PwViX8tDtGUV{_H33^Q{exX>Ht2Wq7hSSMNO`V`rr?#RY|vw;E~k{ zk$S5G)LRAqfB7)#jJXQYDDi^ztwjgc4N50Ojw7~`8sp*Wde}1JHPo30@FMfig{9;R zj3a^pg+{GL#Zfb)kNgP)$^?OD_C5JYyZ7CA>Lo|#4lW$O|M~`$%MDvmb+W|+!NJ)B z`@_w(<~kI&SUhm2wu$d)xH?%= zedTGK^hSRYXdr$q7A0EclM$(D=@;OR2NZ(}Y1w0FMgtJMD-i+%{$DU>SUgQRd3I1j z&9e9*i4RKj7cNJ#;hYFSstXV^s$7pKgEefGct=7ZLcTW~f&UMyF0s0#Uzm!SL4=&l zrFe=0sicBcN^_5>G&fbte)@4SGTbwH*SrDzKi4H#>qTM$`$yo_;$$$CM+}L+9j)ai zTgGo|JaPt+_aL;latQ&^VAp+;*ad+6)k$} z?#y)qts0Q`SK$sNLHF6qHDm-+&WCDJJU*_(M~uUIUsiLfI-8Sv%5S4>M2f<=XQ z{Q}W4mKauFUi>OW& zCy6p>&U6?+9xRQi-d=Rcb{JP%9F#pPUn8>%ame zYkGN=^_&>s{|AP#&Op}~N265I!&8Ec#H`9e`;J)lb7gR{8_;8wA6QP(9v$Gt{J5X{<4{=%uQaz1kvCW5}mx2FZ)&-MZ z3147VyT@_Wx|FN)dhv@$9Y(05F8@u4dgM+elQ=;2K?7%9tas( z;QLyY)>8Cs_8rV|eG?*wPfZ)lbz__&CTZ~r{Qp^+4y{>{Su=!rCR}T_)+Z=zCUvs2 z1z(hsxCQ7T%i_`wfv#L59nT1(c(1aIk(+#09Y zHT4-KDNIn3MN!>j)PVm_+tv3qDS9YYh>AjhFtCGf4IJSAhqJ8z zryrGCk`i$pt3CJ^MWNrsA9u=I38hx!SYj7TA|Nvz;8$C~fd9WY3;!2F#p#8LR2d#i za>L#tL8gabq{{GUYG48Xe~ykTnm(8ZWyR;Rh*BvVmlLL^mJaqbceb{gt#-IR5yfA! znC3%K%fSDyQ$z;;MHYg0X_s!`H@-ebPbfB?2D6^W?85J{W8BKEdB$-(H)B@pu!Df@ z*}LS-E_ZuIHtXq{U(POaF+A`LjbBO+4za8JeXq2OjOlLJ0jAP1i%c@+b|?TkHT9y} z^d@&6k%yRx)=CcM#HD)PXL4ELg54q!bEQ%<0lAMk1m*HlfwD7txSHS zXRA7$`E&sHdx3SYkFdVERm;#E72Qi=JmtTgXGg_D((AReZ5J8|2|N)4PcUPa9eJ@( zVRsF97{fC%A5d88_JpQ-bzQ6N`iCoB^OqW4$n=%`{zObt5CJpm5R7eKMS?RHbhzGFEov|GNKGxn?m|<3 zXycKcc2~k8XIl9(-4Bo7tJYAc(H1c(YSKyS3ho#Pa8G;u9d7U30R6wBj~vvql?%t*aJkjI+K3ha!*w9OE;V;Z%A%g! zsMR&b+!`mmL4T52VJcW{KUQLEBA#fZ|LH#Nq9E(SA_AvVoQ=kLF3(8QQ>)k*n`LKK z6{s_ijyNcTjRE@qb5Z=NuziNw#xRv^A)IEw$L;|^Og64)wNLFG034!>GH!@lksM?UyQrIt{d}@jYI&?&hl4FpV+zP0giN}>`JtLJIgAw`G!2gd5|7-ps zBFRIx*<2RV2P5Ymy>=}MlED$ljkVQwg+tfE|0Cmn@&6;+#56q$Vf#WFB?D(htwi)lb)7TVJbh)UVZV)W5R+jrH%Uzq9_I>OWKe zZ}n&Dzf=Ek{qO4kGIi_JbEoc}ddbwiQ^%%GPMw~5bn3#?#?vLO$XD*rcX>SO|MM<+v!Wwk57Nm z^c$zYX8K#Ezjyjarr$mN^V7dJ{ekH}nEuH0N2BQEX#So(y>IH!{K47!S9Sg`sDJgI z>ARwP!EF7T)c*$cf3N=cQ2m?L{~oS?i~8Rq^>6JoaH#&)&i@^*e@*BAj?}-l^M6O{ zU)TA+x%%5W|2JR%`p*9?yy1L(*PU;9IqbSAX7k9>xw9Z2E;cUhv{u^?-$$YS;}@FE zE8*(q{;P{K?bc3M+D8{xuWXlh^akj=d>pxf$S;m?*u_t(HAb-iS8)rnvL!29i!)Is zNmYX7w%LUkX5zD2f&afS5+XyffDN(5;wA6HzqNxO&sA@9u=a++u=G=J4TM2bvIotu zSBWDr`r>~XBWDxU``&bKV+-z#Zh1iP8L_M;)V}elSP}UD3l?X%<36knDyZ89y3q$c zvo`XeXLFP|@iVi!hZ<;S0g?Xfot@!`%~9{z1R>qigvP|p#oCgDzFVO30X-uqqZ2a& z5_IG|>(RG!nddw$oPy@U(NE#?)GJC9hP{cSDyfHnSu#nu(~npN{$Eq9MOs4bJa~Pp z1ewzrmBKMf*ao}w+Bg-qB8NB#XpIQtW4>u$6{LV2SjG)sopH}n$z+V%w{>uq-O?EN z8mE%h>^oqG=EDcoEN0vM$UNu@Sc|L3fenUhjz)q18yy33KuMBVpr+aa;1i(&clr@e zu13>KdD+=k1pEs@s;AK`TU&;4e4Z;SN=-%EB@q=9s zgYz(HwmGV=u%bpiJ<@7is{Sqm4-n3Vt&NEXLiGWVp52R$$b`@; zcq1sONoG}@1EHXUIaY1CKA!rlP}a8gn3=wSrSF73kJ-;!*S@~_iXkKh0r0f!RPzRT z&S>LPt>#9Fmr8*DzsgxtjZWF1K`!n$XU6Z0@8&59AgX6$Y}DUG-*GWEZY*RD6yt;* zh>e7-mOSH(Tr82B%Mk|Vg!ac`o-D4Z#7~Lq!sn^&c?!ec#4+}9M&SQ5>8JB>v)#D( z#H*U?Pjs^kV&8@U0C?WxKP1vcL)0aaOVVh1=q;aETZ4mg9uC_}n-`lURvLh<{E^cS z9JjZ_=;(l4_g!PB)KFUd60x=PVSH-|I^!u{bB;IVELCB)Oc&;ir)X5b{}+aG&_EOd ziHT;|Oh0P6V&>b&&`v(K+PVZAHBRkpuANw4ZYfd4N>Dm?iccMdJbI%F;!Uvj@PJ(G(~3A{(amD>9p)TRXf-$u4Pwd;_K%G1w1 zO3f4G<5|%!{EYE)EprKd7g%e`_@Na$!Vj$jfsBXDJnUMq#+NkOWjthDU^_;KzAW4a zHuRT{SXw4B8WS=$J4!}>XBn~RJ1(v>j`QT^!o_Z^STKS?;q%-N{Qt*T_hSSbK7)l~ z*kX2QBY?Bd!R#N7RX?>F`2TIP{~s~0 zX?ZD{(k~2^n`QsMBhu){fWjJf#NZx9t$Gb3H@C*E-dMG8^73fh|8}&ymS~g69KaeS zzZ@qQzLSvmhZ6934e=2of5N>r_O z`v;$HeECLv{x^VfjL!eQ{he|Buc=)%_(%RG6aqJ|-@LeM-;*1M77hl*lowlzYm1$O ztUWL`hQHjLb!jfYwCaItsF}sf4C4-&D*f00O6vc;t5$#4gc5%#r~UpH-dqE9@{W6< z9N~O1EW5I_d?viq*lridvt$c~pcg*(Wua^+AYvtY>8)2N)x zX&zjO;4SrwV~s}n#6gq5|4+#N|0uR=$~XFx0u;3>+^+pLasJKVUP}2V=ApQT5opv{xhkP+M|Nka%yw{RT zPiJyAcO*fhKgx`7XHeUB6phN+yd&D1Hw?X8tL^y!rdDh+5uP6f?PXKnWZ;w!5f{q- zpIA_tmT@28ll?!I2Z5+78}$~#XT5L={{NRJN5b&M2t5_TgF%j6A^FlVMd~>6V5iA= z#yzVnqeKQ;UDG5hzzrIiRaMA%?3)(fwXdi;t%z)N?K{7RFPk3l$NPBZ#RJ7IUql8z z*t}@rB(rf3mGUF^P?D$ZS5cv*{ymcRl}Iv-w!g&y*3|8cS|}7? z>&k&C0zLJWGBDEgWK)DRiX*`U8k92-fy#>C1g!Y=Tkwn6t8o73e8iRThbTvCvPbYR z)e!y3C2G2~>(YisNQ%#8+oaL(6 zZ;?S@LM6?tb3acH2Y5^za*NM1a%_wS9K{=e(G!y!)UJz89aQl@=#4mH#rIzxV>R1I z(=(<->Lwsk*LQ9{k?Z6qVOJz9`bla9{r~TP(^I$IRh+r25GF1&3gI-mBUuSzW7E~6 z2^4@Z3@xm>ZdiRGGJ2%dxK#aBUj;g?h~bU~_t~(uQDqhcK*|C>bTkyTl&RN(&`_hQ+n`tYa{^&0t93r^=?)K{LyGqav5 z+jjCwBiw9HMsQCuelax-Ogfd%_(d!V)qa5g-_*_j1@_cWCF3_Xi%Jt0p_Jd-K#`2! z(jZkSOsr-Rk7mjEHFx^}|3BHI@hZDL9o9C@D;fdCfY!w}uQgkjm)1*cTX<+n&vdyJ zF1MOj8_{}cC>g(tGnL5r?P~j&+>`S^zOPpQzEU29F&Tq?!=pFDUHjhhayX!8wwTjC z*5U(t9uC`)bR%c<419J?yR{Rd%>u_!gXXa|AeqoJ=CetEWY~I0O~E?S#V(}L3clJt z-2D!p|NEXq83OS2l7A4e`<3~OfFR%(eFw=luqwwI!{&1l7LIgbF3wba#m}UKTCIL(awnk-CYI_VR3Dj+rcpxml;+W(`$?5} zV&j4tJ2BQxMl;hwaMB0(r2ZEPvl{Z$sTM{&^~@>EgBdPnfcf&2F8~(%56NPp?Ca{8*SnCB90cKK^0;DA7vm^ zrFn9+UHCk;iGvkr#5_brBUx1f`~TK2fGKomp(hFRGJRlsqHt$WTcnUi$-o)>Nc=BG zy@}{Pz$fuP!uw@oiOAf=)#YMQ;ALyYwOCrfJ(G-FH%bC6H9tdzmt54z9^=aIF+P2* z?>)v~|GzQjd2iI9iaa6eU)2BB6*D8Y`wIwOi~Liq=0=HgzKLqq7BTSu*TY1`{Woow zp72UzA8F_&ZyWIC-2YN8iy1bOrXy~i+!CKvFbdJ8xc{A41Gc*fsrIR+Bm3Vn$_>fq zSl^D7M*I~X2z+HSk?V%l7m~5go+@OQ^og2SczCBzU`}NZ01kQY0e4M{YDiQm2Rxc`z`*}M)*&UzeWo&J6pKS|)3-tOY11$#^DqDLYHNnJ zO_&U6)v;gUNwDj+BMLE23TZSwZX~=DA)ms_;A`OjZz)3ZV6QM9gl2!sGbGPlMPUv3 zVP`1N7OZuD`hu0IKwt2;K$qNU3yuR}jaiWO>iBa5HPIc4y!aLoM)5rzsd7kT{gsw* z@jcofArI;cJ*)CN6?Lxr+-yM+x{MpF2$b+K>DHo!7P!0%`av|j?7Xti$$(gaJ zH3g9iR3#vV;7~pEZBqp@$%Lhhh35*iERBgbqM_!}Xq*CbP_Ht8m`2lc$5?tJ!2jQb zIT%U;%5gvjy7MO)MOD~G!Z>JW3CO0W!xcFWC^mO1huAE~0RjJi8@H`p(JE#MhhSB& zVUmV>+9GxeSM`;raZ1{zTS6@i+-avau9O4Tc%k6(V=4Ip1i zr|RW^f&affRRWZh1CE0vd_>GCVx-vn|#T!2jQA$Nm|^NDcstz-9T4ev4Oqg)sv6OlKyN#055P z^=9{lY+za6EC2dlL{RW&Bfdj-!2eHSiX<=6pM>rav50@rfiwXTz+T%8;vZ;VvjZ+R zF9aoxxw1lx$FwvU0A9BpIPy90V@Ey+e(d|&&IQ3=J2FAgV=E7Y@SKZz^P@4~|L;mL zf$3Drf!Q*XpoMBq#N|>BOv-^p^phW#>d0!|jROC_y(5X^;WD;BNoM5WT!IM1s$;n( zo8Tk*cY^I<<0QSLdr<0s5ZVHqmCD?c{eKC!5t>)5rv-1>5Ze(Vh#F=8pX~or(I$NU z&rd5NCpVNkscnIufz$~KZzd0 zok|wP>U!8RDsI|%!T`&Zz@^ZLDXaKK!T$dqssA5wnaPawC&L~#wjI==Ls8cDClm|H zX=fzN2K8s2FGeRurahc_PE2z5*ym$I_3yuP=p7_@WWmn?AGnp5UUtd-+!`m`?&=Gn zS{D4Ozu-rbeL(+zznuROu`}=n(S_t^Z`CLPe+l?U^g}4bFU6BDu;WH(u#iS^AHe@V zphbd7@r86=NTYa04n!aoCjtL~B%K8O%gE#mO921Bqa8v#4}~}A6cPJ40#NjAU~uhx za*p0SbBM{p92!qdvFX~hj`&7nA(bVm%rIpioz(y^;2eGqK3p(>n%6J*2#RlW#gi|M2zXBV%!&ZqaR@<|LJDz2h1TGA6 zs4OG~J8r)N$ExrDi_ZV6*KX9Je@626p;te-2q(<_%yW*y33J6A<929vw!ahRoJCQL zwHa-Za2lRFnu|Tgjj@i*W85NvpvPhtN5c=TL{|LJN`f^W%JFTj{SYbRa9uKMu2y^L z+d%*Sh#~f*{zo}idizjqQvV~e^{5e*gLzR%qv;WwvHr)8W+^u_;;Bmg?}&t>zp{|A zXQWd9yND{h*cAcFL1gu_Dy!2!pyHGK}eyJ}7{ZZ72D^ zmCye@eJ#WJAMdhs2qGF;@Sz+9jP4PR$ro5O5++r$!U!h}+9>IR4jT<>5Bn(K|tON$52ojrBW!h!qm+jIPZ)%MOtMBJDN@&B7Vw6uICywuokhpiEX z=$OzJ8=^bbdy$fa=pfAU4No_2JPM$E`)L5>;UR!B)sij@?E7wBzj1!oz9%ZJnHkLJ75Fp6q` z*`XK8xU`c6bI*+N9rtYRXz%{!nZpjqSh`}mGiYL}_O?wOaS7AxA~4{TCbyV1&%l*~ zPk%~t(0SHs`#>6uDbtL?fR z>Hn#zyKB>z;9v455YP~K=0$J3A9TP|!I9u#Fk2YsjM(>6rg0)_4N1@Xe(BRQYPDOB zJl%NXeX;Kcuq-agMT0VxlLh>L9j;FR@13fxSoDr>1WT6xy5vffq#0SUwFPK z+au&D%YUO;{%b@0=f_dxS&siHX`u(|G7zzVVnlNMPb@nfei7n>@e!Qq5t}9brv?1~ zds}8vR!l3I;E;aE%O|!WCfp9!m)3`qs@})YPCmBUx&)@tsh!QW6YJ|`&ZW;V>+|7S zyP4;lvEnzZY%2y~Je9J)8gNC3Ea3mQ%Kl%Eb?OMKsV|1@BdLBhRluD=6<2!sAn71Q zFrl$do_Kb{!YT0ob`#e0oeQpt*v5>=m)08VBXXB^h^^#jJ{Jt(o*B}2-5?gc(UTPF z0fIdnwl=DND3zk09s++*00960XRSV@t|tbw!E#O;Kp_VUNVrFtTfJ6D&HL|9?jK+JFF~DP(z6mPfm6Jxac2ghd~kd1q@2`2S~{(F)vf z*59&AvRr1IX^B+QqqG(w#FZVLy2*&2kVj;BOXgFWcx*fkW@$EGUyp+#j}WzrD;Yy0 z+rf`I0Z8y^R=bOW35m~9*Q|GhI-s<-jI<)fNUS)j3f&n&R$Izp4_jeh4?O0bfp z`}lUA9Th(#AEtN`;9*r_HJzEbII?RlAQ{I)bg0}2{Qq-k zWM$+?vZ(}Um&V`84f?aU!T;#BYf(Ta+-x`2R@-5TZ6tsSnI_!PeyQZ&PUwPiwB3WN z|65>eg0bj5)H>`a3NzC5vP8=7RKEPqLmQ9mw7XkrkXlt1WtUpI`|o2*Uj^fbnuwQ- zrB-{j}OTX{Au`F0d53)E7Xdfks2We&PJLhgG2dfyhY4&q-jsu3+%;AHgSx7 zI#A^QPvB3*1_Tbs^M|<$TyYo5&)4Fgz>k4-WYIl?J?#Mm?$5H1;E;Ba!Juulh=x z1Mydb>AsVfN3{L`{Qrwc1xtdPB)BQb=Vt|*%ZO-Gyn;E*$6ww?Ngs^(T!92PNp52U zxWNDamD&HR5aNSjKKl!MyJdIO)o0678zie=m4Q|-ErIbV*M=Y5pWz!1q|9=Y= z+cLa#CR}T_*3UF|N}UCho&Y9jrs3l|;dc96tI=J#jtyGE9DZ@`RoqJ6D{_mwLB^-O z-%x#lH3Y?BYIPu++cDrf_yqp{C1vnY_BT*IXrTdvxHN%b%tC)AGWBbYkq>UQklyG| z!T?A+ET3;|H(<}i!(sbcvvqk`#mf{oU|^t8Ila|EnNrVmxfL$Anpa`w&CPHfIwKgh zsmGun=jhao%1H&Q?Z---5t@)Y@c%Dcd`D4kZ!c|LY?fGf7a|e+fum&RQB#$Y9iV7< zzD;Je4E+BWivRU+CI1&-LfOGYI7K%?w&eeYj4?;S%D7ol9hv|uf3Xkz|39Erot`G? ze{s|yHM2WR7AhJH_;P7+*3M6a7cMn$f$qUZ-;v#sgrMlp-prWiJh{1WX^xWq=SXZI zDC|>2)M~d}xflD@>U%7~;hxD4F^dpdiSKC>!a*e_zCxxeJyN zHkuykvi&DUy(!%L0N?ekMyt$K5zpI&?ghmhcJ^9+`xEdVmXS z3TvXwHA;(!606FZ30tCx77>*L{{NMsbTmXEql}qc&C~RfOTvE={sU^K5-SJoSwN$} z|Nql@_K#!uI!L%c3l5@y6Bodlr$y?}cWm(MFikc=V_||{+*rsQD1Q^1n29;qh7b!o zE&!M{Fjltxzbvk4*+)bpBMo%wfC#0P-o#OY{lB~aS4aQHv(S?SVPo<@0n#Vx*}*L0 zWh5vWQBa29ogxTXq*DKb0te`MQ0g5jOMw1=I(!^yS2`hnI`nNAyVlHej3l?p_oDCS z&F?5Vno^05V1V%!p_xazWMw!&8ZSl6bEFoCR$7!+O01cOqm`rjA8}8VkH%Gy6(SuA zX*4}8N@

D9y37+10X0*Y&OpO34SSJ>wbDcn@v#+Y9LbUsu$x#VFjt-Pu2T%hmIZ z)he!&bfmGi?W8n^!*c^d(GVIW14NM|wqSB=oY1zbFEovjmFB=Zmo4%e1h{zq!2iFI zG!9@edENsT=LixjA{Rlj0*U&t)hux_wqqVK5R8EJ~0`>vbeHb!2iFk^gsL;c_u+X7x~Cz z_TZ;u?159ktmm;A0gMKSMs|!IjBPyS4_68TcGv-bOj|HZ7ch;k?Y$GmW6#KD*-3j( z((;TT2%~=i_`^o8`pVNdL9+S^ z_k|EWvLFNK{|}qm)mCDLCZMt$KeUvm@sOGm#zVGQs=JIYsn)~~Ep?3^61_w4MSl`0 zfKca%gHVnJMw=Q+~VRL$_|iK7hpKYu9vA3?yhI_b~h@IRLqH%}cGBvY*8 zj?uF!$vNTwyi>wJ|Nka&{Sxh^rJcna9$Utt5Y-nG{Qo;-K>0O3f`tVs z%_*fh7iS`Nn~0Txfy;73{O|dZpnyN5M2gsHm~>(bDTlMH7z=)qL-HT`>8x7{)DCqy+=SM1qaHSCL1Qf#Us3#9EG#ev2rwivwBt!KH z6PK)rzQm!SUW%e&?ajzj|U1uINX#$bhg$a50nik~`sA$p5y zbn`hC-w58~WQdbd5htToyY&#|eC$O`Uzdb3vVwkg5ZE50i!}taJnVdU<40z# z!W(^)BsB2IuBaPa={L&Sn2U zr7a-7Qbn)8{{NeZ1mF)1T;hKbJO~?*pS`(4;(rqVi|B_?h{0jwqAh{{|6ubHSpl3# zQ$V;@xOM=p#a1zJI+F)!JRP-%2mJphNbyHi2m27)^Ml{W@oyGt{a4$;T0V! z7}W+K(EmS=2?{M-)9%LdPz*vXH+HGz_`MITws$t}+XMRl zPwhR<3H4*{?tYmV3xzNU>4UN$qGd7v3q(U9xb-wD=KqM?AK?E#(_V;#|JK7+SAfQ* zF;S>M#|T{Z(I1M=$5(brk-=DYQteWH#GY+t*zyGY|L4ss`ys*G>A$5cv*42s#abEK=B23)=vzoHF2az8zJt=9fYr}9Mxf&b3~|E7n`a$z~L!&aFd z5|e#TvhS(-`<{URKN2b-OKl>gO9$R)Y*^Kb^@h#z>BZdSWI&vO+8g0^8w!sbD5A8G zgZfoiSL7Dkje~kqeV|l|jO>YBpU%Hx?uPaMJH-C)f(1!Dr$6L1F-J_}s;+tz$O&5+ z{K0XF1&;|FC&B*zE7AX0A|}#M^goHKi2gUsmKZw2HeWqLF-ws#u>b!Ss6V|GCH{W| zE{i$*?4iEGL}LLy5<~?yPSEV?3t2$o|4)Mdf6IE;E3hdKQNvORYoB;{jj#j#NthhL zLJELL0g!4G0FnH^Naa%d$D!Hl5X{==nwc#)j^Q$2aFk;*Ua&9+PaU}&j$6bQiihqA z-9y`!m+a`z8USmB7PC)ga?uL@|KBI+KeAPlCA?DVe94nebej@In9q?r$KV!!0j+3p zUXj9W!2kb{z=+6U`jaRC482a8UFFwGkiL^L36dwRL<@)oL>VPZ2?zfFYc&y8|4H~y zBU!?K68@`3`0onv|Hmw+j0yrI-(>j@q$Pz^gJD2Q$d-=$zLK`Qv?&=Fo<80X4sIut` z`v0Fg_|&+Q^1l&%6PZYU_Kt^0AyFwL>XeU2tT?T>MD1b&k zQODHQfIC_cWtox9xxHCc%74WuAfk=@WWXoozX))0px)uK1n~d=h9330Mi9``MesxG zWD@+)I(Wo*c*xjZM*5^nk!&$o`*>WI=2#`+tbY1F<`(T?S3$-)MSfj5azqT48lJMP}Up^G9QH{zrODirFq^ z`_`2-YU@<1xlv+Q|EqO?FEXphae=1sJ_jviJ2M$S1)#4Lhm zdW8q{f87YE`yj}}e-MfdW~n)8%p&lOj28ly6>l`|!!1ASLS-9|+Cij~ht(Y05izq2 zM$o>md9lh%FCQ{lE)P5-^F1D{arSG^yk=QS=^^`o|EIwGMG_%0hUrfdw#AX)&gP%o z3(k=QSY`puVB}Gsr>a+pI!=Wicwo8wWaO-n;e>dnD=pPKHwfCGyU~U4GvafB<%lD! z%%5Y0;{pv{8Q9>zoo7eo;Zt6CdE`&t)+)sR{;@+Xnl`cq6USsB0T7u#<);^klK&_9 zf51`&&|m?Lg8siH%|eRQ{~kk~ij55_pG;$b5+gDMr2cnFST!O*ibuGk)poY^|66XA z`rip}NAT6q%$9rXK~c6wDQ^?&1`oO@cZ?A=g-p4SM*D|j8_cYFe=d185`Q|7VZOnGfm3v(&XxOzOk$xZu{K&x@(nh>aE)fawxN5VWBO_mDbt z74uPFc^bERv-?6l6;syGGsI{nQvWyRr2ep#&5BoqgCpUH1hO?s22P0#wJ-I5$8!fx zLVvMKhxwHv77H)q8A5TU`oFjAN;iT+$hVM24e;1KAb`n6f(Z8%UYOK)@X7vP5{dzE zdCZ4ILNlChLp+B@DT=$p2Kyh5|G;@2vj5k?5?y%3veJWOs)P;r%KqQQ8QK4vkdedx z7`FHT{-2HpGjP8>C5*)}vfwlZc#p9%s4mK~;3SJp2}9(;bHKJlG4;*J!2h>thm9rIwyFHW)N6(l z3yQK1(j+UA|ASQ$1)QmlQowN%@_+7828jusLMXYAMk$twJ%iXoQu8G>AE=!&ehwnK zkVg9;?30hJwk|=k$N6xr-E5^Vc~q-C>rl-9h)arIiI(ggWp9*)5Ixi_**nXtt<{aN zO_E1lVDrlw^%XW`;2zb^>NRX>_TMJZVjLVepG)A6asZ$cwSMF(g20}E1^7rvQsBq;v}|@p zXVh1o#tE9$SJ;I_sFwBE>aWKF|K9}(z{#IYd59WhO;+<@v1_uL9sA=~r({TQiseFo zjY>Y&4mxT8BqpMQ)%Ig$kD~zpzarI13Q_uV*f|rvSLeyVsIi?eT7xA1^7tD6xcXHv#T#e_+tN0g#G{A zsP?~;WCyh!vo%VHl(GXNP+7f0u7V|!FrYFm)_BB2;n)%};byz+p_)`-8rcAl&)TDcW7RhRfd7AYD#DWZ zpIh93fGoLTAn`v-hm0#yl{VIHpE1%5@xR-_0jSr%uLl3f-?&2H4Uazgyj}a=^75l| z2WOApe|_W1{;Odt%3EGM5d8n_y$h5iS5_F9-RhP^!{7r#BZe8E-7qwatX4&Ts;Z${ zO;1ZLYCuxCKN7=dp}H!%m8h$-IxDL`!_PgVVKl~IV+Lcu$IN&&Fc`C7{vZGG+G~T2 zkO$0f0Ux|x?=B0A&H97!viC*gi+A6BFYk+tjL3|Lymd4hWxR;@x&M3LefJ$(IC41N z-so*YKHHfiS1w<8Z28F9Cl0L)?K_)dY=067u8rRIweEE&x^TPKe+dLaW<I{mn+TH$dXl-nlKlURk6-f+Qm$*B#REn)nycc zljGAkr?l_U#5_lLd~?@wf&G8Dd7031f-qwFIBVpqm%|u0zxDGg6WiuK}SISOT;flLM3RJMW+(+n^D9M zM~@C42J8R#a#5BX|24u+j{nMa3@y2i0rdaJ_v^9&Scx9WZ)2>T+ue=(aQVpU=J zB0wBtYP!Dbg}v>KbDNuERCr~QyMy-GtP!GDJ#JOo+O0VN$kmPR=4{LX<^S6jL1O9~ zUFY4E)62o8Jv?)qf9HWj15C1Y9zX{t8riD40FM1XOraq&;7N}yLTGE_@liDz*y}j$si_~&O|$* z@RLUiQc(-~&+Hm4ofy4qw8ZQvEiW?PF?}wd9R1y*y}OmkfWw{6eZK|v|C_Wn$FXmC zR*4N@Mo*#+6o`0GIlQ;t)MNx7MPbysd$;-vY*A8Lv8~A*q|^4pdl;kzEB6EcAFYe~ zPw_ok9LsJ%u9&SyYvtfG{R&nGn9>R{Z=h4z4VaDlKLGy!9AbqfeyK5KqR2juLz@>O zVtN3o@z>NcAcshYum?u#_@FZXlr(ZDkOQ6#Nhj&XT+yVR_mC%iE zZDEkmze+~cb0#NdH~4&9~pd9yhBwz zCy!mPlfDhz8NZ{7Gw$3m0b==5MPr*ZbmoY&J<5{4oqL^Z5SppKz|lc1*U7BK^=A-~ zxUOy9#?$PO3?H%caa>X~oki*sqP8evIM8)f@t0u#zYS@yf>A`NAe@M^RHh}KBUblB z7zA{?M*`?Cm`=$URAyiaBgg*|)iZSmziPx5IsVrN{{Q@xY_SyB*z0!(cg1Zs<~L<1 zU`Yfp*Eq?+vicP>NL@P}L%3AsHe(5IPYIQZE-MkQpAoH~0U+o96Mf()h5E?207+wVmMa7(!-LepiVOJvn~S8bLpM{GRcPXp z0HB$)0yI>D+d!w105F>b0O0?}nfSlP8umQl88u||Ys5;!g2p3c^jCq-$!PQ^5kp8w z$o5|>8HD(7%lM?z_U*qF;QzNwXQ#nUN=Z03!2DW9)Jw9+0bn@*+>Qgl!2c&=&0N%$ zM7mV2|40pP3L=nC0V^l{0*g7KhI}G!;!epJblRwYx&EUHSGE$Q20AU0L73kE@x7gW z-#fw4H~F+`2)z9KryqFe{f{1(`#-9=hop{|d;qtPx_ZTu?nsswy8q)T&}>$Ru9!hX z$o=06TqNkAYy$)%?@q7&3R?p3Y?h%EJtb}bk!47hVf(WTlk@+b-|6hT2>)v5-)jr+ z-h~t8AAIL=C`?=JiSkb8O&|W~*S)(B!+qbL8m_vsyU+Fp-D`KNtC!53QeUFG=4d~j zJBiLFB+?^MxKDdLA~WevBAa=+>`HPpE|)~gt%bWRih~cy7@!NYRRx{-`0MO+-f*VV zIk2b1e)7k6p|u58V1=jn!tLAY1}3iIs`|Bp8p}>p@U&0d;Ig#zZ*=+x*^S>*Enkb1pYq> zxc1PGVo{#J`?UjzT2QPevmX(QwunV?_6_H~HnQ$Cq? zr}>51Q@6kYX>UmhFAD~7G6wkW>@>S1NB*T===Zi7OeiB43jF^>!v9!*rLm>A_crfZ zNjt9At0(_gBB@3~(19M@h_w;#?min2R=2MexRTA2DH-J1N|sznr{lm;%CXxazX}in z{C^g@wa1~1j@Vqx|IAjxh7f?z1hc$qSK|&FLk{4TETOjX0io(>NOL>SITI>T2^PdTKP-q}nNcyj&|F$Fj_XhC)+Yx2U{ohS3xt(8nU6KMI zL2c(X;Zlu&4LAbyfC??vDH(%NOGOHRsFWXkL@F@^$}(oj)GGncoOen<%ut8i|0DPR zWYm(~{{#B}$=U>*vgr+_5ZPrzc8Z+;PeIfg=_d(5vq=B~{(mP5E=lL^_(ezxi|oKw}$sw ztUVKNcGv5lf|tnKAemcuwtpBY{q)xAcD7}Yl3jHMZT20q{~!1=ssE9xybL;^2@uB+(xU(M%^sume|rD-&CdRx*mqOO0{N>L z0aHn(lZ$bQTb*KRip5$zt0!e;N z<57>)pUdA_RSqi-WmsJ4aI@7KMU)gtGd(V9H#U|KE`SJe3G_5lb!&=wkjVLpkm@_$Vd<{&1BgNM3^AOuUbVW9uv1 zqv)k%wT#Sa0sjBOlt?Jelt7g;CUvQ7U4^yf2uv%|KIip zyMwqtqm6dDg;;vJ!r@Nm<6eHPd+!{8@-mI|4~pL6DNOx*N)4oS{R#lcVW6oD1KAO{Me%y?c)C&B6MMp}5k$y@p06ao{;FA-`?Cgh~J=nXpXZLw}Cew6aYaGiJ~@ zaFlIQ+o9H0ra9RIPmucdrRVXk8SwvGT~cRgdv141r{|N^#2=F^$vMc9gdCs)koS-| z4MSa*2mnTimoJDs3U{;=lJegvo+?4ZEIO6=-wfk_gwGUdg^UVKBUnVhGsjwS9ynu# zM&iwvgbkYF%4wjLXT2#**&wE{K;V@C;2Z=1$FKi;|CdOqgj}T(5?Q1Eg?Or1peR4j zR<})xB{!K*C2}gzsTcsWF#y#5pQDq*B(AZEsR*9gy2$sy8Eax@(o-o_t2U=o0&~&- zSvITG|Ibp^xc$FFznm&I#E269S6bc{X7nc!WC(f^{+IB-q8~yb@MNM$eZr-scM9?U zAI>7%Z0~b_R2rdA%A`n{ly;O!>2wbMm{dwiEg&VdYbc^!Q-o+1Jn492uiqWql`4s; zx-4qL>1va$uacOa|NYL+zVB3#0QsvA1U|ZW?i2YAN=BSH>WO%I%tmyw ziC!Oo(o&sD^Qdi!RmeRuzy5B^OGtMnga=bpHQ&vHufeF(C}G|Lc(p2E0b} zC_I@IITqWvBjEmrepKu2f3N|*Hluzl7v;3NzDL?)@w&8=2oGcRI+h!JVOr%*Ewfo$ z0h{})R!2MOdxGj(|4Xo$x&{0-E$3tu(&57w->t!t86*h zo?xbAk`3cnu1Quvq0HZWC!mO#1pNP1a{f=w z|JgN1rq3I4{!h;TF&k}+P1hVrUdc@J>wP)@-}>|aPj3}C|Nq^j{7)+U4aeoDFb@NJ zG>O>QAG_$Y!Qc_IQzi=SLLR3H%K-=5m318 zPtt$v@JC%mzSjI^W6zptf%KoN!2f@a+DXK0qH>d0hhhkiz)sbc+)##Pk!{PS5knY( zr{P+^)VnEx|96?~f6C1uZ>B&>0XgSfVw@E)@qGx-0tnY%VUB@kbfNk+%-^MT?ulrU*k9^n7paG>!>utw^POq{|CvA^X1O8#$VAYnOuMV)ksv{aebG1q2Jq@i^Q!e%5sAKzZu^| z2frAa@<>MdHc-9U-dp6#E-;s2FWKKwqPOjGIs;yk)3>epa@&#Img96vNRVxbnyvGc zE-|Y`B%*^_ZoA4(X(G{q|ILk|8SWBV!xA6(#AZA7s>@99tQ=pPj7EQs<^`$DDU~_f zQJHf(r}BaS_mK8CY>l~}u%D0fLwujg3Z_#s29+(Sf7zNN;x8<9gV3KfO66oeieZQG zsnLb`37!>D(ZK(ANJ>Cz1-K;R8GwvPe-b)HJgkpboxjnIw+D0Kz3C-OY2JjuD6QDE z%ZPss$JUqTLY8z~*{M9>|1Y+s2(Yl>ecBo3n}!I8xd;W6&jG=^!WbGoO%x3E()X z7@akC_jY!A{Xx7r7rtK!iTXyHGTb#jQi1>9rN3f2CZd7TBcjIVyX$j-Qn{JeqmROJ z$wzDOjA|bJ8c|&Vp{KvXgzV|u8I6)Nd}BsB|I%zu<~z#Xnw4iS-Y+2n>sMD^B>JC) zfp@g@3k>V=0NeIX2{b5xF^ToI2M`9me0QhG#cA`eS8nFbaWikql~gcNDhdk)o=rjj zf2N%OwS<@>coC=8NM_|{H#z^?C=Hh%u_d?_!2e&3s$VHUxdOvuL+ID0VW8y)h~68L zZAF8ZvNc9ac}bJboNX(1IuCsM*mq+{Zhj&sZQCrrl#<;1rpToHIISW#KasQ^-CHK~ zl>hG-yfCJTe|Sw^t^Tp$?3=00BKj+%oWdiy)(An$oOeo~L1_aaQtJOn{Xfl*D~~_9 zKG@rO;t<&XTSGbHiRU8fne?DBNix=48xSD+H7qg0GDCkA=$x{S22KhOhLhxwfgCbu z$sq%<|Npxj@606uy@pWGJfT8{7+XlfHr0fzGD{&p^d#%DP}U{r|Ca|b)PO_!nbCY6 z9-wc7@--PoToqsE)>QP}@*v~MzGzU2jJc+Q1NcPJ5#mao%_1Bl zMaJf!$QbbddliMjpO~U-m76hSoqtV5@^B^Mu4PMIv3+M({?O+T5|9^vV;Hn-il{2%XDcQPAM7@n@Ob|*D5CkEXm#s?* z901ou3^-$!0RDfULOCIb(G(yKfQLgA5<_I5`3kE>2k=Qp1o$O(PSC8UG(w$-1JHg4 z0QmpU!zv~AtT>nmLGqKZCE|C9Jr{~SE5Qa(H|lfkoEZEz(FG**V`Y)|E`4nq_#LP<9`te%7cMDeD+m0mxpdASS!2j=`PNhM* zp_j-SYz!0i8=%X{MW50=MBpJ^Bvl3pY%FC^4Eip>OX!r44Tn;xGMK4)ZFvFz|MFF4 zZ%(5OGb%izR*HTNdy-+?>aPNwlhNo;LZ^s_^_dPi4rK5``6G;_^b3q5f&q<2Ge})K zB@?Hx@Q_a1j{^b!e-p0=CE(|Qj~1T|6P*E0m4ILS1AdtWkP1II{_`V>n1`nDoJo1v z4NOpPTXXr9r0fP#3!-s`Pp5O}4?Ok1=hEhr@U!dKRY2hR<%^h}nPSGiRanUQ)Hyt} z<$NOg!T$e?xNqbFNx)wM{u1!F_9xc|FE%)xlkk5c+U5Me5`!MuSb^fxQh9{DEf!Pv zAvHE5AbBq5|670l|C!sX+u1%FI+~>~XUvENpa1_FKe=3tH+uceIoby6?G5Im{3e|C z+>3VySNh$IRuU0NHc~)b83U-8aGJ5iQw#0(n~c-|0N21Exx9WoDNtXh05^^zeGRV*h)|(B|^tD-G9%V*j_^{(pL_fc<|vD@M*$ zaNw$LEHRph6I+#6sxaG`RO=917isRMRd6sHx-`7&(T)ulVX|MFIBGVc^OLq`zZT;E zUy6udT}~_40T{8-Mms>R14!(-_DRPg*8zzAFZO>+*fAU*0a?4;U zwwhy~1ZKM0>Ra~05_VR%41)dt(eTJaTknzw{yzsBU3B**36D)%7*IMK9itQVpYmCAWO87pqW))e$uRK$w_({V z@xQol2}7#>ny<;luBl$l%w1e~i-<|rBh*G2)s4Efj^O;lwm1>}hen|KV zp42b~s`CHu+jpR||EKo91O9I=|6YINy{m8@;MKQACyqrYD@zfN78WkXyE`blKuLrr z5c)O{lu6v@Qa4YYMq?^rkG?y(T&(THar|AU^U1&Q`;XsS2PppL3kr%SDud$c_N^`i zt^S|aAG!CH3Ta2xaK|efuEj_@4Eg_m-06J6wjv3s|6}cTG(vV8w3+k1C1{!amX7TI zd1P`8l{^rIHvAJ_N45!w(r>gBLKL0El3hs#qh+E6=A2g)F{hBC$Wj=j+lcK}pI%Pq zZcm6ElbdbjXAdl%G$7;@HFw5>yFpWK13h!Ja(o*7Fp`;u%w;4%{m+ts4RBub6>wI~ z_x(lTG+yC2JR-p+00|W-qtvwny-9;j%HiMJF*g7>19&%De3HUhgzv#T+tnIqmSJFY zg%{94flLX902oCSB>X=I;s59M2ATDa>~?KIXVik@{~wh6Kf{t4gi=8`W1fBC_HAWC z#@mDL#(JZx69oV%`G2#^|ND^9{)GCev5B;asyx)PQixIp?J$(TpQD0rQU+~h0P(+9 zK{lKCl*Ip(=Fcw(J!U%(jbkeT=D{e{sEk9pdH}_O>_9ZEp4(8wvyd|Agl$kGwiy}HreoKZ}+Ci}5+8|WO|1`7QDeX0HrNPD>r%xJ!~=exUIP)yIpgWJ9S zOViR%0StK}k@^dhyXMGx{mKY2XjZz`kL5NnZ2z=k3k>-GZ)O``)Nw_|p4uJdy?%Fa_xz16WY9F$MRVZIh-qE%MAdPRTkM^Ai8X}_CRIu+Hr?ic zW82GrtN{Oi2+2Ar|JBfPIh4{Fso33toB!rR8t(1v^i%|KE>>Hl{8zuzdEkO^{RkCl z1#MmkEA^ld4s6GK;A|M!`2>IMBldHEBQZ?|5LC0 zpYKX!P>U2jk))Izk>Mrzzdm7?TlPu*FQqLI^(dM)s7)%@NR|No|8@1BWg?+4XypQs z6eK`zB+^$`3JlCt4gk+4*$nvqhp@Bme>b{}UkW{33Nt4gmN}*{~SUU*Y@|2k=V9xDvax z&Iy`*VI8oXfik`xWcj}{Q?sJ!GNX_ zGe})KB@?Hx@Q_a1699q#e^l)M)U>y#c7{0_i4ibq7&$+wi~a90xv(gxPZ&QSX^Ywa zKbCJhQVswbmXrg4n~?XARhmu3C)K8T#F!>%Y+b-Jdj~S<$O*ex(%O@SVZI7_i8^#7wN`tbIe1p88$xFn6x@1?of7|Z!-wh77}`w_t9CO6H=ow8cp%V|h6 zy#|dm(>rMFX6ITQyV<#FhBTib!jd!x#-?=-t*=k>>pIT%4gCM(KG)q4Xya z0SJ0h08B0bR`f$C#Nsfo6rX|d2>SmA_O`CZeN_U0x35kw@iq)=q`*C@?AMc-SI#Yf z0Bd75x)&2#&GuEcN)p;1v-VT8K<_oQzUKRO?)$U8b*g0Bt@N5ktCb&jnZ?CPdX1yi z^CC+H%dDNtf4juaieFLW+#qR9+C9`_HS>M*^IB%fW0793Y>m6bw(_$oi5r3c|3X6Y zDcvU`3mcI{>%sKPmuh4TIs($Hl5kFe0|*JY1~X79N`eyOiBJuiwAh*+aOH;Hq_!sT z|Ich+w^TDFnEa^p7&RVxHHz7>H;~eHbR%kWG$U@KdJ(nN@{Wj+Kr>=EKL+Z5;p`0c z%&e8ytr}LL0{;Igg%ZRi&J8S9D{tWu4s-N??*UN_@XDkbEkD1=0l)zM*>TZ z|H<*cR2?MTf+(XtNpOTuDgPkzM2`Ojr3>)?PYw}|04FgSfC;5DTRkvjH)%|!HuV^a zD<>1XmFp-~Uibvbq+K9RDFg1_WEfy#bZ_-0jB=t_2=YE(MPNTm}CB z3gLg@{{h?yU`5NQauoizOu9rmPTLNwhW~$7TfZ#I<@ldbe{%d!j{luG+J@tQH$eaY zV-PF39V0pZ1JcqJlws|tzrs4h0lbpL6?RV0>>CRi`EvZH{l|X}0ssF~IsczpK!iOg zBO=xi13(Obb{GJ_|KB0?e^UMjeQ0ca2>?m}kl7eZl>;{Bi1r8=SC#B86$k*n0q+0W zx936|7}UPORH-q7ov;t?hXq2*>BtLyXimlZFrx_ zDMW3jXhI=sJ4sK(;Wj&S%^J@+D~G;wQxtKdlVXS)o%BSjky(d(9?|-e<}F%{^!O!i zK?!Tl+-VyX6)EhSy3qbhF4kP#;IAbA|TZv3;d#42Elq(T<gmuDf z2qiyGC8-tom4XZS|EG=r5AEf%G98kPfHc%4xtiXXR@Qd2iA&VTp2?5cLRZs+gOlm9 zRMXU5!ZhGkI!sl-?c2crKQ~F3BR>u3luAiWO^BHS&UT%s7{)?!nBv>|)Knz%ZJy8#}LSTznea zD!+cJs!E}m3rHnu<$1`DC08xjTG1(i289JO!N)0T3;h49ve9Zdoj_Srka+=~OiFWP z39c*&1nPTW`Sszoe{xquwN4I&p_=Vxh?6 zWdMEKf-iUJ0e7*1QLYMR>6U=aTN2k8dlgtqSF_SXn6C_%a zhFJB$|NkKUE=495nS?f=n=v|`Wv67~blQk{$1#;8O?rq^WB*8+G^H($*Xqa;!2kaS z@qu$vJbNKaAysHk@rG&iO;M#EcWu9bNCydy1&P}BW_C|~3-T?pqq3S7x#SWjRt$qj|+FBl_0zfx+a1jH1; zXwofAzjq;u*1PshyxCoE%RZ%rXZwfY)dI&3K>zSPGCT zJIx8i!ZSk$UL5GJu!M2|p9ufzIwxq>QyL)=r2uL51xSJaf33GQ7jZAC|DYrX5wzqd zVSOZ1T63uxg#fqY_TN7S{Qv7lBjkroTkNWU3i4{wpfyuTr}=Rso0^FkLqr?-IhyU~ zYEu*V|2ND@WtVV~2JrBLYlotw6fV()OXOf{Kr;0qr3U1gqm?JYSf;v38sl(1FS*}E zleaits2rcb|NkzxWNeKM=*l^G67ZjcT0g&nUOU%*!%~7uiG^WoYoIWj(JCRrK&Pu4 z-A${=5Agp#tId7W1VGffKpZOR0LsKwe-udYWKuyki%#dY{>H3pZ>jqK_w75-+5c1f z-vR$Omw&In@x6BsK63BXx1Kz8EIL_P!To4qVKxQ#IRmpCXRFisl&|{z$KQJgp!l0F zC@7w&42rAUx4JOgcfS6}dv7bG9aX~}uWYy$Bkgdf^S}V~|9=tvkBn7fgH)mm$rx0H zBLyz$fF1)UY~pCFVe1>7QTtoJhJzZVb?%Ht(QJ)0s{??*|G#4w9>^EeDH`mU=}9$1 z4g@(AHHZUcqr*VW!$K5t7Eya5#?T(}i}T|~HaZdy&=zZBfbY%@m{Rxu@BJp%bzlAX-=l`VsW)fFS{)H){i8;@g z_I7r9{Xx7r7YS~~&i_4dP~#iz-Oschm8DJcxg(9-V>X6$E>R7)fSx&8l{S7x^p zlNX<$|Nj6kjn#jyI~QIByy3WX9`NYb$jkyD(q9=~QB$1|8Io9DePX$$C=aqUPHR93 zbAPB5`2XK0ie*l7QV0#^*LxACJ)#9#s0wJ_^c^kmimeH%iHKmTIFRbA?!=ZL@93l< z7U2K?1Bq&*jh#%PlB@(9XBJyHNu-IYM{MIUHmwfa(uK4KkI6`Sa5>X{A>4y&cG^97 zxZ8TcF+HJ`8lV10jsXg<8H{>K1>VSGyg3t~{BDgT_Elr-E8zeC)9`;K)G+rp7UDrE z+#!WK$|>BDFs&=Q#}m|-RQ}KJ7Rmo1<4|>gNWMWAci6TGGT1$q32vo@{XvW(t7XA8 z2*zlRs*IpTuC;@v<{YT9*A)d^AT~0{_w9spt&yGF6T6iK7(ebZi>i|>v=&(^a02Sq zocV8;*je!_iUL>y{{Odf|CX_Ukl^y#%acpoYNf5da!hVnPZgx?IOW$`8je-pzh&3n zqG}X`M8JOw(qmxB!2ka@uVQ%l!po**Rz)n*!@QPETw+`KS)FEOG30df!8^X02iJsq zTB4DGZ;=hsM2+kOa0m~=0*i{J(hG9~|Nne#v)|Rl<#IEebvttj8Uea+0)-Q+nLwv< zD=gCE@y1@iJGfhmTVa9!|L4^DMI<1VvXl}kDx+JIKpNobV*U{YD-lJA3g>i38fUr? zU{!z+b>NqvK#2o{1}~cROz>pknawi32hLcbk%A76o(c}$%~7WW=2W#KNJs(T?Y5)= zTS!MJetK(lJ9BN37o{EA?7Nl6pIjg8Z9Q=a&H#VhAO=G_`^@DhG=N7KP>O@^P4L?Z znw*K+xIUL@@E3hYF3`(hF*JW{*+o}10SuhY12iWml#SZRd@Zb!Uy)66FvOis`{po6VOB%E{jV)~=0O(I*Vm=L4;(DpR=SdZ?AmoV$8(E62Hu%b8 zeG+1vnIf81^}X4zAN>FS*xkOK84U^rfU9I;7=I4-sHGVui(sc@3_1dm^y2=fc+!|^ z{NAUy|Fd!b)%lRz|Nqyl{yzf{$&?t{2~Nnywx^mGOOZoXK_j^?NDUZ}MGjeYItTth&i}W_ zb2q>E^ouy?F!!jV4y{=V>R=-l=-A3Qy5&&Qk&Bi!f zdNjPj1;3 zBYV7y)n5fV9}lcj#lJCC{Iv!*^plqofdBskrY>=nM!HHG$QWErj22$%?p*12+foWg zi#`*U!uXN~X zpc@{v6k;sBF~BDVK>5_GF=Qed6|w}_|DA-Xu#+J5{{bYF3v9W?$P}snAD1Frr2app z!3rb;@c)}|J-G^oa9N4SOdOt&{Ri29NcEBWH>Qk6Zne~Y{{i@apPc_`5yi>*pHhsE zc{u?51_%J|+xOuP{3CyLg}}=%yl?lw!|#7|@x-x(m9uxYpk71V-|hCc&m4)4EgU%< zZ*TNA;gIT?BUdh8cx?H|*(VOI4DWZb?K#_PLE3erw|%X9{n>bMyVrk-+y-;C*Sis~ zZy$zim_dIpMy29bCT_a6eq*=X9!sBM9XqsqQ-nr{@m|aDgF@J#jUu&o8pY!>l7aK=JX$D7)kLJ^PS zjxx`k5@=AOL*SJSz}9a7K688g`d<%x{8Uf1YsoQ{-3`~Wk&GV&6Dl-pxy{Isr)0yg zAGE5a_s>lxaxOMI z9IGzV0Q`Rmh7*T>60Il>zc~Dgeh53m6Qm19?_Xk57``#5Tb!Gtt=1@_r)KQt1vXPJ zT1XC*B=P^wFLl&Et@-<8trCBIoi#kul1(xkg?$Zko=D#Dq^i>tpc)d z32NZwDbNFqQjmHDpEkP3#-~Ov@c$bUBB)-}q{G-`rKd66f}rGpB!XN(kn$=85%ADB z^4^Dp;%sPCuOl$V!R*bwcy|CbNi3tVoeQnod1>JPPfQ6*{hJ^ydE`jwFvV$t!sOxU z+!>8UxfCEYd@cnDr2t_$1qgxvA1ZbK&*P@~!~x-b`jZG9q~fFip_0=CK8c_<;=zjp z{Z&9H>(_{dT~6l&&Azb^s-*xS?95$``&$*NKH&dPYG-8=#S=hahHzz%Q^BLC|J9m3 zP6`1cN)f@#!vSRA|A&o6$PXI{pc<$-Tour3UiF-+bf(k%xG6h$%1o+~l~&T}7~q?y z97o{)Hx5wTg<6(K9D2x>z73dTvKLUBY+*+cbeS0=8x zO~p2Co^op;o7xtioTPa=)5K?z|Fi!<2mX=2IfcM`?!0es;Nkae!SUj#nrx}`c=46p zxKGX&Pe%gHo-@%w=`xNyTXG$#=tAdz-!cp*F=n1Mo@<_=8C>qQu}W$ZO2Dy%=ez53 zvCbE6-&UR;R7vh`tPkP_ui2$qcw&M>t1qps_t&@L0V%)a`^@^#V<{zZr$n-0mV&Qr z^UJ(8!&ocW|Bt2A4f8X$JC_hBHfDl38=2G-LZs!P5bEp`%3wOHD(*r^&`^Sth-}eG z6iI?q#y-TD35y9z1|AVXNg;2idGQJN|NMUzMwi*VvEiwK?8I=w35Zx|uCUd$lVfhR zMhi5{oHVni9Zs_&M+?;39;fd>njeve(6cQXoClqa=7(~5w}u4( zXEq7D0BIsqjAiCgpUE3}3@pNFz=?H|(bzg{>`ckTDS(kMYhnEnYw>8QPj8KV5iig* z>cC6%DQwH78nFLAEu4JYjIs}TZJsiXmWZCW12pEfhoS}c<0uN)G^{~1p|M488?%-b zEzr|tq#N0!cV-3xa8Sww%Ge-jppCz60gxFA& zINP5VI-PU6W3+~-a5ByeAR`b9VC7ZBqte|HwSW>}kP2P2hF=T@{Qu3FH&2Z>0CB($ z51J&Fg#`T(`y2J&ngla4fXYK=Jt(*ZbF@Q1OMm?TvGroBiob zaMlRXtA0M-81!nkX5jy~=0~8U&?-004)4*QBH@ZTuj9b63JF)xdvtcnfIy4`=;S_G zt;=jwnm6T~oCdpR))Ygt0{(xq@`oMG3{R$~`!Ci0o|GYcnBYr(`js4s7&F_%bXJ^r z@iZ*{3GI3Y93g%WEl{^Bn#f1vce)&z0{s86eXz(-3b2s|47C@BIn!x=7Lxp%L}*td zw=2PIpwoHHznS&k8}R=TEP&m z)d>T;d4X(B9?z3PWfIpuFtdqr7XmOFH8k-5+v2{u+mUC0K!(6XQy(?AbY6j+jljAC z^X8)^fxZJo9$FU5+QHHjHPzr6-0&>mg6pqvtkKgs8IAsAcJiL@?sj2|eRyH+ zw07F{vT)cs1d0@V7!YKcflkdz*ZT2Vzjq5(-rJ6){$4rt_Y%^d6i3B8l!Oj||Bosr zv-ytl93nEQzgMkH^06a4t3=@W#zG@W{k`hz?y3li@8I zlRO^ zeN$4vq)G^t{vt|OR4Mx`NX0kKSyiHX4Hi!#UN<-Ip0yb4ebBVPqm+G z)KA|UK?ay`rf}v?t}tOsIa70`@p-C<%1iz4IW78)mi?YP_s*#L-_dcY|7}^bPI!8> zrAzfIF`-cX??HbrMlsiwd`))MaBDQAG>g>#?sV)JM51<#(3vDEXiYQemza_z#5XE& zAez%D0Wme%Y}yz=9q-F`cbZ(rJO6suo{2ZR>s8fDW_*fDh{syD{loBTfwF^O|38|` z%98UxsX<0Ltga%=q7j!QkzkPXKb}Mz1Rt*kOvzx{QozNdMSg|O|9s33Cz{#B@TxrB zQ=?>o04&w!=zLxYp^v0X`d|Cg{| zycp0}!|EBH**>}7A1$qOXEcgtYowW#-Ut3)gqdLNPftPNM(*xOw?r%c(zz(cYNT0W zRwF$qXEoAuRk)FxE!n9g=%PPK+yb$vhX6g8Ht=;SOQ8unXP;4#hA24!_zC$|h^a&w8*vOzY|D=R9Id=1$snur2Jn))8+Ha zJSqQ&^qmR(Smtjry`xoAsh#FWY@xE!!2e6V8>;?~cg=c9Slc@KHqjwO$tKT`U>SId z4Cm~eLV##1GB9?{<@k>r|G~*El#;@v)Ar*(E5QHDQvNg12q2D(z`EGmYxH&Z`AJ>2 z|2=yQh!VVdG3bM8-BzkC5a_hP_W#vR=goqdxXfKwn;^eTlAFw9 zY#36&*#y8?EK>iI2Ik7=7U2I#>VFNrp8S+)s^Z`7^RAy0seoxf-n4$g=^Fpvm2fS&{=nHK{T^yW<}|Qr&~bS z=U-g!Ux$Ny<8I3V|DPhzKuj*XeO_t_(~G9D8tFAXr4jO6cKhaFw@;~g^=AYi@c)xc z{@-jAI-X!UVR&Lp580X*W}QoB_3=WlJ5iMiIREqgi9|5$<#p6%BM68~V#HPo2_zE= zB|l5y17i#jPzOYCF&ZIbFzA%R2S`V2wzrg^7Xun=`OQwy|4*Z8ghRecJc9h4mhHxY`M^bZIlA1G>w0z+Iv%tQT-y|e(RJ;uFGTQHD0RMl9Qs2mw_Ui4R z{hwcg$bl1&Z8tIewdrRp`Vx>D=(Naz6DHWCM{A_vsT0x8-{?Y><;H9a0{_2**#ALR z*LW(G)W(n>ax{--Y}ZqIjDgbl=3cWai3E6}wvrO~|EZz-j)+L||2#fX{uqSZ|BY2R z6$4|yad$WF58};fet$IZ{}-hEKO40lkegNeB2oZMA)nHHZVr|E|7a*0 zfZ3>>G~oX)l+rvS>mLP$B4wS?DnmPns>WK}Z;XTJiia7CYz@cOm*zooq`I`pPgv#7fh&%y1o8HSX=~^ptJiU_qE)_SZK%1^9neiFi|>K8l!X@)1{3 zUoHU9bnddNfp5_Z0G5_$oYwTYd}4H4<%RLBFtC{uw@$eLU^Jy5weKsM8MH{pQ`^A* z&+0Eq3EDj0U7rh)E*WZ`UCgju;-fWqW=9+pbGVLmX`MTxxnm(qWoB3N&`q97*01XS zB(jKwL9sBL4~Yn{ZSRzj83izcgp}slZi~*akd9FN^w#QjW}_i%Ti~9!j;@y$Qmfo6P6%oMj}M4jI4f?MI)Rw#p2qw{;WPZTvs0FG)kD#%4p)K z{RN<2C-z5f zT%5jbNexaCaem9mWi%h6<+!#Jws!1v-uOwcb?==3P=4qc0OhGEfHIdy54!)`;eS_< z{I=j0MT-OgRx=T}&}QpQ-vc5k;gw1KA2KK<1k`_Z#f(g}giwh?c@_YHuQ>Qd3#a*J zswhe44L}~un4^fQj$qpOvcTrSnAILR_t+DZyW8jV1!oJLz7V;HwdWA-L5CGp*ZL3H z?}oF1|F6Rfb>JdnUpe!E2OOPvOmO{0@lLBEK0G7OLiNOL8bxBvyIB2IpmTy|{S_Vy zjU?xP=i>bD^IAZt|3^Z?(eKboHN5|k!>jOGK+nS)$yY+aJ2$KvogN4~SYUz&*{frQ0?FRrM3Q7`)|Ev-@p#NWx0@kSnq%ce5VL5WkN1pJkoX#ogZ6Qrpg$8Xy z0qYx6DU(ASu@t6QR}mce@QncPwc#kDs5)ky#nW^@9cEx+^3j6p5Twn(|6kl!$6rRj zk~TY8!DIk-c5Y^{{k6yAL9-|E6atr^7i~vl$k%+|PMq4Bwv)wbx6*wHtCb&jc@(-5 zT%2_MLj)}+v%(tJ$rQF)`EQrlS@A0hVTmU%zHfeB%PeIs(ioowk0rL1pH)$goGv#4 z|G!hQg!)576ku3>Wc0%I- zN8tZ2ttCVWuNYs(vqOWlsc(PAYG$o+_jn@^n;AM_6$QU$?Ps$mli(&rkQsYyW$qI? zA(7)sGs0@cJ1vOMHhMy=`xYRg)BK)r#D@V~FAMm;XOZ{A=UVn3r{648NN)MnSYVdkP6R&A4wR7*TKm<^p>~g3CcBD&CcnwA12N2o%7 zg()yJQsI?dWp0{jQKtmNlyneyrOJ?08PZ}ot1<-o|0~MlcOQdSB~0=YzNEP(b_5j- zVZ_WvOy)=I97UrcF(=*~TX<4d_r(&x)aw;&>)tA=R z`|DdV6aum=T;FH#ED#RUUj@Qb`ZXMnDy{SJY^_;U8CUhc_H{nmQUA2%@0Y&jl`lB> z$i45sxww2RI$2q@rQ-_=t*u!FTwqd<-E2JE=p@A9M(1Fs)ksqttwx$&Xf@J2IjfN- zg5pMQwj{-xFfjc|TtHqVxeg~!w?ZSenJ#Ccw0 ztTNu%>vsot8}R>6W%d6&Qpy-wQbNVR!YZL6LX+)U8A|iAn(Ei%lo3xsFT#Truv2`^bmhYrnn`87nRc-|S|MFD(A?Ys1 ze-)wGaSHmAXh#ISH97vv*Z||eQI7xGGzdgV$PS)NW|RT{_wxmFW&h7WTK4}o!2@V# zqTUz+YJKqH7c@7*k}R~-dFbWLYMI134HkT>vPK?n=s7uGmN8a#MMc{}z9t z#lTJ(Z~TS|o$_8z0HS;y$I!glTMdIXB56{gMF~;FZXbp`0v^>o5r()YRM(SrH*~&V zYUkUgE$IK7T%1;$9N40RXVfmyuekw+5;`ZN(VxU5!UoYWh$|JY4PHvOAQe?LrPJ|A zr|sFT!2fqGj_Kd(Zp8Bw{Jtdn|M}d%Mn?QE$^L&pGz0(Nk^Mhy86inHKO(T@H{6)0 zjqLv!Gcd8*05rh=TM6~2asr$A#8_&hmG{)Gcze*`5KbjHA$X?>1j)#!?(8)Cwy69| zz0mJ%HJDIFE)@8G7pTbW_RC?&*eYrx z!5>NpGg&9MmPLBO4O+`drmgaI8r4W)I644zZg22nuit&w`k>pZXYmo>|8-CO53N|t zqCH%ZJR*xvo*9$N!yV?UK<5O^dP>-aLApq;xrbs^vPWx3Pxff@?9l@MpX&{}*Y3W( zw|Upv(Di6B16(g(r(a;M9*>1<)G3)bg$0s3lI;^S7#|0YlI>#~V*!O%j9Vx|fd9W% zY2@&kI{nHB{ab80m2^tiNK6#OyyE{SsJH2E4DgBnPiPD1xt2w-Glg=FM|9`c||DTO1pC3I^|1&Y#GP|u* zE~$j|0-Z|z&)L*J1^fRtphn{Vw$YJa5_$X{YLQs*mH7XeqZ0ogN^cLPOxb-iuj#@ynq>%zp^8c{r0c`}-4)*`MQ|d?9 zmGl1ql1x?(!9yGb!W{^DvLh%vf{K0!g{1t(#oB{5Kn0z4IuCvvHzz$LHf!OT%?ye| z+~vYEqfWgFLw^JOAnF_3rld=i`k*uixM!kpWn) zZge+ilak?J*ut@w^YmIUn>bkYJ#fZC?DAZ{d%gWmp9URvEf5geeyj|(|34c*Aof3z zfaE9P6GR{$e)Py_17ETK#s06A{r|v+QVSs<2-~j-#xR1O@9uU7@#eGf;C4^0|Ku&q z5+Zay(u8N_#1<*qb4&guFuc{uf6L!| zO?*M<*EVUL2c(_KFeE`uY~46~EAH&@<>##T8>4-eqEMxxF*Ly z%EzY(cG12^3tM%1q}T7hYkdG(rjAkw`2X8x>GPLw(ZFi*<3~yYDCARk<(7R?62PM- zkvZ+&4Wa4X2oneV`jt|{g~FM_1na;K7IQePs8< z^0DP=4*XqOT|2oDU5s~kkV8hL8WIH_iALWB);3Nc=j5DXoX3+)T{zCkIl=T9MU00S zEif)=6fwR?6tQEn-RkprN-L;81UY_8Znk4PK%LG*cR>IDHFdO;c*E9|#H05pe1tNN z*ozkVYg|2zkrKkFdSZQ00fNL$?cL@f+d2jvS)w*~N;Tz6?G*U`oAm6+k+nh*k z;wO`z#798nEp9WVEuiT}xy>p6<4HF(9TWKfuaoqj6gNf0_DCI|B}~FK`K-jb2@#J3 zS`iG0;xteLnPN-iQWd8rX)*>CY)GutQfUJJfA>(B!T(X#uN?^Q>@@oV$NbbH=NM>O zI$|Y{%$ybR>T$I^NL1XUwoHC9nY3sQ@c#!raoX7kf|sN6MYxT4ysIl%v~ zX6Jt?cOu@r7;p6YoAZ+xJVz^yZ|=pr1IP(RTY*}>W3_{*p+@#MQ86qD-`s1q_ZYy6 zx{vVk`t{@_k%dd&cSFq!{Qo~1BokozzN?xF%+LrA|)~R`{`KkI+ys_8s4(^`6(S_?G>X_=E2u~W~2mb$AK}iZ4rCTNygPMkoO;tjt z<5S@!ILI0I8$*Q(@-#R_HONfh_&Uc1|1I1;c@psM)a_qfmxeTBGWDE3MxILttR zdM0VWYIUWt`|F6_du%n6>`rKN7{+}z^6A!RZ z2%@|g4y-HGJXz=L*MW5{u#^%-UWmi}fAP@zbrnka`h$$&m?OrpsAaa)5K_uuN??OM zRkAew3f6lQt6wq(2R_M^DxZ31jMFMoj6wf@Uwdvd;rJ7f=NQQL1JcfLSG9YxMr4o~ zRYHG(PGvvF&O<~pT!lZI9vT4t{|Bb}FGKQ@0FVk73L;=1W3<#LbWcPFoi>`Z?8h`_ zOEDm;3+%_JJh627-#>jaV=R>w-@2Fsq1@|nf z+f4}s_X9hbp=MSh2O!GtFoovLLyYfxL=4=}|0Ln}0LXYE3~iT$_Vw7%Kc~dN|Nozq zHU>^F8Vu9+LhEIvG4zyrl{)E`O+ajt60|jRQGTbC%E<`Wl$wh=>A?R#m>jvfB(>5j zAh#LQu-ucB>bBx&DD1Pc8ab5T5Hc1fv3H{gTRFi0Ka|1h|A*0CZJO}0%+5Yil0p4ZB7-MJ708wBQpQBe zn4~-E4Jcy*{QsjVS0mQO+z-r6EkyEw{v@U%k`0nJCuIzzjKPrISS?!27!0UpU#GzT z@7EJDO1z3pV?Bx^O^Cd(tO?(gJ#HltK?UFt?v#u{(TBy{Il2EA*_0G;HUY43lzNOd zu*xTF;Qt>hllG-$`6*hSwr;&|A!>KS3PMa4Or3oH5_9qt@GS67x@3jlcnKR zHM5k7LX9mh=}*F%o+V4(TuKa+!m;#R5W*$wwo72s1vh)PT&!ky!v!~cwp&oMv)Mw( z(IHo#M8Gs!DC$fGrREm!|4-mCB(Wv#TNM^4z``Or{Q^sWf`eJ$8RK{^5?dsxC6VNO zu>R5j`2QzsQ~#gv31vM*!;;vNVz&}eGK)^DN!P$a7*=IlH41{1#FA$w4mOE>?~LY- zg$TNuyoT`l)&4&*i)RJ{FSKW)O?{MsuvMd(5;CJih9)fu0CSK4u)3XDugDeA8GjkE zp#A>`KVQ!OE0L%E5VuGm(@_fuI*k;7638S`6fkta{{I=~_`lYJVMD^97K@v_^pdml zOlS>x)VAUng{KcDHLN7Fl0#&T8T z=Ct7$T5_lJG5e6eBjG;@|D|G9{k!p8EN9xNjH5^u|34*nA}1?RKb3S!CQk8*xLX~*4&?} zyacV_|NmX2Bc!m!rZ@nIJdkVHNH<;_0BR6|7{Evc{{MSi{ZFm`!jgmprSd3^oShT7 zMSqfk@$w{*alNVXOw&fGQN{5|r|khi;QxOo{NEytCmR4*RZ)hwEnun}J*s04`2X+A z{=epbL;$k?PwXmUI5se7B>Vr^m`d>p`u`uw{XZ%HQ)NLI00{>vWFUnM+EK^=`2T-H z@c`NXm++r9hMKSNrKYXtfCExvkd+7g|BnFSW2nCKFRu5mcek%UA8!nLExux23YkeE zv-TG<1OESYV1IL-+AU3t8=b<$xY4-*!D^%hk*!90pM=$@PcLZ2WHr(g+PIOMEjgV{ z1z`R_k-INO!%7x>oif2_!b>Nz!y7}7#NcI_S?DsoTLtx5$8~aRS){j)qqUr3D53Io zny@0JmC=5p%H8PoyYE^bbbIwoJ_7##$3wnChJn=o^4LVVMZ%iY|1!+t+LmL$QR;u$ zzye?rVFOQ)`|j!@{lzGR0RR7!p{_}K9`#=GPT7N3)oFeK{nRZ;t!wZd&KkWqusaz+ zcmy9IIn@7CcXpax87x1gT0h9|Nj|kmW^%M*lx$h zwj{M_{zvTXCba?o|MM*W$0vnZ=`kE4wT_K_l*k<0fKDC}J1KbMGxt(K?s3-JHz38b*v6;BC3Lam70T2Z2; z5+zmiQ@&waL8rj~|H`FxGIeB;ugz_wG}}<}VF8{6ycYeHQMO9#5+Rd3BEV0cmD9O1 z8cUDClYW8ioAK<8Vst{rpwqTU_~u@-Pb&pfbdfA+ z;QwEi`@d2trc9uKpNM2UjB0h`2YVxG%xkPr2bbX44W?v zrTjm&hp37J{{Phk;iB1;`nQAp0eh>M5~`$AGI5G^Y}O15gtuO^iB?O~Gj`dk1;GD* z6J`G`(+W#Kt!9V+Bt4pKwJy^AZL4*e?r>YJ{I^T&tjPX2^y_f3{eZMH%p%usd4j?K zV8mO#k~8o|vWbCX0UosI*L3(PH9Sh{oFLgZ78>dNOS8FtYvy}B!2iFY4L$^qW~#RC z4n(n7ao3uqie*d1HgI@AEV)8yJRwnxDaaUf+Gx_xch{#*yl;RDfDd%Ko%_1`5AXY7 z_>ZdoUjLK_4nB16)o9_^;>y`OTQ?3vd}q5MQ zPAQ5rKOFe~cTzT?WH8-%3|Z9xPgqk}6UC({qaikH>CHTvD-BCjQIhEMkc8v zikP57#E!|$mTdG;mG4@0p!;8g|NUDnY3w&D(f^fnN>`d0H;z#urFo<@4-f@4Cg6$D zvQ4nsUBWI}mIwI%_nGs*DWvKaE86I8&L&zyB#S~rh;lTwVHm0|KC| z(HW2j{+IXMdF9yy55I2<=5@T9aN|aA`&#$0y>H|c6Q>(5 z+IF?qyAiK%9|pH&(BF%ZxxJFF>Du~@UGte`DI>83IiA+ z=W*j*WgyDb{VW|F$^Y@_>9D5O+8uka@QlV-^lJwDiD3{h1N2vc&YjUb;>(OQs{#Zn z{^#(&XQtH(T27OWCuj+?BH8HiTc^Ix@)SyebsBmlq)EYmfYz4udCjw!)6p_Lw4uK+ zP=hB_fKbT6D~6?ubxOvdBcT3E$&g9*|MwpN``;P)i{Z`1-2zgi2J7p5xW#rzlZpICY&dMJvxq597crk-xSD8CfrCRtc& zK~39?o3Y@K%zSD%mms%ijMFO8e-9_;e>)F%_V2*I^xw-byz)f{9)AC$5D;Fd(ja^` z9^CHrUn0j9C$^Pxn^Az!DhFfc(Xb{qMc*wksm5e3 z79J0GI-mMs#qv`BV=9rI8LJPe|FJ#(_P7%o*GQbUJ!x^S{li2YpWYg~{s+YW|1%L+ zz9qsl8vE3*Vb>U*nb~+`YT~>kQW(R}(>WQ9{v0jHPZ=BoQZ1SyM1y=ohyfNrCdCfjOiL~VE zY!9;l|Nj-{{Ewb|KwazC>SYV)OWe-i=tAMU>F~7=5(wK~n?<=g`N{|8eEG!VHQw0UPteDiYx686aU;@tt*HSym)#2dUBH3!lmy!c&6|P{QsZeKW#ZfagQvDH64wTxJ)H( z6N9SB!!!iVzOfLh#V4BspA7i_k5kJ$Kn>!T8TBWdjIzntl1)a4|NR-St$-u`7HjuDLaTA$)3dVJ3xVwiU0sqimEs!^EQU z{}{tE{T>hF4B`$Enth8pCD5R-K#-91J4wIGs3j}Ek+A%1_#vH4TL1eeJNtf8Ndoz6 z3Ism-$?ttY)d+v|#PYG~(&){F>bWkI8oz4KGE+mFyTork^%{QqA$>bz}@<5W+wTPf76 zR&o_uVtycO=(3O z?7)l59JH3$R(@8eSv*7wEHFdO5ldW=Qw^U0nX47pPntqwlG5Bk=zp zYVPw$8{;ZS{LjEb;(rqVYft>IBm4hD35eWv2{KBMv1xI!V*CFOZl%%zzC773m*pHnK8;d?sMW$CV0aUZ1}1`pxkp3SWhX?xicC?w6%;WXI+5( z|3^J_@NF)R#}uiM?m>KtK#cbBaO@@3V5ejZN=1kj8gM-dNuDw>At$N@+<{sp+MsP! z1C(fjXan&7e{%#PLt2vm2k@uxN%V|pB1?~XWt;{b7M%|D8Ldr(L^%*9VpLBFkA+0( z<+#7q=Fk`9|Ew^6j)qQ+5JvDvc@g1GABL6lzlOLexB$Tcwo1Ri1VAvLX~Yat*G|dA zDJ(D~;*Gt2cW`$O&i_8}C#gk&RxjuOl#;idMEaA20}%A&{GVJhtmubONIiuj=>Pj* zX2_Xv_FQqJv*U^z*_+EFx+7|RNjI;pM!JP;HPSs^+{n$gj@ODfJHKc#P8J4kqub=D zt&Z#D*1~1llvj_R@FtSp9>0ZJK>1Zc{jW~}{@<7Af4WFV0X9XVITNRX7$IA#j4Rwz zdM1X?XkL*jiZ0hjM%mvXRs%>aU&v((7xJ6Dvm! z=HSS|>UNgdiL5?tGG}~mpExigU-7@x|2FVQWt2#Ry2|N{pi@Lq{fm?f+ySuJU9Z0d zo-8D2eOv3ce;CdE%gCxyX9D z)ZKyVUh}cky`3FNXWO}vrSvB<&sYdfbQAdht59>?za`QDD-l+PJJ2*5#_EHrp$a-B z%7>1CEGdx&3QHa<1H)+0z^u15ibo$gQ?_nqNIgI$-P5 z0iU@&ZaQG6bN{zAaIZtsfl`~LHNtQ8rR3VGctE0;z6HXwa^fMCc1{GdZ!ENoS)~K1 z`rrHazom2Eb@-S32?P)XUVrnwPk|cauSU_rvBj0MceZXEz7_XX_SBgp(XoXihvV&y z-e!0E`k5nFE?;pBN@vPv^3;5Hl9okA-*IiEbTE|I+5cMi-kSiFA9@Brd1?xv%vG+v)A`h2 z1^@rMv&bujB9c!RvfX;wYf;{dwIOo3- z1|1)cZBGXR`~M+xT7b$#q&36=NM!^CQS;TtMR5R{g4BReEZ_hD|G!ZgLni9s-cf}c zxsqD$jY{}SDF7Dt55tY}Tr{d^VJt3+B?Z8g;2uNskBTlDZ$E!$wJ$#a{Qn46Y-W)T z%mTuvMjP$<@goJme9VzM5lRYxHN|om#S*~(pPcePc75dlphsoo<_b9gCwgmqF6c4SFsiTR@0U$4G0o|?3Ns$9U;I6g&0FcW6*|+bfJMfSEH3|YBedMza zK6LLRj~+j^RF{O3GeHJoz7eT2=xCaL9$l*=RuWGYH|R`z(NiH$pN5t8~{=(j~M$( z7L;Vn5?R;~pC}QAtSt11YQ45;2T%!!>9i3d<@`_U&;LBVHU9aZ2md-`a8s*jCh3j& zNm-8nqz0Q7IwKN7Yb2%uGnL~%GdlhR_WxUqT`TFolKz`{gTS(gGTdEp&C>O?crHmb zU}_Iiqyqncs-*vFZQ6W_AKqIl>A$HHM}lwUCvkkSxSOB*e;@obIsZ50e?$Os{*N#R zRUFN88daWiw;#9nOhke7->Yi>@4n7so&7((Zx{ZL|9kz7ul$*VkKB9pt&5AtqUv^? zjxQ`+jN5q_ywmx_i?2WO%A*R3M->#SJ69hq&j^a#Exo4}X{5>Q1&(#3{!=diF}^J$ z#_G=0w-}6_&Vi2y`~S^S{|8k-CqYQ<4VfWw9hfJLE^LZutl`iEJhRPz zW%N;Y8sIGKjoY~)NpKn{hyD2EeU#< zIP4NFdkS2ET2GS*uGLD4O+cIWI5dm751jDB#5_pGU__>z|4)!_BWVoq-PvjOj#~bu zUg-C>8oYHlYN25Nzg6mgWx~m5e@Or+UoL|>D8JKDls&{LQYMlBfP*i944`)4|D&11 z$6`m${~6&R=l|sVUt7-qJ^0xmDf0_assEwC<*2b#nl>zw;#&yPms00WLIWf4kbGy57e-Ll3ZcfMZE}#W3>}_wH+uUqyrFG!{Qz`!= z0v7fc_D_hywQ~@aRK1lU>`%?|fW1}(A;AATp8Ov@65i~DXSND-9*}lQJ(zZe=c~@& z=*HWF=}33ICL9F8Qz~@Ab^ImE(Y#c&*t9f09NWG#he;DIbLnoxRfMF0|4$Q4h+$hq zkh;QHqp&kHqUQR3;6$0Wa?pkPegJhD5|7WGI7QXk?ntldkQa`H97Ff_CFEw z08Fz>R7{ObmnDGzAG^E7#jR8P&zoQn%5FMkCt3}&qeQhlvL5*Vag+ZO5?@po!22dM zuxLGE?$Rr+CNs%3EUd*mV!D!bW_6cS%Cum&%+#f>e4R$NQy3B%fOK2!FSZ)8f3gCz zKmfXJ-M|B~NO;mL748VSajaV4|6>*<%JqK=o`gy$jqnsg-?rc@Qu54EPU3Tw_PNR; zA|+Ef0K_(qKvU=c(+>&BJ3KIE$4RH@R9Yc^D_K5)ImH|jGje!e4)1HrB|E%-=IF$? za)bW=(}>LE{I8t<&C4>86^K-^8Z_t|Gxxm zu1$-fD?mI5qz2}9r!;UuNfIwxq>Q^I2*R7?7Q`_umq zDgWQD{glw4QFW6L^LX^;9m!=H=@jFOK!aLvh@B;ZFb5HY=k^9!c@DHSw=jH|QA-v= z0RR8f700VTN<5a{5%b^3L^1!x{BMW(e*^e`v3XZH$o+q*#16>p=2%ox{&P0vKL^17 zZx_!N?@;=9%CdyKT&2GvJ=t*;zmZj1=b3evOE_GP`&;cd>NH+P#5mdy074Yh#s~iY z0&lrf`XT_*r1~u%&%BJ3)=(Rlz_ApK{%(m$f#cHSxD-KdE@TZ9PB!OKXdu7ZBM#`> z7VNkLprVN}r?i8YalXM-<%uyCYoT$A;`-ER8sTtV`8thgr?fIUTweP$$xi1Je%^Eb zH>F^+VxVA~Ap&yM!xZ`prc*KoWh2CN;s9ivPKXb{YyuU<(4aA8F?PkBiUTkk2LSZ{ zd4$^P4jO0lS}QqnDc;@f_O_o&j{EG+M;(Ih&Xs<5K9(x?e^VVw)q~pqb2JEj$qf){ z6@isGJac&4dEkuINNrUky-HwC@r}SM8-R1L0l2!Ic~8hE*Y06PEO`I#=|K#Yk+aV< zYa8ni(U6DmDaFC}#tGz{dgq=2^xZOZPb}9b=OB_`Kn9Cp1j80pbX60;pbCe7rYB(x zWmvebVx2P$Y#8N6X@zJpL>#qu_=nV(qG zL?n{gDw(Y<$!v|a<-o|qiI2~tsF~6uK?6j;qUV-;6tI$mo#xj8ZUtfR|DP5A-=KrQ za>n?2;r4A6P=XTa-Hr7@+~7^S03gNxpPB#v;5!lvcm_cq&t`%q6C4pBEJ=Tk_Tkih zkMZsRcDpSxP4xkcIjIEJ(>8LXgigm>XtVF(4FGU$eemMt_3H_bSh)0k7Y4ol3R4+8 zv*SuepJS|+);SrC{v1u!`eyQSuFiM^1OWE!`#T-@NB$ZHfsa0X@ZdxDK5}&7*vXZ% zceZXEz7_XXHq)6S(XoXihvV&y-X_>~XO3LCeBrU>BWIsDwDRQoU~fy&GZupQzis+n zU0YkTR>V}MVtNgcKq}MLV`JY7Q zHJou>#9r(hdt%`+!S3!Rkns>+Y{Tc#1pMHQmX;~f6-8s zG=3XQG#irSBLYngFiD5xh#0t#W|OG4ApxRhk%s~N|BUAU$pruzhZ@farPW2Y&8pS9 z(DskB-DI^!5#1dk%_l9tfb<Szuyyio?U{J9 zyWX_(_@nmXEje%hFyZ^Bw+it8gR4Er9P`!yO^n=xFmPPZqb+^(1JBINyvj{~73kbr ztur_!Ts){8|CQsv#V$*knzEm=jEOJazj!CxTm?ZH3b8=F07*|6a z?w*uP-=XG4*vd)2z%~vsXtWuG1D9wfUehVqDH(%K8}%=zq#EP=1SqA*DJkIpF9qZO z+1{Xg?e5!qn|G}!Hzk|8QhNX}RkP6Axs44dB>ZeVSlzx>BnzW1dsQ=stL0`!4_o{y!u4|2%GdZ=)gbnH>VJI&z)C3?!d$E+gdzz zEUKoE$VPAbTKD=DaPBL+X~N0wM46vOuT?DXmW8Xm-i>&DTkW$C`g<`7vaRH6y0(5} z*L-FPY-F)Pj@PxUZv+6HKbn1q@BjE>W#F5tEb~|iMM1!}mFZ7n1R$7uOaSUJTkx%d zP-l8ghNaOB9aXW;@))uJK8?kcpEzotegyXaJBKc20ur-Ghb76tg=WGpUaZb~YBP}`FI9iWC)=-U9#78|S< zl~lXVnK~dw*ic#-En8}Dm=D<^S%F!gW2;Rn5kUWcxzcr`Atf7r9{4Ei@S-Mp!@-^h ze=hJ#?3^%!Z!EM7+3;)sh961x?{q$Pr9k3TfRH?@SAW6CGD573Op^OQm5fk-6iD!7 zB71N~oyzv#Y_|X4{?7+*SazbJ9y#!1U?B&7|Jg+5hjfWZ1Ca)6 z{obvvx?v<1Y0wgB0Q~ub>Q@-P%;g{*MEAC5c^&zO>E>ntfv-??Ivg za}W&x{{IR^bry}u_Md_Wk%{Cd6EKz2fLO>)07u#WvxzPsu!}_9fdAJ##LiIn`4`vw z*CAvm=YMeA#FC$0L}=t;-f*N$B8Um_lV`^Hn51*Ui+W0UAz}b1b}-<+9QU_c?E3=$ zf2AU@q1lOvb39`4l4WYkPP)kvVUvut9j? zYFI7PyGhY^axyJZbN)?FWwzo>31zt+vBzbRAJrOU!^v5`%O;c z(8dNfQINVWvg2=O`+@%NA^!J`2hRd@pufV30G`>trSAck4bbw$Yf^`01cGJP)sUX- zx>m633jF`lRa+#W&9KA&4f~?3oLXPO`33+H9w5QU@Ol`2R0!{wLDW$NN~hx*K2m z3#`vcr}QVMymwWpnY6_G?p(0D?93;m*gkGA5}BJ$Rvz&GGP2So{4e2utqwq%Bg!Zw z?X^O{=HtYjj-f&%{2!8~!2dVJ{m)2#V&a@N#mo8Ml8n!dy?%Fax9#r#3h;kFi~mz$ zfw)0D(NsoI5H(*(%K2YUjuE1KZ{#{914h(Tq6Y$<7TFC1{@>NwkELzdi898p>_kkd9KcxPLrt+1?pIjg8Z9Q=a^#85t>@;ZV z#|n@rB>IzRLZqAI0x%`C)E}$Dy_QJ&1%rlJbSmfnXLA4u`2RNID^)kLyAjV%F8rlf zvJ6r|G7GLRCZF=F2|520(htD@cO?H;a{%ywiSiXA&Pv#542qWxK*q8eAC7I`00jR3 z=A*?ZJwGtz92R!@!$L;O5KPJNOgnE#S`iOPwS**C&d$kb^d}h@4_eis3j#w_vSxwS zKY=yk=Eyqdm;lK%pI+ixqXk_%6G7d494)YYyTx>@nVmS!4;|>6R*SLvjv{tldey-H zU!#ZyEh(bV#Es5+abt9ftjB7ki?tf*Qmsac0;`c5lbdZF3*&GFfR-pe5fqjwDWJAG zuCr(Xpi>MbRK89ljq?k`b9;jqd;RXa)(4QvUdJ4EsQ>pPsbs5VSg2~tL@oeIw4rTT zJIwwu%U+RT^Z>xn11^xeZ|8o-mOIbTng+}5P|F%W{YyL;7e15h-MgPyY{=bK)UiSYtxkF1;9J-mjEIl>2pGKyhRst zhV@kHAA_r8rUb;4s*uW-g#TJ@xuxb+iZ?8vC}Od+vf2=epWb?IZ;)-eqg`LUQJQ_2 zW&9&Xhh*PQ=hMDR{QndsmgpD%-%*W-?rJ2tGYZFiWpo3Yw4|XKuxOpH^gkE>4~nTu zbX;>f%};%zjYS)0)RJjqRh^hI0s@RsV8f3vJM90xjLe2*Z8vC*2oo@=fhTFMoz=QX z6V$9$Cq>O_<-c8GXGIdfpkHh`C4$a=K-w7#THJ4Oza29O2n^ZKzPgC;M)DPAY!6xL z*Icbkm=uMl5^~PdIU#c2SZW!-|L;BOq@BXshU=YVO}mw53tO#xhI1384Zor&qKV8F zI3~&m=cV8>JMiLi<|Jy#jxfB$w(=|1iR8Ll_;Z5ElkZt|6*<}J*39`; zhw!{WlikPYd#cxUa>Hc>L`*Om9k&Lg2ohT zq?%CGQGoy7ZXZur zE%5(e0O}uu^v}Pz-oM`6zW#i?G3d3}hFaa|ZdS1~(tu6j;r6q{_nRNz z*FF&4M$!xq{QsAX!DmMm*3?5?r_&7*vxQDD#b^l4|)&YBmS;^fCZd3!cn@w_8Lx!cXGKKbz(9`4S-#{XV=zKa*YlCcf1<`Rz^U^;4qgCx0i6bK zBwq!b*=(3pcj~Y3K3HfZcO2;ys{{fKh6UsR(i|K>THVeZSftXmLeGdLJAVZF|64U% zVrI_XOgWeSBq9SbaRYMCN?E5I4U(flgbNg_AWmpR#)#7Y35!$35nhUDX8!DEewitn zc@8x5*o8W(h$T6jT5$g7ze@Zsk$|@Jmiix#b_?mY*(ikkVpg(SvE!X8c(DIJAo)Kj z|L3P9$^Vi3pVs96e4A2ycCeN@14#0(N&XLj%h8QtcS(PRqYnKu<+yy1?zn}l-zS0ZtU^d~=wutO3;?*DRyH3ClqSOV<-KcDhH zC<9!BgUwarce?}Wd(kBMOM(4vcGmoUH@~JPmMU^8jJN`wa60)pn(-w%LSO^j6WB7Z zrz!;g|MoM!%qx#zGvdL`{xEG$-Ut#aPA&^>qq!=m&B^J-Z8VDowQ+MHYaqNqe-d=_ z$Yx>Zls`iAbxN(FHf}8^X$BGcjz|Hzu-q)~QD%kL=}2)jUk(P21V`UhzD{ErQy7jW zjt1QS``|bBZX5ZSc3;P2|C^3vdw!;3XV)X=Y6!y1?t^&OV{QsRd)^O$@zZ;E=M<}(zIcb6yHLS2_)zL=i>bT_YAFH zgn3B-_Q=HCo5zy>ALEEF)h%PdQ4)Y{U4j-*!5O)cs!`awjSdNe3NPZ$@mC z_&nyIa!YTIan9BP(U?U$C#kJgz6OGG0@?a@nZ2jLIn`@@yU5mUSYq#O;O86#E|lP} zqu~4IVHvnjB6L^9lx~^=|Nnc3{GTv9Be(%$L?*x!w0BTNz0v{_Z7fkH^?!V#-&Q&l z>j>vk|AzvnX)FQ!|9y&MjD~P8@WGAF1w6PhqGH@?q<7$0jZ}G9jr#h6R8W!Ga%2Ag z?7a(^B-d3K+_T!XrIBqg@>*bny{u6dBQ%=cot>G59f|cyD<-hkWM_8;Bmri7YFEw9 zbdS1w_Td0Q4=g+R5<&t53_rv_0y{tg;Sp>Cfk1ft{1A)9BoG`Pfg})K36Ok$c>d>B z^{spExwr4FuCD5O^qEhV+*Ng7=Y7sS_gvR(bFUYH4G*-OJnDa(bU>(1>nya+iBgT! zqakV$3CIf6|KRgKro{jvhTybna(yT&5h?QdpW2`QIe&BPO9nvyf4fwxlUwu21!I2K z=U}y~nF@yD)!sIn)IK4vX_+zowP9)KuMNvcf9-2c)w|x>?cx&s4^4IR-u7VX!f*Zh zY+tp0wy5<3|9`isD>(jd+607csDXeqEyw>k{x9ff>QXdCv<&$FYkQ*npXYvCGb*6# zAfE=KUb^1etsdP`SgtlKXidd$mYtDfcg)(|cExFiOopYV)4X!`?Vgu=Ut)Pxt8gb& zA%f+K^R0VUr<{23vD=~(*4c3*@c%#WU7uEgH306^h2rIQzYR6ypc>ysFWBgHZ@}+v zC*TCOdL*#bEqOhq` z7-ON4IDxJH32dCa9 z3qi|Z^Qr#k6X^f%5Y#LF5bCWI91#nq-|^@vU8iIWO0js-e6l@6qamCyjH;NWnX0l) zyK{|%_R3Dbm)l!YFUtV@|2+}&hg4Hy<{sY2!j&x}bm?}(7(#MZZni-IC$4HYvZ`I9 zF?U&+nuLsOw&=vVgpA?P=jVFe-Kh)2kh?-PiU=r`(oDWk4z~cnDY%G$BSsA(Lr%At zAl(A=|Mwj;4tAkkfI?Htl{rGGV>CIGKIJ-+FvS?71xs{3ZWU@4BHGB$(WITjaVy~e z@5KbEY=P>>1NdeeOP~@d&UEpZTttYc(=<2R@U0dRU&Fs0I0yd!e)L+~8|1v8QIgRK z(jnMQ1rM!sQ7^uv{!jSK<9f(e$~+2N(ayFs8k?9TOuTn3>G_2bNTM{R2xjy#9f|2QzzE z?;$=i2K@icY$*xB7ycpQODB#1%r1&f*J*MYCrdN&E=hz=-6R?xj@2k}h3!DPMgjps zoTq{Re`w8i--(5cm0nw=XJwJja|IJusKP_-jJj3mopEXfzoYUNy>rcltYJ*JDJ5lL zX(#Lq4TI)uRLMf`Tx%(`E(X@7Xuhs>I&n?S8r0{i1J}f&$sV7I%V^(}sT6UPJ{S%B z{}r+QZ=qYYl=W^q4_iz@RY+_C+3*p8Zum@1%ff!Dm8Wwu8vRKIMz#TmN%;6wJ&sQS z|NjfYFVb$s97Fg)exk{H4`(zkT%1ea;|9>F1|7{``o_Tbx7*}586b*c&wSOQ!)mfHj-d$@Uy|cm#Ah) zO$~m5e)y9t0sQ~NI@ddxhcm4w$h4La2i3d52iu9nmWl%#hX`PKYlZw$L$FaijWv4! zX=GFY|Nod0he|F0m0EyKWdnS#e0`Un>-5>ny5XY{|7h1ys;IjEDvd0 z$W^u|855?PDUlwO6_K_T%m`^JK5rvAJ)j#4$10p7)WpDkEFCG)C{7LpJdu;a@>rw5f;mh60LL!;Dh+z&lrJAgm*sSVG(6Y;+BY5lCuSG zgn`DR;L@EUigd&g_1f%tHQ4`ib6?effB3H?5cu%v=k^XAe)j$S7t{rVIEFL`)bXwhQ*tA(YdgN?* zxJYj)Y(o6KSpiw^JN(`eYeCVDlQhtR-YwA!H}N~VpM~BTS8<|uX6OdLG-~PKmqsNX z?WJQK=H8svlE!nimyUEeGf;$Dl0c7Nz=7`nQTX4_68GPYc1b1}lQ z&0GiqEgu(z46%zrZ@2!ZY`FfNGsIkJF-F zMi10bq90h~tTu#E-imZ!$Wmx+ktg&K`G)=^vJH^|m;d4NKlLd8vjhD91A!C~R0|@K z=Ss;!=73xwQURWLOp>Stma#<8X_22gp{{LN#Pi!1GG`9o) zG5_wo@m-HVGRjNM<<*6y+#Ib7!L@dO5cJCDZ8?3`44kq5!xN9_588C?3q4R%@2Izl}F0^js z*T{&@W%)6%L--m&W*u#Vpfk95dv7*M4$a`voF{gl+#ig`n)Fy6BA9giXd_72|N8|= z{SE`%)->KWg!U?2aJjuT6J@hFGG|D%P>m=`uo9__*5H}0E$#Y9BeO|5H%6oGt~S!y z>%~OorW2I|{{Q(%KVc^36CwZ;LMHSl!4DFF^*SNK+2KR}zzh;c!Orb>T4%PmdsWqW z!2katT3?OK`Q)t1CqxDEDZF%TOtmADbbLCL0!K3)tVT*Pd`3|$wHNUJFA54!aSiiG z1%7Fy>f)EiaSH9FE2W`HbBMK;GJFvUDl*%t9haIyne^i0RFW=+phmoIA!ZBlD>`zO zgHO9oBM}^t2}uH{1fN)@ja;X4k7?hdfmZtJ5WxT65aPNRu>`zKfR}*)O^zN`{{r_E zUWr+S)qf7uJ6)Cl{{N3Kq7vJz{%tHlgj7yyaaL|gVf7!X+*~+)%uXAPdtMn$2GKN! z|0dCj9RB0m00jLIodHigdm}}d;GqA11!l(jpBTO5C&8r~lNQV?_`2L;*8gkA$Sv&} zZL<46lqxC|0r1gD6&?^`g(ss05Agp-Lj7Na@DT%#HQQt}B@m$_AZW1vAEH2~pfSM5 zx1^23Yssj0x-20QevLIaB}TXkIY}&t;F(THwg<*oh#M`DSKBz|D6`xtfrdla@%bM< z|05X`<^SIOt9<^K&;RPlrc{c67#?jxW}?>k{BJQ?hOGZ1dxoe{X?K+WP%)V}LU(^K8%I$#gT5%N9qnZItD40LGAy|q*lh1z>a}NM zsr!3--QFPBo{807?2f-oi2wcPD_tlsZ#{4+bYrAZJdVEn4C_mH<}n&&D^KT?w51a> z)ZE1T$Abo~{a$-;`|M5|j@OM3oC-Qdo5LjwK^{~#D?P+4HD&ztWRmK{q;omwwXfc; zFX;gP|AtCzr65PV#05a@;wA&ClwuGIPXzgNVNpu?qopJl0L^0)Di@@BI!#dkw9$Cg zkH-c53C(y$OGlTvbV?@f5M#XKC&Up&UyJ#=hSsB3TedM*Vx3-K0b8K`Lq?#A4!;}iJ*x5*bPv=Y14eudV& z)83LpnD9E&eJ&W&W9R{$Ek~e|P_}pdzB{ zi0DG5L0tLla?l!dYrMnE_5Zp4fBozKgZ}^Th`TxeZ#(G4Wtyv`Uz1C4&j0h9BbL~- zG__RJ)=-=B6C8ZQ%r!`3X(vZ)%KX3I<@~>pAR?-mH1=394RHQnHn9f@#~H}~`#sM8 zll+f__3Rvh;QYV31W{7u|K0ujD*unT{h-T~I$ZCziwRK}lhUSTwbY~%#AS&0+DcW@^aZ$n6;OVNL3;_TC4?z1-7!aOAXyo{x02hIeupbbNszU0vg`j0{ z{BI`WfB!>JFZ?0Q^Zvhp2T=s%ClLV%dc6OijSs$YrVkf}f|)ff`-)=Rf#S1IZ}qOV zJJ)J(|IhynxqqnBu*FQk;n5aWr57p6X?IE{PPH{+RnGqlB|i~ui@rj<9|a7C^0W^{Ey>*YsW;my$12Wp8_|=8p|JD2edSNGdy+VYB_WG3b5MguC^O|1jsrT(Xf_P$*X*Z24Otq1l#`UNA>*kUR zCZ3rsIv3qsq&B`jv~Ona*3D(t#G9U}d0HRWkDLl}Lv%*`6L_baVa5aUo;q77y0gjU z|0r|-n%b6Zqj5x>|4$B6-v1NeBH@6Lq&2vjHkE9JtttcXVMqCOPS7l;G-B(Y_y1;L z|F6-|Yrkhm%j1!oCBP&J6!Q#sit$CDK?M^M_FVpZ2Fiawxj%>vIb>r=<1eNbbpOZv z+YBw_pdwcPtp0_Dkdhgj4)CmYHqgbOw_E4TSMdM;zac)=7FE;j(2eb}*@(qQDv=CI zulVzcDCy)5>ry~7_Vq$0QSX~g(+$=-XfB#@4f25*A<#dt;7$9$z#P1#-nRWwS$vYS z*YgOJ%`RHS{Xf{A9Lj=h|L4^YuLk@7uEs-+13xg=hyS?$?!5lFwL|wm`_co=m4)WY=|^wv!o^`hPaFtc zJK9`WJbEPPw7T11Pploibn)Cnt4AMwWd8JHTZ8>w;bCE2h5x@!XzLrt7Z)!C{k=Gl zskap5iA({Dfv@)+ey`kc!%asnyeo}%iDoRIcCL5&ray?=Ke}`ObEgFqj|nI)=LW^* zYC%wRCF!1|c?PMVcm%RmKMIKP(_>;h$za^Q67I_s`e=Igm3x9P3{G=QQyDUj~v`9fZZ#|3xx_g2-o!NO|C( zO8JSzLTIocpDgF9aa{gKGfanQo)rGMAl1`pit;~Kz>?bH_@81uq9QyHw>TfNg@fVA z7*wPnb^g@No8rPBxV*UC+N$)8>=G;r((ptv8OQ(f*w(}}2;jEt^bUak8T;IYiobvh1apV<%kgG;?O+L1{=C+q=0FOHoV?JeIl zssKkd4**KJQsa>W#Q*-!kZ@HOT>cM0LK!5v@;}pR1^qtM243%6?N+!z1i&DBVMf79 zMnHtj<^L!R=712;{||8e|40IAVwCIu6VBA2GoF&kMRUnclM58F)6wn)^_9peHUNPC z?*_~!S8lTKDPR953D7W~tjr;0H+HrRz>BU-oeR&DZ8k~g1kJXw&`5mzzy8Pn=Yjw4 ziM5|g;&XUU@gRryIJ{Sl@E+DSMEXZRf&b5O{?AYXBIU>Cze^cdjgZK2aZsGc-bmLe zrD`&5j8ZoL<4V7wp(zv^#Q**;*8d>{l2a1vf7bu?(f%VfK-s!Rg@c$bS!?9<}o^4G$TaIdndL6`x za%#<}Ht_$e;S-gG$=CncRN`nIXfaVNNNIQ)a)dv25U0m0qM5_fv5x2@Gn`8?Ivc~}7t-WfW6iL3+bG`0vDP7Z$ z>%9z|e4)In4G^W^0{;JK-BYK0hXl(8?`&rxU3h1k(xDXII5>m|FP&ndv`!QX>VI}` zwFCYamAR9P06za`qg8n3F&bqnEIm&Iy`rW1(emlynB7q`?0lzjn+b zUrjQ^?&|T;8&$3ioE3Tn9_rKOI=kFs*XEaNF01+)2yf7zqjkr)uybtyR&rxZ)7do+ z2Pw&&oH$Cq0SNqmSS?KG8qf*~iClF_Qg?EkvzHWLilTr^Zfc(C_k-Rb*k0eBPJDvS zbhONm{e^S;oz|J{?cQ`I=rPzVnn<=7i4frb`-falmJ3ZiR;M>MBS)7!6bhF~J57!y zj%?ABM9DCU(FG_}+Q2Yfw70A)6yPk@^Q3g2o|)9Nh;|2jiu=Fj=04DXfB3IL5cu%N zK6mNR;b-6fVDr>MemAjQ2(GpJgP;eMvyj6_iQ6qz=+~OeAWoR}&gHzZBe{0Wkj6+- zyPWBGAG*<)e=X?$H`i7F^UXGvV4|B@rIHzGFNPXq>Xu@P!gj-}8mu<4ZI$p$_e|_7 zh0i>SJYnZ#H2RZ(7!NwU;_d8C8}5af)bW7)zdwOXJRtLdC;j>XJ0rvkJhiKK!pHU5l0u@Wop+QpnyHXKigWipHD=?2!Vo{1! z2L{(@W#bTO1$mtV_Sp$-A6?I@1vp8DwkO@+RE4j)f-fIzf~+O2b(cQ zYy>zu0wR%3w$_4P%p*CWqi`H2w$_0EKVkPu&=ca_Ed2rNP!W$4dcs@?I`y{MT-KmU zUoX-c6Mp3Z1M;4v+!?D_0-* z|6}*10GN13QNj&L4Oi+enHZW@2zoWk@TX%-#B`~tIYav%-C5~VHX|U@1!`EupVTP~ z!QomPV8}D|oJpPy4)%N*z9rcDP=_L1Ni@8PL+%;pvg@jkftQIkb(A0Zdb|h zK5vtRIHiC~>?%t*);+1E(Kz;TTq%9X|0n=5JE=W_|C9{Q9E-F8^1KX4*b$^Ahnm&xYk}$2TyzHfPm@9;Fhl0X0dhF zXx#seVE=y-XupZ=q|EJ26^#637i7z;^4!+k08=woV&}$=ADaKG<$=)g_xtTetp03DWa7 zpWGkBnjG28(p-rfqWu56pG&0hCCg)pf~d>lGs+eY5{c(CG-(Obq5g}=jgazra$S{t zo%!WOIM5(5l__pLo$`)K5A!v1b+cUIn*4@uEZP9^*Tqt84%s#Up^apSlJ~k}{ z6I1qqCmum%wtzN{Z3OKt=VvOxU;;83=q)q`@xQN36aPz(f6FA~%97J0y91GJkP8}$ z=#<@oV%!1H|9=e&4=!v||6n~IlbXbSap>BuoI1Qi^e*kSS+3-?EE253y2=@@(^b{o z1q0U=X}Pac=}Ss0qk~Cx*|p2XAjq^+;Qt4?lBJ^2Oo1!o8o6|uoSSB&k|ozg80v8% zR)P2&aarL1PY%5y$2ZDb()fg^dh(OZ0?mOBoTQGOJK&#-jPZ2JyQGL~GQE}~WaY>n z&KKvx-6O1;L>x%Mz>|Y#x(u*AFvdcHA*U_Q(rj-?peeHeo*)V`Jq6hUgP8!C{v-fK z{c{3fr!LjJHKZdHKe4;si9LVhAiMJa?pZ1ggJ{c=w6C}YEtL2FLJa}`vII>g6)8n@ z%KLvs?f>2V?_*Lj)HhKkKp2zKR&o~SD<_cT%N`NAF!>nR z1MA&(F)oZ@8~gQ^R7*InW?Qcg00IwczadG#ak<@Z!(Gb58@1M}e5ta8mGVY3_^Op| z^n#6E_Xe!I+X=QIm>Wl;A_AlE5>FA#tkGXNxCc@4Gd#!4I;UtSL_x?8tw?N-ls)1I z{C_GBw$(8KxNv0hgoL2p+fI6D9hfzqXb+YeDx?RqaE$(ezXusp6=Takv`Sm0WNiqN zcq6(Xls4)Sp}6ofPh1B24qJKn$e4i1vxvT*?6t4eU+PQHVTwjTxESD2JTr*}44Z~cmO^9aziB6if2ZUPT6OT|gMY=hPtJC#XdmH%w)1%w} z+?Ccmwc_2?^_%X?|J?G$)7Vpx-81h+Q;TCAZm|OJ>!wjo4cj@sWx0p;RB~H9L9Azck>9Nc5OJNK;14HOT$n(m>!>oUzc4PWkS9NaVaP?C=WJTs#eM0Ipdb}^x=Z{Yvc z9WDSK327{GXQ+|^6m!Y&d_Q(E#?wdE2!L0~kue9N)jaJKQSe_&&$?*N#;ozVEQcLcWG36gWi6CL6Gd# z)vcYrYNm~bfCfjruEu?%$x5FlZiniB-_uQT{YSw%fRFzqa@k6x-#rAw$A9uj!tq$| z0w-Yqe?}}ZBBF}KEN&Z%jU1_tj6r2R5^@}wcZF$6#PegIl766~Dv#|3XxXKLkp)G7Qy$pkviar8gYe$}p@95dVM57uQ7G zuM2=mlDOPg;p2ZHN;N%c7|0GEQ^K+Kn+(AJkH6NLs+ zf4u+C`~P*>|G)bLpZ|~bKlT9F0Eoa+j9CxTIeQ0$XaG6_lJK))0D%5~0??csF!9N` z%+HYFU?!PQF2vyJRGf|~Xj7&n7qavDUf8a$`1xL+=?nb7F27OPW^eBf+E;JCt-F0& z+Z&|v5;#b;DUrJLaCW+x5|Kndj*JTi`{YH*oTZED5Em1 z`YB^ftuE)sf&V{y?bs?kO^P$SJGQbdS_ZH0*NYtJ#Z2~XI`q|TxF2LHihyAP8Q zri7-tT(vzQ+ytK#XZ$ffb##x7Pl<2f|EGrWf2ti3dLO^F*X{)w@}rX38B$tGqHq^> zAbC83*)%p=CDxJl+TC??(b>4^D*@uF>u}67Z{J~3cex5*l@4cJ6wgUjk5Kij%Psai zwPZZ#nyd;3HF-5c@l4DEG9OGFWCr~Iq@Zc>hv?en5D-}-C5eP>L9YmaP2@#nRJRDU4Dm_$px+I*^i_QqJ|dyJa_kQ!G>@{Fh|A$zl&k@^&mt zexl?sJSk4@PJ5=w2^ez22M|=bczdt(j+_IC$=ADaKG<$=v#?B0A**z{TX6fc^id zpd#H&r$mJ~kMn=5Oa~xTa@cCgNUp*{)d0MmqciKApjl37gzd!nKQod4b5Rf-kb>IQ zCtf_E8v2tspl&{(l0_evMzqnKD!B!(cs)7L^0HVlle?j=z2yj>0-S|-JwiWfp~wJ0 zt7}?#K==oqBP#=TOv8&ov~cwLCW=q4{CG;scZkcn}&afb8%b<4~oJ59t}<4$fD1nmFMT|4GU zd@3?e&7Fu=(UdHst`wkAg&YPg7Fh zmaf?nDM4j`u8Jx4a>BJM>^`voD(QR)ZTr6LU$Stn&< ziT#4K@pNZA++bf#$h+^HGeol9)@h3w2XnQyXjZ`gueH$hXc55s{{mbDK7uEF3?N%! z7Jz5ERtY=GuXAHGb0KIMy#GHF`~MdN(ZL_WJnMM@51lpXPr{`LdK~}b_@AI3LLnN5 zrL&Q;?-ca^-xPCI(I@uy03HVO6I>#0w_wtOc?DmWXYV?yXryHzoVg+bW%O#(t~0v} zxl-U$8E(l{L0-vRYAyz;jwd64|Npw6ciAelj*ILxIes|*Cq#W(OQ#xjAsjTFoKh+t z=O49D;Qvc}|DTHe5I9M(s6K!v(~ERHb@QgsAaHE2-P#&d`P`ldkbL~7nBza<{=d&h z^qk*C!;w7zWT5LB4_#P{YuO?bslEwyI@{e&q{sSo$q$ntQc?@ctoGieUVAo{y1%#A z6$M0RVzn33l$r(p{{p`MM+&FOb-T%W@B|51^HyuwA|rX$+V8aoxB32`5T!)f(4USV zKoG%k2JZji`X4|lgfb*gDg~MW7w6I`nK+F+BGJS7|FzHmKYuet{f~RTFpy;Kpq>js ztJ~Y2p-VBl`<3>$lgot*a4TleAAnDQG8uD`Rk?IJ-a;!-#nxd5dH}ewHF)~s*0nH_ zpyATi4xS0K6zu<};s2`bDc=4QmSb|NvP3AT7}enG+Wtd%S)uug@#5MttJ*aKuC{|6dgHKh9F&<9`4WYS`%ps>9CX<9~eoPtZ>#L_?!- zXvw5?GIiv{@bP~uY5{~E13?mm^6G`yB|;{AM1UVY%cgTS!-3c|2LOQouV3K<0D>UGzpB%~ z<}h)c4**2yBwic&NlYz_{24g_!0~?@o#Z0ObLlj>cHsDb?c@LH^8a@@|1Z-0z@W;{ z=KMdR95v{qi$WJH0mVrNJ^&zTJ;EpJf7bs30@SUnKDYDz-zw2gmP?PVMRfo7Jt6{t zepKT43Mi8+= zq@6UvNlDjfI0oeZebR2_t(YVgj5w(oh>_40{Ym6MHg?anT2Lz$Jf8K=)ii}Bt5;-t zCaxa_{r_Y8yH|qV5lD7SdmeYviwK7rgi>Q-f7~Mfs7R%KkEV1!LR*L;O0)@G$|JPW z{*g+$#Nac}YlZ%QA(u2oO=6R>?(yd$ND@xHkF85C) zs!0wi$@blkgloF;YY$_#Trty|sI;Dg&no>Cbm-ByPYQgzGwUTivFH=Vb&H+`+C|DliFTy~93?*D|Q zx^l5SAW{TA$=RCX`@agxFarC3qk5s)%k8b1*t5t_N=`dS1tP>HRG9w@6L%WV+3Qnma$ySrBPs&mNzT@LI%-Ld*ffPLdTiAyHYA`%Gy?Yj z7l(`$Q4QATqZ>t>C`fHm!Xjf((#8FAVG9Rx#)o6=Z?;6F$wjS37PSKYf4(%L63L|^ zM9fSid?}?Mq3sYW@)NBQVyskEvXaXxK5Qyk!I5nqY2aqU(xJH>A{A*me> zv_2kYM)qf7Q-Q-Iq3o=R;3UGCP8%_AnlK6Q|CdFoq!_i3e05yeQY)K50jJw`4l0pw z%sc>q%>~f*oOp2}4#f{SOve$x$arAb`iQ-AiLwI!e+lM)jKqn@_Sk&6EC@}SZ??BM zj|e{L;GYXpJ)New*p`c0M{F(r?Z7$k|GzMVjd=V-l90awfFZo$6ofBnA ze-cHB)TDIa&hE5>&S1ij74ZKH*gnWt+9*Jh<=P;Pmz-*&$B^1g&mwdv?Oz#!7+zzg%&pjbk*zsERbTEd(DW*%Vds)D=(G`g8|wcE@c%oLx1Y4yKxtfSkA091x#PgG-w%3F zL3~=J!^fD~*{8R9*C2WR+tXYY#?4~ZK|JKyGPm})J1OESeN+!|JK?c-L6e=A7 ziE<7uWRu{_#~3Y%Xks@;Lg%P|g_U`D~ePU2%YLCN|$v zWwx?bQ(A%W5E90q|G!y&N9})P@me$q{Tez|*($Cqmzl}_7zs3GSP{ffm?8}1l}aL! zA1MJB3N-}tb;$~F6l(yeQfgAf_EP1G^Z#GRg_4HgKxi{7B@7wF*quX-EDSGUu2>$P z=mAIhi6SU?GARL(F(`?m{<%uBJMdK^qGgQ%Y6Hkc{DAX1OUN?r{mqb;qyNsMdn}D0PwEH!;J$6=X&rT-`}0red?k6o_*OCci#9)x4RQ;b&f## z_@K8RU=SpGb#-f}ubOEh8UanfIqnDWXne5-iMWa;K0Ys-;@wqNv1H; zrB|x(UM`)+sE+3C#OyQsL4R4T91XcdqIU$COnjqVgmsD|8L~@-;hU$ z9ZVPi$ytv7as00?@xRx+0i=quX1V@PsQeO(0*jMJb*%{coh2GELJOQ}v>0IP`gP4Vmhc1n~dAOh(ZdRGLNGT%@Hb_18vOQ0+B| zkPDz-Z)8!1E<QgfcrRuMZ;-mWOrh8${Wi1#-X6^x+ zyK%GWT$itJH_UuM@sJALX3=1FYQ+VUrf1b|eE3%F8QQ%p_t2)tt*zQKGam=I$!rn$ z|G1W!31f$GFD#PaneGpVAaclpcft&KrJ0qUA!BxpbPG)cM4ZmWwh(vqyEAT9E)e7o>VRO|juef{Vca z|4`TM(L$9JMk0YL+h!Ak;~RQRgOZXRQ2wMGNf?xlfcl@^s<9e+-k||R+-gl0&~3x8Niil-a;eUCF59_Q!j)Dv$GAlOkM~)eT(*q} zZ5YDQFCI%sWpYX*EIzLIKLZv2BW*7!0r>x)!lL=cA0Y%uAcXuRA^?lXGp$z8@4r15 ztaq+bNijvneFW= z*H*!+2LAsxmH)3(d@j_GOQ(26Zfk~5{0a#~;ico<5h&vmzZ5tC%uD7Atv(Y-+WH2_2<=(sZ4S7@>aYPU+$U(h>OpRSv5NoF|(P+}giXhA0oIOBiq zSn(%tN6^3hKBowu$_1pfGP<+8%CxGv7}6Uakok-ulf?P|LyZR-2R?Y2GV7t9lHG6y%nQQCTe<-!|#O{;(s&E!^ndKpXxFM?l0~MeYLuVTJopFATfgQrv zaMF;BW!CIec+*6~v;Jcu)*K}YGG!}>|D8}wug$&~sc^a7Z^I4{?4@n=f{kAH2K?@J z0=75nVQ-T3Gd_AEN&*&m*$nXiZ%6vcBUae`SHhg#e-_6z5y!y)|40$G$e85{iBcYd zL{y-$?D{DK$rA^$iPp?ICpH`XNkY1KMSNJA4@(38f9vh3RvZhti*B$2H%uX{N5-Jr zrieE<&xHcVFR#juQ_gV()}t%{{QtemC-WiMLKG_3$F;-m%-NyEQ&8a2mCrL?1$KuX zG%HKwvd$G+Lk6$&1j>2{?Fs}}{T;=iE;s4Skxa8#FqCC!-=l$6m$*7mJXxfV2V@Iu z^AWhoPgGzngHFj9blM2f7rvxtLp^D2-Lo=QL>L^pBBGuAByuaA0092~PI}J@j2!k|UI}-(y;YYDBMEG! zD-a@|x_MJ5TG+O4x3&gV-nTcG2~SjXW&QfbR&Q%J7?A51ZOycX7NaKQQG{)Y*Fh6{y%Gq{IWrh0F#0e5fX>yIW%9B(0sf%>LB-ti}V5i zzsn==iZKRkk{|K8RWy5Nnp}=>0FY9hrmxb0zhInl01)gO!UCNCD{MXrm0Solmre;f zDbpf}$w`K_Pcl4zGe!RIJwL$yzw!VHKNZZg?EhQB^MDhN#VWCe16c5k{eODW=kx&V z|9^#`8T4+nTS0;Oh@mn@6EgSaY{(_3r9VeUN;jcw52P3K{XfD6B4C0ilOiIQPRGFR z{@z|!)DxPCU~$^}e}1sLBa)DG z@LyRW@WNB?oIiN@-48CUEaX(juhs2bZC`_;3pcyH>!cd&m2P(@*y@NF(V({ z#ILSy?ew$lG4m;wu|rK$BVh}ByjNrVphWu7^?xG%|3G8z17#(Co|g>*AO6@EzUa{5 zXW#$eiRFcr+^Sz*2(GpJkdsR!0@)})1Zc5-EMBEL;bA7ht9M5FJR)c#r60eeDf{T1 zku`Vpz$VjqVGCVXiNaRwCC;Ob7)Zc_Z;~DKR#S7!D{ubxO2Vk z?o90bWSrP0{lOt!C@wH4PUDeg(|Jb6bIpCzb9kspPl@Vd`&vs47_CYC8*#Vi%oI6j z3QcvMwmm2lGr907bV~>mDwtqVrF7z8US)zU-WVlhL4T5IBk*!+UhPx!Qk3Ql*^bf4JTC^l-8yf5ga7}-A=N1_FVDgm z#ywC#xoTu1;-kGaZt2n9X6>Y{x7ypYeI}jxe>V94Cv}yian)qif3oIDOLQ4#8|q8E z2BPNZPoiIu#>>yRafM*;)D2P0?w0_G_;cDS4$4Ri`bD}OpfiR$;CRYiAIe<`$r}oF z&&(YuC1sXC|Nm47UE%?dpAMeM>+b8cc=MFUT69;qT6Bk*o6Z7Q<&byjSp`cXDmBL- zh?%^^J2kl$E8&6v|DUvy)j=+~&|of|QaT?k>9{0FRR|?HPBY#)tsX~2`9JSz%)Q5! zWx~&jgTRNEU)T{DKGz__C%@}-Im72l&=aYRM(hd2r7D}@6FN@9cTzDnlmXRfyy>$A z{~tK;VB@Y1{EPn>0;3^t=XIS!_dWa41E&_2b4xhf*lJx5)D@Pd#fPFb7N6f@peV{W zvX>B7Oy#!i2Y&43)-HhXy=PA?oGbwd8;wu;OtAm^LO>*U@6JBG)w>2IgDwZHLASU_&`2@sN10wKpmf;L! z8LoHYLk!5gk=f5Nv7r0E@A-EXD$GUG3&&d#Raud$9SZW zu2V7woi@gCd+$=OJrf6`Hn{*GB?L|CY>N7y|6C|JT{O~0hrg3=9LmvG6|VZ?2ZG+nam`bDwaY2 ze?8a#4dow^f$6B*V^pN;G&#%6PT{IFL96lMI1BZEze(tRqU*?(05T2O{ukgP@JS*% zWGgJ*4Zw#T<<~huvz*chw~FomnXv!AOOgSmOhPI2Cm~TJANXos!NcOu6cPwb=?sA) zI_0Z*>wF9p?EmjqyAT}y-zFDOSA~g_3+PP_|5r&mCr51B`ai!AYAd0zbSEGeWkbfG z?1eQXU(FSl9HC$W)F7dq>W;LcvCBJir9dj^|DPT5KO!lP|C{14x#Z#kU|ax9&<}Bv zODVL0|9_tE|1u>Y-~Uww>a|E|GHs;P#6@TAUQpr0Cyz`?dH>fRL$~Ublv$=3zci|z z;Fm_>5$z?dbD+I!##ze|D{3!g_VSQR_1V&T9k``ywxm`E)$Y10L`6BGDoY@beyzdR zbqa08Rk_}=&{bLx1_7ar>olssq4~Pb;Tjd-P`ljMsiNbQRz{1QGy8+5yS?^1wgzy? zbSVW7=>HF!+K=sji)KkI64?G{`(Mxxkqhvod_f!F|9{W`puA3`!Xp4W**j{uzJC?3zcA)oE#bIM)7Xj`BBiOv?rS|4$|#J6zwif`*+8Q8@;TYJ?$>z15S&h@&xGqHo5$Eh69|G#Oc zwOj}|mrj$D3g`cD{tr+)RXgxR83sO!d5YXJ24Sb&mIwa-ojAZk;ew!YA!v1b+cUKF z*4-ae`KWku(hpKEDb-OknawM+e=2TX{>j6>mA)G+-TNI2i1Ms~rQE8Xr+u+4(zc&3Nog+*lI2A+A0D%r}@ zIT?-qB*`#%(BWZNPBK=4-^3FJm@T(3YJqV?Fd)&W2Jxf5m`=&WDJ(D~hNM&bBxA7u ze-E)KU;oGTe}@jP5bB6B$|D-a;9@Q^N@W~HD)9dw@b$k+brIsqMYoYLD2fo*@%6uX z8kRQXQvNV`L$<;e5j>+NvH5@)s@h0JUH>cY|NPaVz#nhM7XQo!8PX~JNnnCVpZEU+ zS}449DsxDV$9eyc(3Zw;>8Mu{xKbAxbV^Z7rj1x4pZ&i^W1r+$`WGbuk*N$U5l-a# zGDUPQohGLqhz$)OrQ+i4z1i5;*f<|-x3}t&=A+?R|Dl|;^EaQ|AB-LU`~AE^vYh|N z`F|qf&H2AW3)|w%AoX5|{sa5}BfS4FJs>4YXDHKw_y4IMFcTPNPDzMH#8pBq>SO76CGsED1XVy*9vgO&l#xrIkcIFEZ=C{{a*$_ zZl^L_H(IW&l9(Vmu&}y3`kkv!*G-t@W=SG(=+Dst(PGw7@d?5z*~t{=TJ$nVTA!|U z=DyvgN%CattYrBl6+TW*997FV0R8_Lkwl1SSgjf8O?L$00bvSwqD*89TgVpE?vzZN zP8&^{0{{Z~6ka;sUEt#YK*d?2(YW`=uQ)7q8w(o*6Vi|Y2>8q+9TIk)nmqZIkzi}P zq6eBJZD_`Zhn~DDj8YPzSxm1pasUwY{~gx<%q2JnJUN%}DFbR8`IVkmNKIAp!T#R@ zlB#_Ex1#DYInQpk_n_9#Occ!9_S*U2lwN59l%ew8MqS%yHMu!nfza0Sf|C>#fkjF`5If~9$ z9*JgQF4;n%1D;HwQ!)mXkH}QwD#Ki57^t062s}Zac1h|f0sr3(OBU`o!a zy#FVVPvNCYQ%c8(iaGvAfm2E*x1d;>EWrOKdS;O$uP~q_Bm0YFi6-f0WG4l&MUMBi z58+E$wqP;38T9+@ZYL54{n>~uRw9gweKVjD(>nwH|9BPu6V!$1m~U8wd{90Hp{!Ou z22r^sO`txak88{69 z`u~8SI-mt5<~jT);6Y>}`AN7GL65_K9R3sZLnuV!Fsq92I^8*R3jBYU;Qrxsv34R1 zAU_$QElRT@m}g>E(UEhiGXz6^#sMr&9tAYL6oDa{d2KT{b2)q$3nRv74s;|DSOFuP`czwNHK$!G(Zs z5nGfCq4ydqMosc2TW2K=9i{9jt&Ap)D&+sZS{frtYjQYX5{ba!01gKT`XOQgo+u8p zXbssy$r*T}t0DP`CUPh0lv00G09Sr=lWXVW5hW)8*FOOm^#8p=5{f?*q;4LkJM!A=CA#abyfDt&@M=lJY|@)# zw64v}Q|+}I4{pirF)~g$&6{S^sWZIxjmLmdFaiF5RI)$fNn>f~9Z@SpK+vB=q`9S} zDJk%{)T%)545CNx45I+Qqojr2<-SfOW|IRguY?jT&ove>@_4nkUR#*LS8r`tv-)ed z5$a*Erq9q;OkiOEf_#{l$994*2&u!9;!J|1_yqp{Xv^|_V$+Q{pKNnN-iOvjr_Jk; z*iL`cqob(!(P-5WK-ybFoa%3#OyZuEp>+$PQ!*&!1k4A+YEWXMIp|e*69+JuJ-?3+ z$IC&lef4&FI0FBF%t%==^VX3~GENd1b$j#8MW z+}hFR!s5{*L8sN-hSY<#qn9q8dua9OqmRs=9wsH}vQ?L}NSCy_ovZC@Zx04HyS?k= z3ezjy?oP1PIRZO4gWi6CLdmBmesy(gr=M+)nNP8d9cs!Ap%D@jug3U6{+Hx{xLusI zcIS=nI(6vqvoAH5R~Am@LtC5c8yA9W?fxL>T?qPn@%(hs6#41;cyAUmvHkKxjvqZi7TpAAWafCxZZT!=d( z%s#Up^apSwA~Nw|S+!hfyBAP)h5VmCiy6_mYOaH=NS*6o*R2k=s)3(eE7U>#f&RbW zE$#Rc0Ei*7@MGb((d*u5ivV^|BjE@9|8c2g-`S_PdeY{hIeM28>2bR-5ELj z1pNPoJtP1K_>p^euGihA-h+rJkQRP)MJ+HTjE5P^E{mLoqf;^loi`hO@Uu!J2? zoTdXI8G|YZgrbYx6ybT`|Bvd4Q!-8Wxms_<0q5yh^J*|qSSWFHvOGrj&|GZ@gW7!( z*?m6IT^+=iZR*C-B!$`B^ICNd?5U;VOuu!n*q7NWk2eYPF8ae9F)eNc{y!9Zd_>kr zqf)5|c!G=tn;{y>r}7F(zVTPk8bLJuNelsmbH4GHD&UH<1n~cvQ2G?ZxVea!G06Ew z&>5t#n#!_cQZ)E(?Ty-3qVW+VL(VNs9vnPA|6BX>zvpkJ zxc_th6MNU!x9h6}FGJ4uAlQa7AsfA*mO0$i-qB?lm1Ia0*WmyQN?sf7wp8f+CU&;L z=21a1cOk~K(FU;p9|$$z@Lza9%eiKqv_u<1eBmR4i13*wZXnG&967LbZj45$8``Lm zcmoUce$6+qRPf56Iz$P4eoJwMc6b%||L7nf#j^+`5gaYPn}q|F&@#$mBKcwzeMawA zX^Bwu&ei8CEv1RtkwTh8l+d5q!N3sQXil!$#ALo8*%Vxj%Q4V9Qo5EdOc&u4dlTR~ zk9D4;QSxc7Q|TfK!_mZ%SAAwR7n@cj^U;)`g=OJ=*aA8Q{$CVYT#=T!(}!OgwNUU& zV;fIKF=FTE+>6$IGNobcS7Pit!`xtMR~?dlanIH|7suqdt!I&_@Ai%d$4i2aaZTSgL7X8|0k2bJFk2F zq5GbF>4E0LYHsCOH?~^Wg8@35PFdE?Tl8z-EM)_^Oj%cfRaaqFm+m5&B#p+s-~Dpy zFo5vAXPXNvB>*AJ=xuji_qricmrF3CwPO~;Ha$`uCZ-dqG(iXvk%83tuYS38-w>(! zl`T%r7hwB;57htq295OD{I}Qxl&*3TEzZaWE&h)v%@y@vHzy-}DkChp%~k$r0LXyD zWyxkq4%f@=tqN~gCSNC?|Fs;>0d=K<*%l)pi3QjHf0*^Z z(f~1pgnAHvl%f2x(JQgY7<2^0vaJ6t@b_atVhw8zct*pq@-v0~5aHPv7shB5&Dt^w z)&DeCTbr3xe@e)C06ZQHtRs1uNlpbL5phu6J0&2dM1~;2>VF2*|Jd<=i2wa^sON@) z7IQSAt?F2Z1slfRE{6m&{vR)dNP{6Q5gljeSyqyx5QHY`bIRQxOaS9|rjE8`|XvhV( zo=(@V&-Qg=MF{|~|BrNcL;+AM%Sxaw2x)`VQj|UA}`@Qzy z_Sv0wwaa`_2#huuHit_V7dZqqzMs%atX{!3J{&Ixz4q1HHO@5!{y(X)3>N^`@4KY( z#V^*pWGLkxmX;U?sp_hZLEG&;xbD8jG>y~_UjX8vU*P}cKoTPT77=BIDkx!df^tP- z+hKODKoGaX1^oet1T8R1X`%XZ&vgwRO@Tv{pU%|CMaFwN75fnvx2}bbl!i-NyCFV- z|5p>alDz$=)CzC^Z39;%C9%4?mvz|w+Y!h8L;kOdytm1+a!PAzdyMwlIW>0%Qgg>W znG;*(f;}gu@KMAl_@5d-{^2AOVpAKQ>DIOF0pS7vNRe2=nb>vF;my!2fSz_Gk7VodQxL4~*I0@DG9ipA7Y$%GWmP@`Fl4Z=K2a zV<&SLtSUyrO`#N==94j}9CZQbqL+8%FJWL?2F#m1RdE9m#( z!ol^<)oz9J>c(l^PMJarp4;!V&TMa2R}VHCulP~v{W|%Z^M5%1hi^~C z8}YTt{~^|X=n*Pnw{8JS)qrEIh8tmfV2p*#4(mvfP{QL7F)gRUTRS1*2!IiIIRRh> z5&*`{G6MhqGa~(uD245R00|K@^yg?kWBWgFi0g6S$o9V;m&-xb0spVn?F#iwsE-c- z5eWyx=P?S4G1Za_6g~iiZR7}_!2geh`o9?DQxum&Py-u@G~r|?P+J}&=T zbs-7-f0pb2JgfvGVTOVQ6c+&F0$_%S0h;t!Vv=gHC2Yv~Q1k=;KY@FLx-somFgwQY zChXL;yPYVJrC;IAIwH3mM$abK{|HIn;491rscNuDwo}@~&#GR#J2_%6rr2x-{{Jii z4Q-+v{}b>aW-$3ls0Yyw$NxC~C+LSzh{j>1+3EuRKL;~Y`MrGqM<@&vbGrqT7R)R7 z^8Fuc$5v^jb3}i9|HrQDJf7EF7*p^7|6hV8iOHSwf32e3FWeO6GXS<=oyi9^d}Lr$bB1W z&?(8CytC3@00#R1?SkH=E>MevC%RQ2Khf~*2}EXXt|Xf&nK-q_5wdv$FhsqM=rO>@ z8-PTR0FzXTC4m1oLZ;Ft&H+Fn5Yuu62LL$$DCnmOq5=5-0`q^2ErOY(mE2ke{{L%Yu0+>4h?@%l*hD)#^Vof|6&5iD;DsnQ^+sl$6Exe#Ld)O)VEqGt z!2gf){ojJ^3|^#sh&Y2U0N@J%){fQT05I_X#qmg=^}kJRW~QQZ?VR<$N$WO%BT;`b z=DyZ>wv)j8qtpZgZ{HK!?o=(+DH+lgV0K$@? zCieeR5%qiMpvE@PQ2r%Xne6_v`(F?DAMXE~-(>y|A;A0}6N0jSS^ev`VpZ;qc{Wi|NZr~ zV-^%q*Z`8%*{;>&8ck{MTnD&UnxosToEZIX)%9*^bUW8v$QmeV=*ogZ15=7wDu#Zo z!KZfT;xx8bG~!yP6W5O70ILpM^ZCD_7i+O8`Ss87- zxQw3M*QxZtD9RaX8$=wXKkUwm&Tt1`-DouC=HAzsd*6ZII53!d8~o(Iu^{kEU;5?8 z58eOl_v{~EUO2vT`q5jvaF=$_6IDgmjy4w-j~)p+t?o7iS=WwUx_IuP)uWF-GJpE9 zt-=1T5GGjI;{OkCkRo~E^4!7u-u>X>!eTxHtY5ka*8^Q`U)%3(4PfR-DxJR4?d}9y zog;7U?viVWX6LKNx0EW_si44D54kOhQV$j{MQk?VhR{ck}(ghEQGT|obT8=wC-B_OB& zRDpUeQkqN~*+!iHgCjLVX$1V=;rf3O|5JrOnv}Qz7#9GmM*%S4|Cf-@%lSW?|1&g( zgl{^U?N|okjB~=kyyIZ zpkxd>ZPY*4Jr+t5^#9-D^Z(LJ!sOB29|SWZ;`jnEV(OJux_LxqiUQ!k|JNbP!3jSg z0;ujtZVjDjwSs;hZUbBIT4~~j!QyZCs%+GGDReBxiBv?_coX+zE2PfuQnlU%_|(y9H4eb zcG6up!BB?+m(j_!euZuIF-W_;2g-dmmdY7F~VNLcUw=7NlU#|ZtynhX%;R6y2%D@;c*uv!kK(#Lb^u+G?^*@>a zng4|Vtew2uI3H}cx9V~!iKd|RAIhUo!~gSd<@lUF7}0`#lx_3N7Q|%}OB|Mx|K*umCU& zGms_O$SCLt;{RQh|F37fcw|;O+Rvp^!n6*J$_4){-p&}{yR}#C9rWZ&J=g2*)_>0g z`2W@*fLv&l`{7_83(wQ9fx%Sr|W`fav3d+N|JRlNH%tvg_UnB9@AmGM=zu?; z|Ksz2bvgex|HVV1w&->h0K@VJ1dgsO)o03&4xeS?rjXI-Pa?FC$dWl-oDQh)Vlh=b zSc+O;0w5TeNC7G3Luo39nUaaq5iF!r_jEwe|KFf3yLW@r0X14D;suDkl>9OVX>&TD zU13!nv1tl`0snu#62UH7XZv6AJ=_0m|JTO;|1!4!g+7S>s;&d1%flCdg!rUZk?v!# z{eJ}X{|kKn*TVg?b0Ufh;aGAE%BcrDk(PAlf1kx`z+vjaxI8R>`wBNgk6w4=KMd4ZYCsbAzz6#j01S4gI$O@lRGl& z+!)Oq3n99w1YqF*8!E0PyhaZHW2$i?EgkpUs18v=x=snT(P`uUIs9+ud<>&1-gc5E z{NDrqf38}WR*XUE!^?1a`=7V}L!V}R(y9CQzsUdpI~@NHsUsp0WDHeN32^*Bo4bc4 z9P2Is8jaWd2+|JJL!x%1-#dz0XeRVnonCJD+fV@(YUytDf{kAH2K?@J0^V<~$9^;K zHA!8A+>HYFnn3@*C}uP%+ve@HUT$yI|1cI5V&{Ngo-sK|=St&+wC}O`WGk%H;F+P; zj0YsH3vJX$MFsrGoJ765!eEe2Xh?KmBqG4py;DMW)Ivj$;DTRV@Jq_1(+@wkHQ3*M zWIn#^E9CltsQ-D_+`-0y56<=BKQsCF^5Q$6JaqrF|KxK|HW!*prysqwyL045&=Y>g z+R^61;?W~Pr`6qtDk*D6FI_zM(CX1gADKTrgr_czbZ$hvxVgTu-nr2RbL-fh*T3`a zFx*QIh~ZA;He7RY@j}qwLuah@$!XfiA~fmO@Vz>p?K;!!I-9)YIP>j#cS5^$6QKCn zckX}Zc>%>^0*c3TgW^(AP&}!v7?>47-vuexI~|Hg8jVl*X8_8rSR_!CBl_ig@Pxe7 znSJ;~*>n~zk}a_9NHnk4kYVsTp$5c#yJzMe`qYYZS&NJA*OS1^ zv#h4O??vi}Y5;flZ8))7Tf5h zqd6h)WUqa#{%)Vd%ZTvn#h|xaV;}(k|NY2Nz{39R-9h{6?YDKeZ)-M~lUl4qAGN?F zKOPB|s8cd=3JWYE&$L=_%P6EUu6M3>E1b6EVU2Xi83&I2e$azt(Dm)<0C9||oqc+% zcMW!g&+T_wXSTO1s|SJq|8L6y%3}C7Is7>ta459hHcUDW&4ukfovvS>ZCk6TbU@($ zuZT#g7?$^tMLGgbE=Tw}kkI4MoscoW$Jc?lT*!3PJ5`nd{(lFMKys9`|1ZF0U>%-$ zVr8-wc7_bVhuoN7=LF4iN+Vof_W$8PM*aQ&e<+9!{tyAP|1aQ?Rx56>|Br>-1aM^k zU#CHjz)oRri2VNpb3Kv&54Aw}FMkL?;`&OMxW05M&-DNE5P{sfmgCKCG@k)wVUU~F zfNE71g^?VR@ZB=nlW#O$|7HN=aty}&^8agmisDG4arplQ`~Pb+{Ftc|2tj7<4t{B* zE@&@l(uDSsrl4pqX~Kl|5|Kq@#VAs9&i0g^q?B4oS!Ay19iSPzPR_V)OLX0!=eqT< zjO%o*#U(rVHo&3h=`gRxG!cOR|8c}Oq1TyR#|3sud71dr$j{;MpFk6Zmu_=XX@n90KxwMFz5gC z{a^c<3rwX5XtPNT5|2XU{QqLkKLG!K<=QcelC+S3+F4(9Z05T*a914r{Lam9eX|~D z3C)F8dQ?iv$TgtQaI*vbTAQyc0U+(hxU1x58501UxOQZ86q@LutbIx= z#DGS`ab|z;bhp=j$JPLf$xi1GqesvZRtNt7N0`LbBB39h2gd8T$WF<`DLW$kZ~{OW zZO{=t2KYDufbc#rNzRrMVc>*(HVUUv{_lL_u3!%K0%rN|g{NM8?BL;dKe)WOu$WId z=~lOMwS5iB0^IEOu0z-j)mAutrQ6*JwmL`P#L1wyA7uLK>efy_+a5EYVi`NsSO#%5 z#8Ixs_(8^|OjC{9#ZLBbeZh-o4;_B?=T4nGwQw>Y+JgG>ON-6%3cf?;|CfON|Ak0| zc+@-Z|0%i7`+vOuSD*dAf7-bgi?h%g3{4v42*mOXn;L3g14%}UX+mvpkTS}3ce%nd z<06g(S{e+L-rvMDq!tKNp}Qa+Wn_VwY%%Rl$;2tWBkm}ruPH2k!-WA@DrIMdwGG!?XTF@#^`T>z!DaBSkyf zH4*;*+}!_Yz(4#q0}%N6FML5)*QOTPfYSKZ(3cL` zZBfGXYv^uF%NlBbzY+ZZZ-Fv~vCv2;jdIbC6gtFKK$ZfR|BLXH3mS^(l(+wj+5R60 zm8a)^2+BgNW|2JM7bHj!J~OO+;{jo5|479c)kUy?70}-0CzqLQ{@338e`5E^{XwkC zkvTBh{s;a4Im&<7-Pt$&M^g}^naVCv*%d+$=OUB+A#p+ltPbp(8pi#)#m!+W#= z`2Qx>_ACHc07QHk@?zCx9pC@yQD9O0Z@n?MJ_Et8JeT+juYBkV@oLjk^*?r6f*E}=3A@bh@ z{r~Mq-Wy&$F}9?6mg&A28H3U%qUOgr-;}UAAf)0tnu|>dr$>*J(VqnA2<4L&n*#p- z&hCy#JGI82B)?;K%$RLxDUvBBu^tn4PJux{MFvK&*$i6yz4qYt*`0RK8O(;qJ6y5| zo9@`KfL>ExZ^c)cL-d`rkJ*thMH$1U_t{Or3lWn*jg+rz`9L zgcfHK!53MjSgsPI(nHx+FU#908H1X}NQO$EhaG^(i6G7*`AIaN1&(!h0D%9$(dzqC z8UwmkkzkGzEBS2UXeaDkhn~3p$J#L$47mQsa6>;c1qA&6U5J)>`=7V}V_RtQfLqbV z5O4omR1sqL0o?gF|J|JbuL2Up(k_^QpSpQdoalw!i*{>k5L7r0?Exg`{}+`1ALakN zr!n`QJd6|LwXq0%HPjcO2h;z4~e)+VJSqP+2>hX*NUAphrIs>_claUg(P2wL6V_6%K%+1;=7 zhFfw{=L0DN z@cBGO{m)|n|Nj7=$q>#8Fhg<=|8l$E9t7LNyL{HS>zkRQR=Uv(HhSF~u<~vv;0r+N zaRCVM|4+01AMwAYW@pIL37**x`U5Bm7?+L=r6I8aHRzPcCQdH3g`?B%)i{eXmHp58 zKc?#U7{-;Pe$M}?eg03n`oI4Q=L1BVu zx%+$kBuk)^m5M7m}C)KYW%==i|u}PXDWa`rkb8|Bpuc9}zGg{}X(uD_{C^wC~8r z{{k%JDBuWKU2yF8gC1mAPAk2V&eSnAsRhsNcUot*x2t>83h@7rh5R3>9S7oUnhD7a ztI{i`)8u&M=l1JPeDHXSdUCtWX(yIwlGU39f{jp>^0DgEMUO7n?r;4IaDCDo$ZuFy!u zRsJunnNw()L**J%S|K6;2>?;Nz1wTQV`~7pR;Ao40RI2kQ2!SrmZmD}q|K!SH2ePo zCX}8N%Rcu1Bd*azprS5|YLN7;JW5r44f^mL17V260qE|Nj@4vnZvJTD?VMgpUY|gwH&(Fk$Bu-pP4$ zn8nHU|CBPZ2qzDgX3{d0iPUvJ10(MLm>TCwepl28PiBYua#=nVjs%$qyj%dFoGy51 zHF$-rhG+eU;-DvX*E?~r3>oz@f)=+s{qSR3gZnCOio+~X zBiX{Ch2J;GrpNaS%I@cZR97Z$7pg_VP;uGr03bU4mmd3&^U(HQvAHX+#0RjB~ zOXJ{;%YR!%yB~M(h2dlwfESY3B#X>CA5XyZ`JdT1|MPQ0{g0#%I{<)xg}VM{Gabn7G~lCKq@-J1%UYepSs-t!}&iJh3~P9ElOXuP-+66=vIXMMAMi` zsHE$Zj6rP=b59j|#f<*a0uixYPpOH0*_g`kG5;)iYbVotbiRD~my{FT3^*`VA z9fqQEC=uTO16e`g6B-a6MJ`)m`@jHv*b#{}WY{^e737pg*drYNtAF?p@_+9=B`6I3 zkg3S~e*zxTSPG$I{3L9OpvU`vy#FWYhfs*dVP&x@#QC48BpQcIR0)t&YNk|35t>6% ziQWGhaQ~m&AH-WEXj9L1{%8I_M*7VousHm$415m%bNIg=;r|`T|M_K({|zM|(v}?m zBbG!dtyjQXasx;NI@`UVlx4V(&4~jWh?mp zzlfvKhHxYt>t6mt-2eA0%CHq=!`I+y61aA1kgvf-%67!oM$TppwNXDQN8ma21Zr&6}NP^Cw-P#(|ICRDQUl{-M z{=ZP8dY~v5w$G(gGI572;r)N!|BtB!<^SKixWgNOLvtFbUfuw#UF4HD0F|992wqS- z*#E!D_P>HlEFp&yA&>YU8N;Eo+5We{KO)?UU0UHW{?1-6%>JMM?H&sN765z73iQxw zx}b-rQw{(WBLF!6KUDNYC3}c97Y<0*DVey#mSF#%{r{L+kpDmbUy;|#`~STEAD4py zDTq?T1{E|DH+lb`Y6OB*@c+NQf{5h=fE?o!MOZ&<|FivH9t~3j2eADwLek-;gO-4; z@65&)Y$X4vc0&fs#`$2oy;c4SoRR-I*19zypd~-Co8tU0*Z&h3&_EhKsNMD#2LNUu z05JajpUnTv|3U!PPTtL=0Wd!Q&;J(t{}1#2AMgJOH6Z?wL2dQPq^!hVip_x39T(Y3 zQJOYVQ3(JL|NHNF!F&Li&;Lbikc1Vy?z)HSt^DQfl=y1Ya>3-x@qY>(P3mk8fd7A| zVyRSPpg(Bs_u7NoXLs6ggl0BQybhPl1wcY6MrlRY$&@#+$710)l|2X^?I?mz0kSwrDok$E~nKPb%N!KYEgUVt&X%7EU=ulPCXuRf^ z^HXL7Rjh9!wlV;YX!c^z+pWK=<)MW71AuS_Wm7~D`TClm|Nmep@X?rj{};f7qA0nG zbf(n``u(>DgZ0kUG(}mIBX>)X@WyP+5-avCv6>;<3O@3hWr zZ}+A%!R!$N{Qrj${}*G-WxpZ|=Z?nX<2S0kF<3PCZtYe3Mvdegf3DZvttyi{SOWO} zkJgS^BssN6fYLhqyH|qV5eSN`9@lDQYwwm%jefV%bi6w;`rWGQ-O}iGuDOskP)bOw z?Z<`PDF+NzPo`VTNqNCrB+4~>oYG-eigm8&bJFJPg2Ac-*SW7##W^SpN9&i;A3u6E z6acxa@o?k7!MPs%$M<*Vbsux+zGq*0pt-Pg`q5jvJ4bE=y?(pfSv%TXSUh?p=(M`q zV7;y#y>#*1L#sz0ePsUhV_Sp$T@hi%5(WQ%c!MI4>l+(et?Plh#!zo42poTIo*C4; z4!>7|%f);r9YSqsbu?oxIRxGby-&Dp`Qu-1y%s?D-m}ex6D0s4$p1fn{`N;7yzj+l znhVGCnb4)j;poxT_O<=q)&OV)L6YJsC(OD;ic3XgCswa?yF0;FN9fK$Z$H2wNcQUL z)=pnF(*zI#nt*fMH`3QqJ;d$e`X7S-=MEeM{`avyzppC{~{0Mr10lI)Wg?#ny<|u#y}W zjKxBtUqg4we0K$VDj9*)EXQQ)bcH@38ubc@|NOVIY&TQF7#&vS@_!KnN(VtB3=~W? zqocBg!=;d)OtVui|5r@;KREx({=e8#n1ZXG3ty3mQ+=r0h66};xOjW7%J&E+U++wo z{~6o=2mSx2tpAm&BlJ};&+`30+OBbI^mt4hi8XBGSY*8XOkrOPfJCOn;RwG74O36& z;}KF(<$px|k3U1uMAohsnd`|1IKEmv6xTf8K>O z9%~L@VqrH;Nje7lx%|&oRj)I#QIt-(DXiAg$)1~ z*@@)|ERKOvSZK9RD*z5iOkBfCit;~KfdBt;nAG2Fx>>d96a&pB-5r9tDMlxWu%Tt4 z-ZmHM_L0`uBVybmpK^BXm3=fLUz?Z@WQ#P*guqDPVCX)BKq z1Hk`tA@NyE3ymVJv6^)JE?Z&BLA1{mFd!Pk6)=>l$+rTAqC%pFJY;HR2vhxy*XiYU zzYPTspmfAWFWBgHZ@}+vC&;hbBJlqghx|Y3%yR)px=snm9rgqt{}1(7+91i}eEi=q zl93`yN4>d-osld7{C@yRTCTW4AT?cV3@tH)kh4#3^{zpv`*P44bSqnB25A_jZUMAv zq3f;oc0nm{B{}|9Otn?u|AVUjx2^~Zru~{$T#0xb(>_;Q1DFuGOMenQizLSeS6g#r zVEEt&{C|j?&j4JgfJSylphsiSVkc2=#J3EkNJ?LEWvJtgI4N0TF2XmLPRYdC-9ooX zN`Ozmp^CKgaJOLp?_({}cQmucl@Hk>#ilGES|Q3J&;-|0p%y-)CYSsym(B^R+Qvf5 zD8?ccP_a!6o@E2!@qkeCXmoV`f2T3GlkeeI?!D3Y$kwaG0pK+_0Gv~$9XKu4*?(5+HWb$|Cb@zm2LKhcS^C?%8v!Zh;j_H&Mecj8gyTdY} ziwi3y0AZu?raO0D_sStsmrF1s>w%TjTGFM}owZ*bbzw=y4QSe*e7W_CAyQA40ECUk ztKKcxy(AkT7OO}4fsXKr`~>^Ux`<10P^3DY5@(h&0D=V9|Ks|9F}1|?etI%t{e|41X90tqBnDUEiIMCJNF1tmWK|Gx?m4Ez7=|4Y$QR#B2%O|bv(_5XqY zU(M(LW0EhY@*IQWhb0d-L68SEP8Uq)D~=Dx894uc?`s0-J5ys4aYKa;q&b2G$q9hZ z|C8;h>RSUB`22sI=_?do$laj-KT2vp%KjS4`9PX-llVYdeh1P7VHTMaMFyulfmC8G z4xB{PXB{**fmf8 zn+N`XZKVH^Wa9%VrWPW+Lq!0B9v?^vu#lsG)0Mjuj{SbngVXTq+taD}LT5?@F-Eb} zg6H--tux!()s3_O|9?!#{}Cb_i1TO*tI{i`)8u&M^Z%jFCoD;Rj%I^A4y42`D#2nd z4Zg0_LcWx0?U*a~o)4p1&X5tx9aBz<{NDoyK1JmJeo7{(zuZYp zA#msLy>NQzr3c{jQcib}7MaxT&@q|i|GxPjzucN1=Kr25MgH%b*FgW@!~6eH1VlLf zD*R

{7N)+e;!Mp4u09(!BrgK+gDZoQ3`W*Yp1WkpB@Q@%}$?`>QV-dH)}8^bGL{ z`u~2Z{it5iP|o}R$~55pf8PIJJ64zdf2jYH+%V$uKf+5ebfYFJt)7Eyh0Rj~@In&j z*f~M7Z7gI0@&5m8?EimUr2i4-dH-MVA=v^TKZyuH(Bu7o-v77CaYQ3l6%k2(tRM&t zdIWZwPQm_vL&*O{3@!#X)!oEkB2c3vp#FLPKSTi$ZRF=@Nyq#Dl(vALm7AD`AE(U{ z!2fTAN%Q_cA$sz2G!IyiY#|B-U*7*;J66fsdrB`S*DvKSMh*P`ppZG4Cl(agX>$Cq z{tr=4gdO=gTK2L2w}|@6>Hkk){SOczL{EN><^k6KamKDjM=m=jt^Viyzs%J%=>Jdg zcS^ZqG&^u*uF&v_4Jy3lT29wcntmf@%9Xhas?0T=s+_?8Zyr)CVR8>$SoEH3p*$sc zLKG?aIa-ix27Ph$X=Gydr*i;IE?@*JFB=aiue+GLwcl$GZlB$02c1D_fs>_Sw8@#dn3^c9jG-4I(y4uBE{Y@M zSd|m1lK)+kkwN||*|n9ep9S_bF;%trpt zClZo0$aFli$=gci%zPr9{o=utJS9UZSLQ=OR6jnY;3kZ#+fd1L3E2N{(Ywj8^XWSl zoSDy=`8CPRpU$bg=>D%;;rai$A8g#3*5UO#hnK?B*p~ z0>Z?na)JN<%5WU&J~#(1k+>kfES)xj7N5-FlQ}+)swQE}dZd?w)}T91HB#XJW7FgR zxdJN`Ub={ONIK5UrNGf_he|SeE~j#V|37(fOho`G*pT+L0F8bPKvpMRmX}e# zAvLRatEWc4BNZT1^T4?CtzE{d=9DSe=dn)L{n@!!T1C{GSU{HlWKO7+BL-6oG*kjS zm}oml#QQ?toT!&@u2fr1I<<;-O63*-FcPeMGxrSK%)Q=;H6GHDvg~L~EdM`yZvrOQ zbrlGgWEqGgXR+dh5EexcG$FCvrL9{a*->Q6G{JVGmSnO3Q>uQF3w3w3tE;pGNbmwC ztbbSr2n-~_gs{U841|6A*&+T-*fY#9Gb{tcGQ&PBGv~fn_uX^Py>;)aSMSx^PJe#3 z>n(RV`#txZbK`@#Eqo0OrQ9DD?WXt`3k-|MK%5Es|5al~Q*GyBX*7nN*~`FQ1|as? z^zyv81^E9?LqgD@BeBEre^%522$lHENHj+z5dJ%(#$zobo2H1?ror)l&4~Xyl!zK; z-f7Tn5-A_`y9R;E*YHwSBhp!Tjr2x;PBz#%%7~+kY7%7x`v3TRB8>>Ahunql5%#lj zzE2HC>det7>4U02)ILWU6Y=Mlx?boPjZ%&>HlvJNt(X1fB|ZQ|nm}GNzU)NKX@=Q2 zA0!;>o@Ur;J?9zb|Cs%m|IM6@VnklS#zJ%Wf6pmN{nQ-ROg>)!D+eF1|9SmipY?wm z_&jmk1pEI%TAG4V6P2_0By(+?pxM?Ja)Ge_zZw4j!;$_+nCJa}!Q@0HlApvqhM>p$ z|Jf|TS59wl2ckyU@|>!KQH(oKEaUCZjyAie*Vd+qxGz_>9r*u`g#6#gRUT&<2;5V; zPb}#;%fPe*ks`3#fyM9{MR6?Jfd7vI1*quocKc`?s2BMh$cb;a zoz2Q1$!Iuaw5~o~qs=`k9fvF+_`0I+7mrK^psQx~k^^OBoTqCpB>O|dHrM|iFFhSw z+yJncxnqV=t}7~&p#I-q@%Ent6ubY~{U6!q<7%yS-~KxZ`v2#F`jLWS13*ZFi3U?7 zD%@6{MFJ}W%VhwhRg8tE-=#2g($13&fUFGwk^eWJlLkVrn#MEW zr#Q>70a=C*jZ`u}(&=&q9aBr3W(fNK4}g5*2O%jNO9-Uycmq&?%aCJmZ}K850;)xH z8-N#Y=GZtvv#l>Q4c-8({{~>I^}%1B&gsOCnhjUrBpWVU>)GrB@+M8F709j(`AHNK zlH%@78u0)9+Q4-BNX>v9jTU7^^a=erc~COEk`Dk$CZD>-|NXAT0I<oJ=hAVz51gqsKKza1Q)eFjKPufY-B;JO%#0C$I1oZ#C(c(8ES~W>v zc-<)QXbTG;$S>yIC>c0qN5s4wTOyE8;ico<1-=_wy+Jd)BxeWxjT*Xxfd5ZN{Es)d zxd6y4T)_oEvI+d-0w7c}ONFYLT*@t#LInf=ub>9<3p5%FnfzyD;arFD9&B&-`kPUV zO3;O%eY`*h7#EGLfx9MG7Kp*&BAG?S|2p zucsO;lipLwIt~DAKmg#h#|(o0|HKR&%Qn)6d&sh|h0MyYrjsIcwMs+^?sQzm zfwK&h$f2uwKbC4Ffu|>(x(5IO|1WDCGq~342F;0nUF8KpvhWY98CZ;Hn1YLW0pOAM z!2h3Q$^R=mVlVbODHc0so@3eP`SA7YVhbtQ9QL}MO2;EgTTfXcn&q*4b)_@tYy`t# zphY3tKGQz5$|d=g$FP*I;W1^_IFVAezL4TQQ_%c*{U3SAro)z%=*lijc>T}of4Q@Z z^Z!02nE}Z0zsj4z@xL7ZTbuab*G}a{=J;O$F5+_(HUu)}tmc9Isya3)$Nx4W{`Zpw z^}-(_V2=M0@Q}t*2p!`m5djE#9RI`dKZ1S;g=idRRS^ZOAi@9lz?imHLCgtL9 zP6!m&|Eb1OJtR_#X{l&-r89iweCJ9iN)kp<0RNxm_@BF!4NDfk9=&BT{^b`APYUUS z;uI||IR3}Nn*d=&^HvPlZ~*u8HJ#um3i|L~HjNv-nSG&Y6czt-8w3FDY<+BN$5r^( z#J^`>^zf}Oe(dR&w-*kz51+i}#s(ac7z{+_+^GZYLkkD?2b5VPk$aOold@x7-65Zjdm;_>5?fw6RA@-tF~g>VM_S#DQLjgDGuwf6o25atD7 zG)2^W{AVaRbX7q`3zl1EViSE^gKzEJV#;(%JkPXl&O&)l*>lMSR_Wb;`+@&23W6Ui zX*Ef>qw|1#MZ-7J-zFc(FXr7S88~G}#Js%yXA^ch-d*71?LT6y0LfR2C4m1Q4*4Gs zoWp;FKqPEHeiFnZv~&0mhyTP1wd~pw`2SN)T6YllnMXQJ5K-M^q+d9|EvT5zn+i(8B0K9#Pjw) zu>mW$vW;+xQOf84#hJbWI3Z|&|38h-{~Pmv^=Vw5TgT`Bg(yw!!;x^Td-<=E!2fUL z`hPM1V=t&RvLy0`mv=`)5-tk>764WV5VH>W|2ndf1le%?KaIT!z-nM4Z~<_^8FXK> z`iM$ zarnPQP5TwK#2U8a;GQ1AVYdM?YuxCKqFL*ysPO-x2>CC`eshV|+me8kT+pypqLC6Z zqeO;e377wDK>5#yMk;>>1@$kCb2DOUiR*ug{GS~=Z)w3l{MSqfJn^R2?YiTsN89Z~ zIb|hXxDRB{<=&OipfiM&F_b6d5LXr%OWy{WtnyY|c@=5%4YE5{`BJ~X9&|SMLqySV zFbXgTl0CZIS>INl#e5tZF>3uT;2gJ&faB)>TUxII{@<|$|8f33d&e7Zy+dRHwhtYx zWd53qMp7pMI`ZC(B*0w*U3%h8uOIV&PN|)h<^SyRjgm3B zLp0>Y|E<>TU&QslggaPY9nzn~TZHWDGAOF-2z5U5Ts#tMsn8jR6}d}UFCCry-3h%- zia>(i6!TQx1lsoG#!8<6C=@;!KCvk*^c}ttex+a%-qV3>FcsV|`f_uU`~vqwpf6u3 z|5`nlkrHT703-0S1E2v8fE4F{cDeo!*Zb{znAB34j%G)le2E!^SA(1VAGJ5cvN}e3QyUZP~{K0Mrtg z3jlBdfO-@F0RI0>(0(XZfD3>MYaqE+v8-V&ax~vSm8$Lkx%T)-v0#lhvkSvSm#Q&I=xd5oe1W3#kTmX~{fC~Dlf@l!&Kl zN+8c7qzHhKea7KG4G904I{yds{~#oIK}&>q;Es|5?EX`*VD}%p|LWoX6ZJng3`I=^ z0TKf%T>sl9C^b=O^@PZ;JSLNT4M#I)*0^b)xg#9Le$+TF!QbBa&nrGVW|3bqYlubkBHeNfqp)bTkE|BWMk zLmekT5Bxvm^FPM?UwsH|KCVMcLfvk#a?GV zd%^|JlMMhi01QVg&?H*2+th}nTC6wWp2YwX@&EaCVDw1!lYc7F7kDDvC{EZQ(4YWD zl)?r;0}Ox^^*=uc)l_znkHwOvZv!{0jc(Uw_Tm!iGhB43@0N~Fe&%Y^RU4Y*lvAG3 zE_zLN;>;jHvJ^(~J8$?rJ zNI!vzm*V`N9XoFY{x1vZ^El=XfhTUfG~$0g08Hoq>};*F@;`|GpN(t@Bt|&@N00$o z6_B6AX@a1~K^kA-(_FB)U;jliqBlM9knD52HsZ$>3% zwi^-byV~2jFz7X7s(dhKIrIbY|Kn!Qk#m3+dE8GaoIJbIi&I{{Oro3c_?Tt(j>+-v-R7pwQ!vK;ESjsL#;0LEq`m z(o@Qm<8=kGR6XiCQE-CzCf<=A^VW9a~tb zw_ujYWmgXP|Ec*+wqOYI&K&Q|0kPLlG^9V31Ni?7*7w6f2Ud?_1gRX&k2IoZx!YT- zwNF+6#Yv-lGDibW=7?CsLkTmV$_4!YR?Odu_Vl~Na#ye6^#KglvqF&5@ib0)qdzCx zy?inkpUhR0ley+ol^gi~3BrtdyBs3HMtM5%(v~Z86Y=Mly2Y4r6vJfLNL6rU?p(B} zRJN|hf&YKkYW!OaQ01auI-J;j4}(zOEw(3r=d2TPWb${eIuWGqhc*^62THAp<&kCK zXLkAclZDYld@40bX=QR_rQc?V>VFJcJ9q7XTEP65KLnoXeiD@S zc;}fDxtI1pGLuTASownd|H3D3E<^hNqbIohN4Tt2>MA>NGjsa?<<9zc5F=C*Krt>) z9h|=YhoE;{PHt?R=dz5q*&}H17QrjOP@)&^=$cu+qG=(|@QbmBa~Uat#za03X=4b% zR_AYS1&s)}T6rK?>vc-6fX56Mnh*{$*YK?WP{e-!#zP|&%!6#Pg|Xy_KaA4>K>mNR z8UI%dgT$l5Fj0JsLrdYz{xey!a!=V&8 z%K*t&vWx}PAjEeTfso2N1i&+KD2OPf3Vr@uYrI)b>PDJvv)2XxaaQOC-3bHM;n5Du!O|_ zuQAl}h4aFB)VneobcWDy>}rCyW_Dg_wQIS-!AN=X(m_KLWJu$s@&E1lviU?B5H0U> zcmQCsw?{R&nLQv#a+E>#&^G}NcV=B;Oo389|J!>0_uCTrl4g!H)cIf1f_|4EQw+?M z0)C>AUwIlQz0se90T88flp#kM)+EXh*8g8Q3?Kjt8+?-~-?B$%GAP=3a0T`7AwZ`N zrp+rZG~ZTRldIiw4)}qrgsSZ~0{{QJ*eW0zP^wW4-?Q3lxim@!PDK(@-JDk(8dYgs zs+?C$Y0GboMqglCl#pwYECKxg<A(Q|d>1?(y5lUv24oom z|9>@1Gnd)|f|@NPUNZ>_(BrxSTvtF)I#HW&Cy}*`?Q8hPv7*wRw%atDMt{7Z*U<`j zQMKJ(2+v*x{{NcT{->|BX$3E>19Au}JkzZR+l`bE!b+3$LVuDT5C-xyU5Z3trI80D zLhuE56wl;U=|RUAbg9_FaAFudK~vw17mgxVns_MwP!H_|lWp}E+VoW9>06KizhUR& zf8jC2oDKZ{wG&=4_!~w^Ioy8Bz$v_@uxjxkh7%0G!klht+!%n9e%OL-fCVe5*GUPy zd!_hK+r0w*|N6nz<+Tc@gn*bZ1P&567kk^iVX*dKFkBe~D}(+u_}$+Ocn7N{J6JV~ zUeRq6q_ZuS34Xe0SRLqTd%-jaqQ}7hUlmDE#4_v+0FV$wSl8AumwzrE{8^2t>?Up^Zx@}Ta?i-;tag)^yKVQlmYn2qe92`u8zE{M zwA`aQ;lzWF-6k6B8FM4>|2JrpY8#k9v}O7(@k4{jwTF}qwTBc(+Cxfq+C$0<_@Uux zMGuL0ld1;Y(dp6@W@0RTTZ6B$j6-8G#0`382pjy2iW>B+jPrEO#Z|H`yLvnh3u+QR zm0dw;WpZQXj|K$(e|u>C7P0sc9b1@X)@4$1{BSg2hyo()$j`~-&C!54Q15(MLZrNM z{V(e5%LNCyG@4x2@oC@+Gk6N%Wm;6GZ1MZL&EBQH@ zd3pVB6L!hLcVnwJXht>RvxELdg=6F>hr}!a{=cU~{>NM29RC9#p&(1l6&(M=@jrro zVjhe53+~M7*v_F*;QwznX`Kum4LrXj8izv9Vcr5KP7LLhdxEEF0Ny?-c+EpOaxR|6 ziAa-Q;gD0*6K78}AbSG%|J|{CB5beG9cNG|9@H`@IC~GZFt1j!lUF|9%kdiS;6{|3OyN#MHG-1nEm&|2Jd( z|9u?)qYNV=2|X-gUDSGQ1kwkUCWr+ezJ6VVki)T^y>4e%<()PUAUXc0xcHxUD909` z|5w%XvXaY`)!x>HL9goG9n`AGJ*4_#dvGT9fLj z!2jO`qJa1RLLrFOjvW8X`+v>Y|NHJp|0CMx{2yT+5t&GSPL4C<{2$K$5%fbSWNdId zoNdt;j`*b<8U_9TJ(21QhdbZSMaMaSiE=JM1QK+d{~Mx!h&J-m0Y1+ECBP{slf$Sc z;S~7)d*QLFPr>y+Y%D?0j6{gV6KxS`3cg(bgX@39XSP`=MR}PllqJ<=c50gI{|R=d z@=?MWJ51d?FTcnRGtsz0!Q*IjqF@g{$NQOF|Bvhc#nf{0u6sMf(Z=1oLI3|iL@JVk zC(u0m|CMBB|3CZx>*N3b54`_BmVijbHz?A9_y3DG!;=|%9u+ML5}fZ`2{Q?_SPt8F za8D>S(EmT^a7oH9u>}hEbZ>$fya~c_2eUU$dZRxbOY?Cu?3wi*WYAPN7;gG0bNpY# zQ97Yc5633N|NW3MY&rjj^M7LJlwW{HLLch}!eKVOfQ+nk9xl=c)jYU;j{m37p-2V& z|K93_a&rCuP`z30E=>RCSyqxG=gqXT-$~x3s|Dr1mgMZ4Geymx{r@&Y(L=52^j0p7 zCRc{+|7ZVyOfA^||0AakS_s-=IH*nRCC6c&t^*tw9p`*H55J_R)}nxgCCA~HuCb6g z#Gr{ZEB)#4GMGx%2|HH+K-z;bkDj3Z9)+ti9sugZwc|ur7p`-kr!tw66G!O}00sO1 zN5>TJ+iK25f929>a{O=rpg=x_7x9`+mVJBxs72HxcbcghB)uzPVt`-1GGVD?(be(` zN23(Q5~slbKNj&njuqhqfLXYL696~?K+uomu`z$ao$`qW;QvP~v`&VO2F?XQt*G@Q zR}usk(r{1LwSrVky2-3@qc^iJglbLztbYO^@c&Nc;GK#HBp}%Qr@+yus|qXu{Qu)HXyq>A{2v=jOtyzCNVX7#f^Qz~zhev4 za{pD*&8bvlasgR-_uqct|M!peqAmrf7giGzN2vc_d)jVOH^2UP!TGhjZNqb{HEj@< z{*>+%Xiwe!E>RZKzCG%M*6~Hcp4zudbZi%}oIV$22hjw*EZ`>fysT@O^pTnbx zMgUlrZ*dQd?L#T>|4&E!kH*jLKMUk^-f{2-yZ_kzC+MdV5(4=DXZ%t^i8glsSyAg3 z|B@h-87agr5zpZ*gKjcw-000oqwM~xzxz+*|NerYI`QYE2G0LQLhxd5yEhEh9t?)p z`+WZIBg2GU4G#hDG|%muYv3x4geC!r|?R=8sq>VN?QO- zr6wo>y>?OKvBFj%O z@++*#;hwI2j2q-R6~Ksxlb z$Y9~~zxn*{vE~%(0z?_*Ph~YV{wml1qB4#m73}|C8TKyUd`*AtrWU2@`>-rU!*bC+ z$rS|$`*EVNswkMh{Brm1$z}cewuF`^<$CZ}zK|FCX^9oBcJ} z?6++6f&KqX#Q#W)oC~`B!CHg1!1|+MmG^~Wu|CEmS&V9!eRLFT4=)UQv6>Ly=w?B9 zM+v|R>|#gr#{SB4yxE81I43VEf&YJF4852RO0;TCPT9QK7j&u`yPS&vnx1rOzuAXm zy4>gs*Z(_rwcsEAYbXSsxbgTyyY6^uqkZB~J0I^tH*_sr*bWAumyzW`?G9wASga2E zHi(UU>ndeeR()m{%H_`bw(`7avJC+(&HDegEz7bXG6_)2yd)TdgxJ=TEh}kNMO2Gz zDh+$$H49-QQJre%o%BI_&@jtOf{Gy3Ln$fa|NiTkQV~sX0U*JZ`gR@tNoWQ^k7EKj zCLkZF?hybMn@N5#N&mE3dtaz@4SP*;*@~A)$fa>Amx$DwET-6F!XA?$`2T*hDbDZJ zU|Z~&M@ehj)8|SL%s`*A8~3ZdE%5a>W2zkNOILZIca(0o8wbGuzZI&8Nd`i=I7rd3 zuTiSDChI9a?039C%fnA#Gfliiw~N9jcfCD8xBQ$4emO#(Ivs+F}al_+)rA!aVjBoO-F zVivGT;4oBZp2=04F9bi;ktjgtk2yd3h}iu{Ebb&p72zd)jV0Pe3z| zVAQ`}a38PMb{Sv=u- zO8CVFAp?dPf(-coe~l9b2(GBN0HKAorl5TaFC9%T@Uhm+kb>hh7YgwVBnd?^88%{x zsz%H~{Lib#g1iQ^DF-cZ{2#~v3H?B%MF#RH`$pOS7fL@O=(C4&)JyghK?Y7~4#{-h z65OoI`dvdhLUB6(-|zGOpIY~6pcPC@IVuAwPWqrdAcQ`A{km{nz)pUz+o^Pk0uLZL zBxt2G=xhW-QhwG3Ha`W*udp*8?&%BEh`3v=-G9&g&-}l&9%q3{>QO-PQ(Pp&FufVn zM#Y@gDD!_|{D0foWUFSb38wtgToa6Ig4LrY82JB}SpO?kH=WwDY*I??>ClCw52_g1 z{#WRb(8PB%!@-IH`4z?i+_TxgC5e42F#hkhpBAfJ9X1Y<{JOa`njEodj{hD2|NkfEe=Z47OOD|4zr11&`2P5#Ewhk*tNPXXKgfP{m(y+DBCk)-u_d|B;Nkx?Z0|#|E+`m{}bSR zcK?S$5J~9eZf~uin2eI_NwNFC{_g+X!2f>+{IBwU&E!-3&`2J|4~@iA?IBHh)gID} zR_!6pNYx(FWLNyqHCmE)NhM%nfoQSh=rT%!uaOyy2E62$%yF7UioQGMfKZ+0ncaCD znp*(yqinm0_*BL|rIpEz<&}4?#$xDhxIxC_oF4H1pGT@M{3^SK3v4twemId?pozjO zvFwYsP3n?WV{#4>3pFkOv0t43wR6Y6ZSDMK_!s|W4uNN1^a;1_d+g~~96xkCpQE)_ zmseIg-K&AB`{bnKiRw*rR4H@NWv(1^nRJI8Hc8v{@QB_jD5yuDebvVcAYM3r=vXCz zxTH@B5TpR?vg;NdX7S8j7ObTs}Ba{s>#!291rRgG<+sunXymdIdX0m(8B z^M@))Vq_sz!Rh~;{x7U5LLqR+xyq1VIA~D5qRHyn8U_CU&!`1?EGQod5(&kMU=au- zvC+=)e<5nC!Jg9~Hf8)@t7Ql(=oQHX+xe4H5@BIwjMa9-=*!nrgeTk&A$2*F427Z~ zkowUF7XWEM0g!3W1OWa2mlZtMiVpx7+b5NgQyz)R1ptcKYzF@SE3ATf0YECS)Xxs! z1pqGq;+p-y|9{PHv+}PU$fAczB_zUEPH%4qgJH0?yf&YmxhaNr=8?|e3WP|X9c^|` zudNN{GeD2&k-I-w&iZ1|9rjB$XW;+8(WpOMpr>DMbJ!e*%{3rwF45|%3L*2r|9>kd zBjqIKez>Q5mW>}~fzF+CUzulEO6=cS+Iv@|j2@oz@6z z2K{R=^ZsVQVe>T!o3BmE9Pt0&d5N9SzJtZj^_#MD$Z2zRaXqF5ms^WITCHgX;CiRXETpx%`#56NQ|Dk}Wkc`n@U# zkd*ya@$_(PLjM2%jGcj&jX;S9Yzo6Yx+ajXVI0FfkCiRI@-$9*qdy6q;7)_?XwVzp zJhR?|68epBHn9N6CiqaovF-u@?Ek-4rQfN{MZClXKq5B@1(9FMm0j2IN+u6mL+UoH z5fMA3+jQ_Wnqnmb{QnQh_W!Ej&16sJ=9M_T1IsIHVG;YuLsRU@)XOm-9v19Yb)z!O z|7%@p?fen=S1x}~UOc^P-&4c09nt^EOa1Ue`@8vH^cc~7eNE)>v?M9A~bRNf8i`8E(f7$5sa+1o%{-GVgvADL-{pM&@6{E z!9?Xih6V&Ofc^j9YO|R^`HW30hfGbg1ShDl3W@k19#w=3jl?vC*~jdNemLiCR_lB(iYIOXVc3orRK^Kp#T5n z)IkgHS|+A8>`PkEB$Q(~u)tMZh0KAO8LTl%(JGS9J-oIyGc%N{(ynLx)PM4!gv2)6hGRKZjer8s) z`qO8+_W}std1mR*krMc=Kmq*g6F1K6+V@m{>CoYP26W-Ri5}X?tWyTLnw`AK))TD> zAY^b%??e^+zhmdE!2e#>=NIYN}VQ`m?zjP;>hvBR}72_?f&Pb_|GFfoL+HeS25a(}h1yv7P zOBAra@<6cG>y+LBCzwf+n?qS?c-DWY{f7HD9vZ1S@Ms+~Ifx4E|68heW+j*Zi^xV2 zj%N2LdZ>;>Zw7|L;Ns!{z_D{GSvpAY2e-*s4GmW1MN)&y;|8(4(!bz9@y( z2!khO{qMcEa{OOR@|bukN%7;jHO~JJQA$OHz8<9^E*SX@ivRnd+7vVL>LW@IlUK`J z$cVtE`qqHRbM6hQ?EEl|9Stif(tjc6Z|?_7?MLOI);OpCDr0y>CB5cv*Vi4H~bx8kR2mb#M1L73gc+$N6mn${q+Bl(YTVDv( zy!}`I?Z4f?|IeQ+!4WmE{%8Hqg^aOFv@ZG|%Ks3>!218xK@R_6{of4zzbDfFNY``t zuUK;Gt5EvWu`WE_?FQT1aLU2*=H-5cx1K!f1M7-DQXP0bPXR~3>VhL5WTXQt2ZVtA z|6FKRr98CTM<-{qwHIh9ZtY82XQ{s*CdDn77% z+>{h4Hjkn*-`jQce@Dg+ChOkTg+Z?wQw8$~*8eZ!6zMHhQAQ91CWk6|x++i}MOj=S zz*R(t5g!5QKu;I7s15RMdx3_EXdn9?8<8*MYa08aKW@`VlxZH5GSPHiMtqFk_5zKq z(H=Y72L6BXK_l)&``(Dw(4W%S6YZ(9?}JNDbRBg9^th7}mS`l6HY)eGi_THGXVms! z%1vVKw%y}ea#H7UTE1L^$D;G8dsHW!c<`~Dhhg2|GNaM7S+%Rlk@Mw7;QtRr^0kT_ zNg~{U26V5laf3W}tZ{h#ZHdnUc%mhd%|3!R!ren0qh(+r)N#fpV`hyLB+DUTy8}(* z%+-R{-+1jUATsayi~66J92^T1R4%m!u2;d>$0lWkdCBCiu#)& z#~b>}5R0gjZ0QvA|8qjIgM~Wh{|Gs(V}<@CC_)J0^8Z}^U(gSs5Wi+GLe~QS?}r57 z=#S8NRpwywDgixWPLB8&s3wS}KONxXh<^f{a9DG{5;|EeNhE8Z^7(a=WL4u2S{CLMt&<~*yxZ_cy(HB^W5*o~< zQQQac|3?it0Z@g7Vc>*vAP20HK4=e!YB&JV!c~60l5B%H3+_?#RKBLLFEEb4Z?#C} zSDwa=-YA;2o{9=U1pa>+o-h{x-~s@l*o$Oe>GhZ3SE6jY|FPjp31~s-H{K4k$i(C#k`DmG?jj;|=ud}!JGi2vR1h40jFNyq_!0S^>#`;~C>2U+MKV*!yqW|k{Q-cj*6xqt@E=9O1hv^4To!dZnS40>$FdEf zF_=aA3NDN!u;SS8o-WeWYYO|}J+%y;rSa(qsi^QD*#B>}impNCia#(BIUQiFD6CPV z1RB)xK(;!E|2H7~|Dn+^-jzYNm^1$WP9ZOK+2|mn754v2^^%L;$hC2TW?NrKVzB?e z5&r)}y#FukzNv)Z#ol&r7_2=Q46pYGSC`i+99!rS0&1o!gJ5OQzXmh!Zw9>of9haO z_W$qV_`it%ffLl)uR)QH9REk{U5yf|vxF1^>3ru(Sjs$J21K-N&M=xI`2QDN>u;$Y zO5{o*Ml78f;$ayK&+-3isY1b3QBqIGl+%+=1LFVN8pjN-^}0cGl;3KwE$mr7;ZCf7 z$VNn2MZ*+a%=v#Fq=NoGT)|Y13Y>6sObD_>LC57z{06UZviT2za9flr3i>aMP#`MzvZSLz&+l4FHZmOJ&tk9^*_1(XQYvm zn8L-_QJVHMEj3Key#MDB<*@!=4DpSjmRH$KY)u2+967Pt({`Jt4eO5=PLNW|y>s8Q`PIX(-X8U6v|23gL-H?t~F(kaC$ZhwqBuKyWPwT_(W;aLCpAKw29HJwf< zz_ZzNaW0J}Cu!dQuJdKmy=ug!#*#94|Mr4r$mXXue^qEn` zi2<#W$vACJLY=}(+($5*g$g9Gkad@${8<`LPX&;r(ufU+D#Xli{g03j2{GFk$H$Wq zA7i;Zk48x!RG6Sav-#fu^FKxXkC*%$A`;;?;`|?tiIuH1*4P+a!wT-5uJ*RztdB-$ z;8phjQ;k53OOF4KxSHruHUJ2nR8Y<}F#hL(>nY-YPICQEwLqSS93XvA361Ov4*#|I z82yq-N^fk(!9CqiCFDK@eRwYy_lT`8gy^Eef5iEpcUMrhbN+8+ws^?O>feiq9`lC5 z875yKTFs?Vj{gg*_5?!`er7{3+{;ErK|{d*ug0zM`kx?R{;ZIWzX%W0VPhQg`roem zF^sC{*g4;y-l+rpf12xmNoDGnti>qLDVUq%{~VUh^l+?y{NJnACG}ICp>YEr|Ep{+ zKK_@>|JI}Y?>gxJ*KqycSOO{@=Rn5VZG4J|&EBBO$RI z$OZr#0QE2cfdB6U>Ysx2`TQT76xP;CRu7*13NKF$zzacSiulYLCup|yg`8k~{!b&$ z|2Z3JKfI~%V1L-VeDgK^wVPUItx1`PTC7ALeSt}SIua~Vqh#O|76=k6r@LJ!D-MSP zEpJ{<;gc=Reym46q(ja$aNOPw25`*Myv|peVrWteo*iv=Pp_>FruV#;1IwWQm&-Ad zsjLv*{~rr&i?x6xQ92IIh3!3!^8SBO`~RH(FIb6)eh;;lh_A@N9cBq905u>1XxjMS z+aLj8SL+`tInG;~A||guXkXw+TksM?BNL3qbhJGsg}smH>n> zqE|fo!b4-E9xuU&tmR_UBUPS|EeJvUA>=rb>Oi=O)CZsG-Z@6LQ z;eQkg#Iz^98r zci69N*b_2&RP7&4crSN*YsG|Q5a5Rz+GA%)!oYlIVAXcR=nKg)4*#ux`0sAu|J6wU zOB$NQ5B*-v*DcW_FOAUN9Bav-ad5<9Q|0f5M z8IOQu(9#XjZzGgVWajr{a5mNr0_$~0RLY=#;}8T za=~6MjV31v_Wy;e3!?JK&&eFc{y(ZQ{Z>iz#k~1!B1-`OUqs>{3I$^SAAp2{EHPKG z|BwBDf_{kHET?Dy{(sn{bux5hM6Iy@&xTq*a^+W8@*98;wJ`yHcrTlEG!bcXNZ2ey zsAm6PGyH#_Dkx0+IVBd?|5H53<$t*RPd&>2i28r8WB*?y|FFB7{eOlTf=mPU|Ao-O zw%l~KRW1NbQU33e$p78BOTcRcpqJ5C%rd^EQl&7(JNoC~(M z&<+~4z1+-3-v--F8g!}woBNH|EOiNAKCR^85GILf*wHPmB@k`Va z;^MqAN-@kqx;vn*J#DvXS~q!2Gn4hlMuN8f*hnbXAN#(RR4?gU|GIq~xnIU`N7FVK zfLad(XV5so8r&&v{gf1+t=6l0B~rWus1&3apnQs@AX*BcLWxcZG#G}?FZ3tj6@=I{ zr&w|Y>$?=g6HvQp1oZ#gQY>NJjUG%VQOLk4X(Jlp^50UYQ6QC-|2+i5<-ZF`t^@x6 z3}mHn{ZID)OVLtRQIcFuaQ#oOeF*&j>7gB|n`<6%owt5pHTb%s^D4QEfr$#yk!zl5>wg|~)CSFcS4tUV$rm7b?bfKV0By}=xdZKzR)x{|Gyde|Bnc&6MrVUJ=ak=3y61jsKpU#lZhe*~x)ZRtbu7qRl11Et0 zKLN!K%S8ZQr4p#gSFkWakmGYRc-`E9b+gnMREB6OqylSZ;Q!B5oa~%U-ZGc{=Il53 zd7;wLphsn;Ym}%($~s6Tmf2?x{C`#QfASgezPXV96kdsU2)S-PJ}=sP_+uIT%wus zC|J&Q==EaS1H+9Bb~F~1mJbSG^NAaG@7niNfAP@adN4LZYKe-q{1 zQ;5v~-#h{ivpaD7Qop|*bT;?H(r7ps1sDV=9%-5f!AyWTZW_^-tb`DMhwFc=M{61M zx{DkM8OJS-8%eAKr)8f!&|7FcskFL6OG2@xYo3*i4_2-uN-JcC0nu^!<7Pv0kEEBH zpkWf43Iy(`ePjy{$S>yAs8IO?4i<4hPeD5%grB6KQ-UD_K|uO&@GKVqwM3=)F(9#qwJ6-9 z>Pfzak(*iLMsF0&T2Dn40EOk>7Sa)10Gtbe?~ayoNzA~qn><_q#3DX1yTcg(dmp{T z0YEXyYrv_XVI%`rH~=U_DN(}oCs~bRpx05`udPU0|`S;0OACodL#e={||v}C?^ovk4c{o0GHCml%^G1N!ccX zP|bnN^$%nQ{{OjyuKoV(LLer~6pJ-U^>=as#e2ut>LGCRaJ&T(@(V|!qz{MP#BrnH z%8J;Tj#!$!~m$Ny)u_bB1mfcXD6bNqj7Oe=lYpiBpj|F4Sk!!&j@8*QaCeB^xR zO1P5Haye|@MPGvczZ6qH@ug^ObNIiK4IKW@;s5mr|6d3G|6Jg6xi5&FIo1_bnQNJ% zDjrhcrC*wI9di!>vwM1Nt-2?z0RKN8@_)1hO0O@| zQA5Eb#^JvL_mu7vOS&BLQIxD9qbitEYJC3p698HjGS_aa+R&k3&>k*0icz=Q$Eec* zH|r>W-EKRZmDLNQ;gHd~`gD!$oan(37FUko}~jYtz(Sye@`9E-Jz?@ z;pB#D=^cQ;|6e3jp;U%yl5j`o0r^U%{;OOXB?G5w9xWtz129Crj_4`C$Mt`*Uk1;W zC4m3GCS-r;Rr$9#07wYLv|PdU|FX%!;Q$~?gV~D);QyyhQYS(UNd{j2$EFgtgEZ-B zSrLR<)^MsCfLE{O(m0W59%|y{fBl#LBL4S_1=VQ;%<5mjgVn#=L24Cq(OS!~ilkt5 zs2Yy{CBX6s>@)}g{{Kp7R>h}r{9h;x3G+{;QVYgj4|HRQ?KuL%)h83(5$H)JAEjZx+FXQ8Xg~|{ADo^p_ zibs6>Z-h=_#*v>6tF9r(|DNRde;c7pX+%X$81B9NS8p)R#3aq}{~Z4xQwxs&{|X>q zx@1LqkUjnu_y~?iFtRuS!Z!?&U@)wD4X>j!Ydl7{=tulfL~A{<$G-s{|A-DGC4l|^ zc1(GQs5#+BEq^)ThZBD4k?^BZeM40M{QvKfV#v<1SYV?>=~0!3L>!0z2{ci7C0@5D)0Xjw3DBcsldYd7Nwxz>)IFR z{r^)3T}L+Z{(m0(|6dYHHmc%5DCj&O^%-lx@@$3Yf)j#wD$VfnsSX+t6~A&!wZ`@T zz83gDInH@IK!A(b144o#zOdK?;Ty&x!vMT`4U5^#8YgJBO$1GYw*%_G9nfkm1P}x8 z53mmSdbqv;u6MxoPPpC$zJZ^I>u2Hm8MuBLuAhSIC*k@DxPA<-ABF2jTCI)YV^R=C~+*SEm+Zn&O?>zm+$w)eacu6=Ob4%Z9ddOlpwgX_6)-3HfQxc0yWc?lnN z3a(Fu>veFw9nq^;cW`|*Twenh^zl(Y)N1XAKK9=M*NfqL30yCO z>j1PV?mZ6IV{m;gTyKHvli>P9xEA2L3$8oi`dGML4)1>mTptA2t#IvvYbRVg-~w>% z{y%X2D_s8q*FVGcPjLMsTmZ-2e+Sp!!1dQ~{V%xw60X01>(Al(A8`E{Tz?AJpFmq5 z4%bWJ`Y^a)tb0BbE*STo7s2%$c;|n^^~Z4iEnMFR*Z0Hq18~7ScfS{|ABO9f;QB+j z{s^wGgX^o{0=Vo3xa|HKxV{#yx5M=WTrmIL*Wh{uwEr5o&cJmqT&LlBHC*?=bw6AH zlRe9D0etrSzi@poT;BuNcf<8vaD69S-vJlke9yPSCC2t~@ZX2vdJwJ$;QC~^UJKW! zzy-M51Gw9B9j+U#*6lwH*H6I(v~>GV!1d#B!CY>KdENela6vz}i?*MH>+|6He7K&1 z>kHs|D_k&_JusI&fXh8^ZngG34FCOAxIPQ6n{a&&T)zz0ufX+daJ>(%XW;q`xPB9^ z--7E+(8ssI^)y`XgzKB(0-C-3J#f7Zt`BXsUht8v*7E`0&j+|auLJkq)oR@abKDEC zzHJ5m`}1)97+f&+y?~Fs@a|rCcQ3$WFVN#&7|U%-(AV$5^#Qnm9`*oT?D-qG{uZvk zgLj?>7r<`!$G|+c;Tpg-gbTji2V>mVgX z#=95bvln2s7ifDgz-2GMVeeu*Mp?Ay&S5qewT`ftWmM_XHcafEOqW_v!xVbj3>@2X&B7d`+e zG;f84TM>K1Gg3YPsF<^6Aeg0PP*7fGh=&GB;}i*3js{e)nN*$-U~1`+VWUBF0gwh1 z09oFQceBwBy7Ttl%aia^E+UKcK~*^7*@v%R7a5e`z3g>6l@3qx0Fw28QTl)H z_arhUxf+Pt5$0+jTn(fq)j(kV|BaIWyEF}XBK2JVor?EkO5|NnvODg6K6B4urIQsT;SLTXTWCH8}G-ApQ`0GP8HngvVO zissCK{r|0F4X6@sT{YO24#yjeGx31M=&}%n8k4JTUfT2Ij>&z|2m(MssJ|oSn`b5K z11eV%m6wx46}W1wf|{XcG8J^d|KEW{Z@}@t1D){+l>+oDuBlcz{x{TIwL@&m_}}m3 z_#dKJ2akm1NVW$HK}eK?qz%YS7PLn+}{_wrvSZ-W599XsCBf`9n0 z#1MG$!pU9x-ujBgLklPGxv>EPI~a(%MW+t54=o(nA8dB}YYcEBbXYX7(aL?Vl zPu|-Zjy8lC!r}t|zb2rUFPsPe;N{+x(V#PghS47A$xHqIdeGSvN@6$|1^lRRXlM!n zX*_|#7(FPMMaH?r-<`Z`Odg>BzX>(K>;JWY_y5E7ae2+)n2Muu>M~7}YO7rTi$X_- z51cc!_xtQ%4DpZR;o7laiQb2X)YEob4+|t8x7$aZUoUtXcc0+l`&vprIc_p?KL6w9 zhN}d0L_zaj^8k{_%8pQOny8g2B*%E|SoZ}0@c;LZ`635+7mP%9ZRNp4xggckXd2fR zyR~A4hb?@4yC3-fcaWQoxBuAukEzD%z%9lym_muO`R`Ne!2j<_V@Y}BwRJPWOD@SV z%ke*wOMM6iuOL}^dC`yyZas~1{7+%=KR<}A12zEI0Fa^uSQeRvy4@JPQ;aA{t|r+3 z=UV`R{{I1tW-igkCHlBT-&g`x#kNW=5RHR!@VMdgyfL4 zsVQal5SQpXb&yN+K|n(VO7tmnY^=;Zd`1|L{?r*9`2UAon?I6~JblX7Fu%b)#c@`L zfc(nSIGuqmSg4T3opJzRr>gM`k~T0!VbrEtj!;U{c|oJs#_a#y_K(c}O2p1gVkMzl zKL0nwDP{PnRYwE%|9_YQX|h!061~}km#>`O-VVgMl*@BEnQ{sg%VM=>N1NT#Yis2y zSBna@NI{E@M>@^K?7kvrUBVK*)6H3eWrE#A%kztncf#*NaQf7s>;(fK?&p7z0T(hCAfoU}4!#>(y+Kf_11+Yr zmg&q1%Oa(5cF^Cb;Y5M|e^O8YPUWGwI{2ZHYl9!QX`YVukY)&J4`~9B_K+sR%z^)Z#-afx%fZHa zN|gNo>_y-M5cDoEb;Wy@L87JCj+ zeu*}FJO*2eEa_J3wtoRDhaLW40a4+go95IwLKMOde|Go_`XSl`?x@97iKGaobKw7P zQp-R5BwP~YFeTCl?E!(TrY_fLt%YfWr7uh0g4hl0{~s%*kjh1zCYL>YL@yQ0RnTTa zj1VP^^a+buQ_Oj#3k$iIl}k;=)JDqXKZ+^;A?knr0@D9n{)5YZ zNYSD(Xi1l^772(HK9~P6%prSxu?Zz zx=7KHYo4yT9CxJnbNc^y={b>|1p%6?Q>2`zj1cwzLaLqWEA&NnL#bP%nw&M!f{?K0}EB3902N<>QcfB#~jBgnP2-@jKcL(Eq>GT*l+_Ujp}pKR| zNunxRb0SV}1O0!?j$N&t@7?)H@SjHhJ^P}^KmOJiKlb#?+lzu;Vq&_1+qV1KaL?XN+=)~N#*&Y!(=>A*dA?>>2NXE@pr#xJG;{QvL-$?N5n_QJxs zV0#Nyu+rbw-#4R==-cpqGIQHyHXmI=;|Yab0Z;R3Jv*1`bIf5r=ZlF5p0xVMEmK-hHSW}^R9ja`2ROz zf;C>uo`T6>D32gPvKnj)4IJ5++chk`ItDwQa&POxpx2D4j<&Y?;slgN%=Uc0tkVSk z|ILA!ijYE*2#u!;5GQkYM}yw*=9%?gusJL%aBNVZbDVn09GV{rzM0`z_mjD>UdS&k z7x@3T=n62@`socut7|fn1&&53JrL6aL4zZ62y8%1<-7*S9i_peBaY0GcDNs(HpK+@ zbX_ExqbfMOhlvIF|94IG@8woo%QF)p89yC6YM-49l2#~?05KT77Spa6+ z>OliawWBo!MtGAU+37FoEFF*5PuJ)a*yT+IA9n%&e}L=%Na0k{#q$&t&-H&Y@i8~4 z{?C7mqYS99K&A^H{}agw3L?;Ovsxi_({)P7Fd=K4R1 z&$<2&*Z-+c{h$8?Vntt+Q$c{FA=m!_X-VND1So=$by+LF!se*~_^=`3KgzIif@V1+ zwfmt>gOC5M|M9<~{?C8bNfKy4d1%{h>b@n9sYg|RY?KSo9~%V&^vAxh7m&wVaEbnP z`?%{dNsEV1brERXAkV1?Kox3HSv5|1YDBOTl127&``j z5$-eCZyd`RL{Iu&Es=Kg=VV5=&@z>!$r}>^H~m5HO`RcRA5}OrAqQmi;yf_D`uoehV7R6E{D4*S@D7J$k5}PnhwA`@r_N+`BRwglno;K}l_ZWR+7g zS%eN+OFH6(i?26&so!4@I-6pVeYvx~9bg!sXT!lL(IZW)At5H<955!^m|NnR8*1>i;0lEqH45)?lL5Gec8)y7RYoT1w zP(-7g@mEmBpYH7wCTGb14jBIM7$z1brf+NTO}oeHTEp`BAFy}L zd&v=NPZ!7o{Qpe&omcPFQA6^6vQ5|}mVI3R-y-TghIBD}HqmHowf3AtCZi}$$?ibB z$f-PrBdvgO%vFX%sYe!0px>&+x&~s?R2c^S|36{oiA6r={{YxcncycL`4yHe2H@>< znOWlm&2mU;LqO|^^M9I=|MT0i10j+qk}OI@sf2JT{~^K6skxk*Ta(n>xs>Gq{r?w^ z`ai|2R-^=)pqQ4sy|q$oo`mY!V>HUSc%&(jaPq4O5Mb5Z0M)E(;|Y{7YgrDl|EKQ= z7Dm(-Pr76S%skU^O5GbJ&~R8ryc^hn-M}>Q|3~H`Xn2unyN*8~s+P}IC z)lROSg9CX#_I ztyXLIyB+>NN&k2O4)^r!!q8)2?56q|C1K;FH~N!wjJb21(#hGtN_&^SFk4I)SS>tB^rzToJ`)Fnqv|5XrXJW21)Nqn7|z!-trYquFl#h>4Od% z86^+)hrP=;U(;W^sp%B@1&lKJn1KKPa*q68Fa)_YKbPhQYM+T?=EyC{MMLVe9N_=I zn@gavCbA?7$}4M|QxJ{M|Er8VkZd!-{z!TL-~Yy37)dv@P;Xn#(SdQO)nxlHt-L7O zz%N+N5Yk_;9Q32TU@W3Z4`hKEKBbl$G)Qle8}#R7F1Wx*(>q9SeY_MEoIT z2GRcD|7*qjf10X07j*lBwFd2j^+&^?!poWD_5knr<>AZD#mMtCnr6pO*LA@EJ0_T= z?C?{fk{y2R@T-TzZ#~xbp)myZ|G$QYlcxLgh%}VF=oXnrz@=Ln=hA3${mM~>9Azk$ zBE*TVaadUhyVbhocePaz*Z=1P;IXJKCBX{D(p3oMGfd8W94LhjK`Pk)A9U)VMH*SY zQ!#%_hska}3ioqm!!6QKLG<0Cet;8<6ZPkMb~N2s$Q&q9C8senmBb0VJhJbM07(Qp z5*%5Ic{*{eXMgH+;J|h6^Hdu=6oy36BLP(UEJNV`TOx5E5v`h}A!p$RnJC;*OJs`- zkzdTa(d78yEJJ~O3a`YnkFyM`&Jw`?I|T(0&PIHlI<-i5G-{iSrIa-s@WTN=^$++V z!M?!%&$;B_R4E#;3O5u+s6&VZ3GaEVgM^KzR!_1T4i^AaTRc?K0}eb`Dy6VaXKhkS zA~cI3(U5Qe;Qu|^wAug1{y!nR!#_+Jrkleiz6poPSCst8K;Do(s6@kqX8#|B4uL=L z{|AH7!yA4;@06|*FN1l*k2m}T{Sb44u-ZV6ycGhr7}E;VIq?5;OF6I@I!bjQ!OrQx zf_%hZRfx_rQcedhCLI{~f46c8=o-(1vUE$ZTpGm^&B7B%aInKa6dF3BrvTrLt=^y+ zQPO7z{f+vEg9HEX9R?5)jyBP$N2b6z8ev+f9~hpg!F2}>>R*%lx?Ccjc9J>2p1 zRLl~oIwK_@rqURJmk$7LzyZL^o3Y|VYFM5n7!%9MyYB4_M;mwVZnd8OG9dQE%8#P~ zEbEI5C8kaA_=TkWDpPUH(EtsI1`zr`L-HkpMA9WId;#O|4=H5JVoCxGGctiG{Yk7h z)IKYGR`^n}#|mE%A+o6<|L>pNK4cDyV@22iMHoqE$r}?CRuxm?@l-xLT(enyhnpcC^_&y|z~6N{1Uc%v={ZgE@6d9Ua42+{-o-R{C}b9tjqYQu_%4=@5|8L9OD&DM&9nXav799q>IO|GojQOAxt$vUy4&Q_E|a+Je8 zEMLLvEypqe^#2|56GyAbX_+H)$8xJK5|tx!i;2uNv^ubu*LSCbs9}9+Ut~C_E96GLfBJs2@QzQydhG*bEBw z3&@~-yAV(|-X;tMuQ-JU@c)Y~`9HS4Y`q~#BF0C4lCj{CjMJ+*GhdN;4$@YlQFQ`$ zob({SaL6zWNK*I&p*VY?eyx6%><#l1+|$*s;AWFl;2u^0!2d7N zh)aDnd*cNd7F?*G3-#BsP=8#uUt{2z59tB^|1d}SuVQQgo7_TDiz5;_B9S8!Bd(n_ zA`$rirIFchnh&P&fS52{u!D!Q(=|%$9y)9^XfD*lg?g-3F`|)lG*~oY%V^bU<2Hf+ zKYWh-pPW@W{x4jK=}WpPz{l}_#QUt-&6Q;GoZ|mJg5&>!!G16(jYxD9uAMe6j^qCT zuKMXMREQA~N7&Y_nd$nJwmrGA(x1!`X=OS=kYYN#W;8rR{2u{QsCTfBFf%vajANan zol>2V5^``XemKgIqYS0&h@%X_{{JWof9EZB?5v!emO09B3_;5dk6U9($%c1#2;Ai> z6ZW!lv7I@}u$U-Aq5nrD0T}Sl>fbPmd@w1y$Yk~30QLXSXc+J2qt&ZSRE`Bb(*Jwj z5~`A7$Tt^N6VEczkq(oXos0rR6kgIu^n;I`j8#_?VE-Qg3cv*yXhjA5(5RV z1?{2Z$l!L{aV~JXEu~jPk7Ts2K3${D-6^G6&kDXSC!@2nv16jHs>fxVXCO-$yF(knM zA7jTIK_x|`n+fRKn$k`y{z)--I>5wctHpsuS(dgBf#`x2y{rukgtHt_$y2|F_6L@o+J7e0n{i1aGU zZm;Zif{$Hu#AX9}=5<@d>c|)b{(r?B`M+SHQm?fe*|wdTyps!OuG>tl>Y@pIhWP)F zk5Z9eDI3+I*Dbw8L((=8R8O4$$N7Jm<^SCoM+`{XFC9A& zUZlK%c#!k|Isc#Y|D{FmUjl*suc@&7DhI~$|ouy^gd`0NM5XRl|gm< zyPsT$s_-I0T0ax)7|TwK`~urc>9IT7+Ukq*Wg1Z?EKQX`IREQ!;?g1xKAE}DNX00J zi;UGy7{DR-Tx3jYVfb&T1wsGo*_jFCuY9E-q0X$ytXVaeRcY)0-3IwTJ9fOi1^@70 zsUYzFm851=gQ%QLnlt&b7NzD|FvKsN}``S&_1+qV1KaL?XUGVubet?;r!V< zmk!)>_wJM9Q{8n5t($dt@w2>gF1XU$9tHzYj>tmOzZk2Ei9AQ&hWAyx^O7U(`}hge zr_fC3yG2JxxHC@LP-kc?j?i}3SjZgGFGq$(s;v`tX=B9~7bnAYNx`Spdd{lg|66u^ zpmodJcD@$=!+$k`!290t#Ex5E{Ma|%1rp@&vD`$+;e~~Bt=6q~Kl`F5TF~9oFBjb% z&9%E=dkaxGTN0sNkr#~hgKL0B;0B5uT zf&ULrbnGUU12&R?d&sab{V<6er&2{1LM&u7IFFe_7;?d&!b;voQ9gQ#NCB&?nMtSi zLI(K%D98VdB`G2>4l*Ds2){V@vR}bG&GA3j^E}2U@c%0>u>mj^0M#e*RW<^Jqi!gf-!&!&@)$fSd~N7K>n{har0w# z?R)CcqlXUX6K--;DNdOh4n_e6 zL9$1eJL}u(Gfk-@pb0p~Z6oTH6?Eh8Q2p=Qj!EN}VgndJNx@kU8jXjg_lAu%=uh|U zg@TwEEa5#hEDMjTuRM*D-sn%#F@gmr8FP|xO_Gd3{+}@TjtT-y`e_S|ID8CIcbHiT zE5ZN?GisvADg$P1ln)u_A|nkbG6MYn@tE^M<*7{KcAMJ7zD*%Y^xchK?pmm=Ziu97I03 zr4yA+wC%}_aY27<4-&Wm!xPA5pe9Hkv-3y=VH(u_N%+_2?Z&crl!l-0mu%(`a1wytv!F?aLr45 z51WLB0b*w*jhU=V{e+FDHg{w!+?n-WusLjmCqPb_bmv-XB~gwWpE=L}U?00R)m~XX%Dm#;-IH zjEuqQ<4u0|jZfYVMQiXcRA7Kbt>rtHYHcuJ}1W-{>q89@Qcv}w0#Ob>o&#N^R0e}ZL$_0s7{PA#OoI2LM4MnM|sTi zsH0$T?)X%yk;==-Kr8)bvRLzz;R{*o#(VgNVJ;YY#CF5z%hyvxV+!`%DACU3Cjl@5 zFD%xF;0HZ_b1P_sFBF^rYrRhCIZ!YY5VgThRLEdFYtImh@84Kf=~YNeN(CB!hx31) z;QZeR2Y?0TdEf#dM3QLGu^0mhXjs0YSw;%v=^Bk`Izl3~Nia(J0H8S3CzLq=da(aL zaZLRLkhvf$mqy9J9TdQxIrhu}wNna#JF`lmTpFE%u+v860RJyL_W!+RNiOsDG|G`V z9GO%9$edVJJEhgEQMthXpJe9A8H*9%NWA{An_AMQ$e^AW>5cv*rYVx%9GT0Jx%G(5 zozJQq`2V$p|BKQ2$yuCN=0yB~aIU!d%B4B6OT>>)X&_^_csdmg{QqfO|6kN)%G>)S zLrOU`H?$t9yw}Z3YV%?N$Myd+JU9aQ|2_-71Hhssm{bHq09+zk;v04(%W)ovAaK1H#qR%`G7$iQD`BWbwj zS(eJLJjLjrM-~5kZi~*L*)PM*zqkb_=o?>3xOvu9@w?-t*<2ft!3qBOs44Oi=-C z=*vd>lMEZ-W{RvfSpPr3_P=Dh>Z6`_8M29RlyIzj0TAH-2bKD#q7ccHb3wO1SZmPU zdw(=+MxKn=d=Iwy{I5oy{{{U2M#cX={YT{kypPOOM-H#6dax_$b;*&7oO{BjX1&cm zPgl(tSM8VF=cx?Y^)5f;5H+rt zbxo5?qxnGU=7wvX)J*W**y;_MVI4{a#?(&Vx2~tg*tKKI)d4i& zu{)$$;c1*AGBMM0mJw$e)g#LY`2Qks8Rdk@`i|@W3vdzmgmNkynUrhe1kJX-kZ9#B z}+{$S#|Em+7M_yZ&qVfxD2y285 z{Qq#s{wx4S5C=68PNqCy0g#5?rh_93fV>3&@c-)~{%@uS`&zY629oj}yGM{Ik~fEP z{cm$6I5YU?ic{eK*9&7;IjDI9K*&SQNHQ_vMzVz{6ntG90BIfLg+>o+vM1kp@&>@z z_2jTqO=5*RYHd$c0`PyIceckCkb)8`Hj4~X;2}gb24A=$%8W7-Hkw>evscTa*MR?n z2-1emn@*5qj;>WW!mZcej5u+-5f$rKIWu37QT;?un#}z9ROJEw{|tb*GTYev4@pq> zyHJXpY)?&~Uj<*6`Oon`rw(%b&s^h7f&V*#X0u*bgl!hoXmXQqnn-D0C5>^amI1s< zqKX0dNP(vct0YnX2%k#BigZtt=9h2&%XHaPZv-;D4=*ewGKy(-7lr_k#YvWXN^)lmJMm6_I#F!0|s> zg;DVKzfN@0O4oK=X0tbd|JO`fcf_`&J!psz8H&sj>>oD(AKDcJ_~AVdk|kky8Yd!6 zel>xdIQ+N%;lI0q|KBD8-y{tX5}~FvHoO~BAyJ$1;99R6G^Yp(@4-mE@W{$4EcFdD ze|5CA1^j`3Jv+G!{nlm)BiaAuO8`t>%jk4B$HuYq|Bf% zL>y)TpUja+oR&yoNc3YFi;NyVnWLDKIp(tr1pa?S8ULhDLB2 zpU74Z|D}@@qz{L{=JJ1)2{`gl%1USW$obBdP+Spno8mvVqQ!<^NZIBan-N#oNic@9~Ex z@4B}$9BoKzEC;@fyMpYq8W3PIhY9yQno)k`X`J*%e-ed^I~{u{ z`S>46OcLViw;xLpW-*Qk2CCC2891d`3+dFo{P#)V|Ib8h%E$ll@qeM#3;%@~!aO@f z^8LI;!xUT$4(|S77_2oSdn8qo0r3CT-sY9qGKr91jLc7tSavc>CZ#&8qWYYjj0HIv z#rhxb|Bv|}nFKb$Zxj7+k1h+$8^l5YBAl%(i&tkC%GoQ(LC?}SJYiL1!;4UK_Tv`nVW%l z$)(Zch)uiy|6RQQuWVTY?t)SJ@b&8=N)}>+d)>~k%E7@NK=S^7Vf+8LZSwh_k^N72 zpK1uSHsAzcP5`b)0x;PBU1k3ZS8%mYboc0)6dqEJj)-eIp-=!n2r|xeT zoufKITaM8$CqZt|pCr@)NxzZRAaZ!gG~q;dfE#X8-oJlhLy zmG3qu*xCqXu7Y+Itqr&RC_aFuQ!C<&D2v!FDYw)|j8L$Jp9uDlf1+S~EXrdF0gKIQN zl~&pS|KC&!UvH8wAK@uA@a?w@c7)eF-ZOY3{3_E01y`_dKm~hAy-p>-)vFc%X`9!; z|09n7Q9{>{a89za`bJDaMjE9*iMT|flH-3Ywq0h*MCu%c{ZQp9PO+j_ewC@FI&-zS z_@B>-~WELXrNQY<7q!sS4)~C7&oKwFCcOAMgS|Sv-VzYz*q-eO>^Bb~N=BnPLKs_-SY{{aldips^GkxQdw;8f)y z^RGGf|Lq^o{LlRFr~z4w$YcJG^o_Fe(m9(wA`kTcn^61@KwV{_wA;tyWFpBS=<(F) zr3Irjzap>1`cx2f$87s@Vir!gz~5eQCLLD-c^-;b?)KL5*cQ|ArO~_vW7_j}+e}_3 zFPNE3`U{p+IsFAovYh^czXdawPj4aSY~cUTgJ7@+`@`Plo3H7w-PA~q8c5K{tnvt& zsGVbp>!N4lbYD5Wy&Z`2I_H&-=24D_*kk2!cC^_&y|$KRZDm~?VGZj{UCcy%0RMl% zFaQS<;(N-V2n-e*gubl_8lzkXnw^nciJmP{%L6@gwYfxvFZ%Adu1+cL$wmPYQZvB7 zP$_6kM!^#FjEq-<>rs6!+B0I8ReGMss3Jq~$$g$`ABn>vyQ6zzH3lSw*q*XD^3XBsYFMz@4g#b)vgbje5z*${f!C}O2UZ(|9=)T z={fw5>;Fqv4~Tz68L7_O%teDFq-Ou1{Az+V!&OomP$dQU|J7{&k1Zgi;yL}t5JLz$mTh1uOt1)=PTr(z zl=R_Q=&=1iCUy8vh)>}E?eG@bSoH=Lm?2Q;Yj;&-W5XN9q2lF?EpP3qvFWWnCELO9 zOgCz5H(WH%1^^oX^)~>3|Gy*>2}rziG@uZVy7-_!iReJk<7hyR1{Cx|CA7auxhh?%Lm z5%~Wrk(jFD!BbN&{F9sVTz}tU#sUX>3|V+1G)}ND5bo&W0JkLZdSDS-whGBjvDezOYsFq85wG(77+ z6u;iT@z7`(M^PcQD(&3(!}$Eo^^ANaXCCPcuD}Xz+HHBz|Nl=YcZy-3To^ru@>rk} zC4+d9vw=d5t1IRyz{lA@gtma5l{hGo?wg2H;Qz0JK`Z}D+gNkqheqWA{LrXdpgp9U zhT21#=&U`I(lcUbGFn;$1AplnEm<{C01=iTXm%r+8Ufmf4gVGzu;GV6&kQdNe&)z} zF5^61b1}An(L9X}VDv2ad8)+>rIpFVQT}XT;QzNnqLi84C-Kvx zND<-G6$(i zYSipKr4-ZAZ!V3-)5J4V!$wTO4nP4S3a`X6h06h1mdTZ33E=;CMqFZ$LBXuK8fKAA5h#j5kvn4gfENmZI>F7cSa|L<_w-%)Y8my;8+_H8k7nXt686tbqht{|L?TWx`VjWMjAP) z47!IHil_P8gq;7&`M-_G|NXK!VsUH;=;1&#`UYf>+T^XoDKkWfQc;2gXnxg=u*B9N zXl#>fPi@D|XyB)jKl;~30F?gN2-wme`@XISWuyiD!Yr^oF~(|YRKH;_qhb##7=dgm<;xzcFFa^20PaC5@c+92&!N5VSa>8? zp%utI&t#sQ8px@EWR)!B4;DVQfDRk4!9Cr#6gHG!I=OO*HfbMu$a^ix5kW)BHRV^PaN@ zknC6kh#e5zZ5tC%u4x8f&af{FqcR} zDVH1)hSDK%fgs4TmoXBB5~#|FUseM2jCA?xN@vj72!`bRRoiF&Dax-ft-(EAu7#41 zkXU%n!@vm}H+pl5ilPdT3IAVNV31DPOLSD81=3BQkQpU1Bs1B|*Z?o%@@5>(gVvQY zQX?jo*vWVs@c)jTyISxM|1}f>PuzIwLw4Qq)W)%6huSCaxv{anA5sTI?$xOS?L!L( z_6M8Y{u})O_Aq49E<`Cf@F^_ch^KnWwYX6OCR&bj<$0vAo3#8$!9JRE0ZA6cch4`u~>J ze$f9ruEKwezh__i)Sg@Kc&05G8~m#!@%OMqhfnrK{_bZal1AbO8Hrbe3nxP9F9HQA|!Pj&jU-IzO= zIUc2uc$6_Mnky(Eiit*SOu&W;vyqZPY%bb59}G6?T>29D|9jP$2QEm|846>`tWyT1 zK}3IC0F(=W)}sKZSnzZGPm2ZO5{1NvGL{~O@-fYt>>DM0IAj)Y|21IyZ|d`hK>zIMHo;n)Zm-PMpbr>Dk7nf%~OVXx;(CARY?(;*tVNEPvsh;ZBGVT z=??$_{{N0EWU(HRubQsG4RC`@8SZ#iXT>y{98(R=e8N#vZZV}j^__EEfA`T8l$Be> ztPGF`{Qu;7ARD4=jhOme(CrV_no}60K{E{=9R=IN3xl4f2PiF6U&KS~(Wo~FDqKn$ zaNttBE1lsZ=Q~%zNNNq2w(lZ*hVg$pey9ci@Lz=>@cs{dVjY4B-t)@CONSQo*|gW< zG7<$7a3GmwZeN(yk_F5-sQP7to4BHfc|}s-*&))1a%QpkYsnumUQ=3$4~G zFZ2Gtu&e-QiA^=$|L6VxdhGxE&&OyhZi{hKNJ#5u)B7njQIaUpZHAg@vC9{ zKY+4C@&7OR!Y6J#{+S~FAI8P;|5$Tpx2;;{`2SxFm0#A0MMXB6T#ew;0q!?$xqS)YQG3&1pNQ~@%lf5*%l2#PDms4 zRehZDVU!>fQwtT(VU(@b^Il-KPG|_pD6U5>kU`)hbQXe<)oU-m!kWSWeArNajT0i0 zL(=RerS3TYul~pX?FRk-!-DEG0%nOT;6dy*@{@2WVtCe4ctipRiw-in>NH9Q zPDQB($89JWHVoF5*X9$lH^tCoNblLvX7}{kT6GUv2mb#)F8`}EAfbU=_=@!5U;#d4 ztRc2mQRRP!Vf=6F{VnlNUH*RKv!8tJtuKD;+aEo0^iVs$qGg8{77D6Y<|s?$tXJl! zWk&WZLGG!2PRA-pv8ovGG2qPDd$292vm&5fVVs^a!r&-s;x(D#6b+HA# zO$8r&TPs2+6HQLw|33=(Un6mL00@al1U~smFpmTTI{*Srm=eH|pDsAE13(9s)H7?}a{Qv_yK8G5Eg`EAEe=Jq2^-=!>IQ}4s<70CGWukJ8aPs$qt=4m2fn@G#Fu2z1 z2F)pcyBchZldhvg_U$@)cn#}rwYLSeew#7X(biU9q!2V>w&(lPPZR9_Up1Gy4x>zF zK3ojC!+v%19t2l7ty@0-kMsYUk^lGGk%qwD33dPo@jx7Y3moetS&fm{GU#A*&_t>|F2nS-GLM~0Bl%*dmiVm{0jSb;2uS=d<{oL zW!AXSo6`hh1EBr}fN*zl{eP1Uos5xA@!2@rCp4mAV39#snEsqBxVip6*Z+^H1=s(7 zme2nhuYj-)Z;lI89E-*0e{Cr)5Y#ZUV9rI_dm2q~{ukK)?~AFQC=U$^9R929dk+8Q z@ZWlb|E>f7|9Tw2=`?y-0I&d98T7C9#C~bO0-zoO0QmnIKK^%X0U@K0&3~6MSV;#6 zAOCCdDFgri|NZs-;OMmCR4zEM2MX>L>9i)DQ=0|x@M_Q<4SK_yXV!bc=5YGhh|=uC zO+RH3#}(8#I>Sn=89GZP>0As3y~{UiOgg~-KdS6n4*y#V2HMH#RJ>?Dk#tljWh$1& zSZbw8kDo$BaQI*7;H#Z|lP3Ic0P(-iyTk^7bb*%C?>hx|k8K_{078^f!0Co774BFH zkKtH%0|4~@`_;~e10d&uZhx@Wpk;A?Gz@BN_$i~0_y63H;3cy1Jf>s1{lDK}{U57; z*8gQW48lX|>6nt517r=*O#T0x+O#?Uj~xK9IK-5Z$}Lee7jym}HR%B(%Jf?ug8lzn z74&mo>~$JpoAUuc7TcVVu!Vf3*eTJrl^oIpuWwNY0Ezg2Vg(85ugQq?04Da92L|bE zx`sDOKupCwLL?^uG#~+Bc{AR=LPh;$k&~EMaQy#&75tvqG0F!33vlHpGIMR5pxM?J z5*VES$N7IVg#}GVZmj-O_}&PJsbE6f%<8`Z>i?n9aBBVkJ1NM{qdC&Ca&lVc<-b^@ zi9gEla0k10EK9fO3%oKWa4(|K<*O^5L1!ZvlJG0rSo~9zU*So@J>AB&Loc(&jozG? zDr)&J{C~fT2!_l55dw5#EuEN?)H%Tul&(=iZgkjKDEwdc-UdvrD=Q2v$=3V`Jo1c3 zgAV6(|WLPB5@kC_Qcc7Ykf?}mIp64(R??78pNefQjRZ=L(lKIZgv#R|9jx)fgsJfZF1OiLLIiQ;MmC}75cOVU+!EC z?yzU>%se^&@66FtCo;p=hrqq#(-;%^Wo<3a|M&$3uc0An7715unCV9*sCGDC#7aOq+KL76*6aL43qqP520?`(K^e5Q?Kte^1|B>T=GKE@oZ3+JW z$6Q)xh+Eo!`fL`shN390OQ1w-YKLG8%K^N34AafT1}8F1PYHhuEkm~dn!o*b5cvP& zit5xKHIyy7llDJ`!KMF~wEt;F`ybW+>zAbePb&Yg4xgh!M`{1bD!yX-F#&B_%Af_x z|E>Z5|KC#nKjeSQ;3)+~#ResIJ0(|Sv+KS!QvRQylmd=~bVj?m8jejb|33}<|I5<< zGv$9uEu+ap8~||un&AKd|Nn~g|Iqp$X;N_ji1@3&aU=~uaillJC-DETN&gSc|MjPF zZMcd9AP#^R0z|3<|Nkd=ZVb~`HUI%!1d0mM$ae60`T8x{0EDA<>H~z!ac`@^dtbo+ zzm6$a3IL=4AkiDizc6L^k{VJuh?$uv5-s$w;koBQ$v3Dl#^X!>9||3!sDS@}qcTNe z`4KAxfSO4I_^k|X1Cl@r0B2JGDgA#^Mk1moK&@T_zv{|R8UV~e1AqekfBy4OmAIOO z*a{w9qWJ`yfN;&;XZ2lh9B5>uj}-dYUH-c(EG`yVU@mF&dhzHmfHf=r-DP%G{EDK8$5ONhXz}w}VL!aI!V%^&dzWAF zDHabQcAFMALj3Qp7^EqyeT53vK!a8NRF3J(Mg>Hm|U z-VWD}0lpV@I=%TgB(cH$e|{%nRV*Z=|Bn)gMY%%y|5)jLdw^rVANL0F=IZ8jtZX_{ z;&LFpksX3@es_E0?B-@~Iuk5G1%v+oFD|X;Sozg>W6-Vdx)Z%emTB2Ds~ero*`#DR zv$E#pO+CPKv9vjfl9%T{Y7=pI}A(y6=TVnA66vBi$th;2} zETK5_Zg9VVkFG~cTv*=?V_7rf&0um?k!k( zcRQBwe>2MeRsXNwmHuC;{KMi-%KsfV1Sx}3L`|_li8!M=3{6_f|B0ohlsoYM?@9l! zA^%$jPcd=~sMBJD=BIHf|DR0kQNwW_`hWd@#>iJ)BRU)L{3yRmabMZ9=|L9#+D36f z>X6+EqP>wCyd>v;1)beuVtU51zv%g2|4q*SG=>r3qZy<0ncKJ35mNE?ptG?)sPj&H z0FYAtJEOfORr0b64Ot8aB*GDy1e43G4A4M@gl>IiO5_#e{!01p9F+eSIRE<%=df`o z4uJIk$)X`RAX*{moL}Z$lKwwbBYBETx%0KsQaOl)w<54l4D zO(R~AW-U*`Nidlvv05?AY80`N)Qv6To08xQ3yazsT33H0q zIo43c$#-zgw$77*2=FI3xbroNXloh5@Xcp<((D85|JPtWh8SNmevK-Wh98pg+mMXk zY^yI(1!@1kZ*A@S)*3axn~SM_Wa-|YQXT$o96x#NlyvyR!7isQ8w!Lu4bJdA8uLK+ z8rk7bS(54xtrNkg)q3QOVE_NLAxW~A10r}P5Dojy4wKx_ zKSvw8(l=`|wQFl(>4aV3BXhz3|9xct<46JNkefJO6s`bS&n3d+$(zPP z@Pb>T2)oUm!JV(M5=%6(XyUZEUG}mJ|5;u*=>Pk(Ey09QO-^AT!_1KnE^|`Zz;dfs zE=|otwQP613DBorB7S)b&LSC7VcCJGGA-VMOxE<#w4n}*6Tb; zD^jMpP9tn742e)f#G%?XbbFnzS|31LnHuzy0scRj+5cpjKyhTDaAmL3yOcr6#Obur zq~*kqM4A#|M}88lWAMp|9|SlxX9?i{`?QfDTy%|Tg_sHzqZ0t}gl))ALMXyTyunm+ z#ZuEVbAbO3K#;hmv)7Vq#zuwgT*}U+@==Mz&ubbODkh$;<2k~JI20ME(WXA4{dQW| z4*dUmb^NzezKlM^Iihk9I~+Yp@ql1g)WNTvQ-(^su*9c#KP=AHf=K&x7U{BhvmWXp;c{Kd8~Iu~l7!rhU3=5LO+f z5c1P*QxBYVB#XG701`?UxkE{Nbv=RqAK1R(*#|a4fX;2S+2&Ca9-qi~Fr4Ac?()$D z32boF^b2&a^qsMZ0Slx384GABoS}B;tPxUL#`d(Wga9DRN_57{^vGto1pNP|MBdMa zdKnEh zAC^^x2|%g=iChhf^QwE0QVnPff<$F2^$hy|Es3avf1#bSh(CLVJyPUou&&)Lp+=wP z$9A>_t!X>icJ^JmHE7-Czq>*U(X4m*qhXfV!(C8ARu3ZhcbC~&k?l^Hv914{3*dl{ULr8uxk8f}(?)RaNJx#mp&qoAhzJkcW|0|W*|IaUcu6EYvf*R!j0MB*? z_$^2#`!+P-i6nf1LqU$Wqf{VuaguA38JrNa?^|dYvpN6(`hUJBu?4)qKogV>iiRw# z4vKPmdP+YfvXYN?;F>{*H)%q@6%Yc1Pw7t*21Orj#OdkkC@r$YnaMye7F|J3Fr?9p zJ$HnqrVmP>LAek?;#_xo0Q;bq@9e~LVLPo|h&MayO{s{m@NEAua`4Hm)$Od72gTHN zm^gdy^rKI#4|ca6I|%mwVy6F1WsVa_M}u)a_DIM%``%DR*zsqERy|xxp9a1+^W`du zxV3Pt4QAS7&nPVlLn5sagExiL>m$+gDalswuvwG-9Ib}; zT9RFvaBM(6c*UG6SUEV#IYu_HNz&Bn zy-M2Rw2G-4Mqwg3_FXoWGHUBU*HD1Mf6&mO+Yy@|>N~dw56)-IRyCm(`2QU?kQ^xB zMLH)B;hPQwteZ6H*Sg7c(2ShJjI1}ARzNPs(3@3^R65DcXuez&QzEj^g!M!g_)bKd zZ8_(+X*~Ls8l3qDtA0cl`2U?p9lEn5f7cX{?dF^xJYz+=jQ0BFZlmYAjd_@+%2grTrbeu3+-4gi=` z(fk1ZKkC62nJfKCd}Cxl%uj8s>Xi`p2UmI>E40=;dqJ8)l;R&~Az8}clwobrgJ=}^ z|8(L?A|BS2{n9tj;0A$g=y_v+`D##I6-bccBYq9oROJ@@na$^X~p5bpo?eOj|jK$GOB#yLG~8@rzX zZ?jV!+Q*jNNlm6y#N{R1qM&cH6|RAu-#wN`vPGSNJ!!sfbC?;?YJI|cNfJW}-|D&o zl43|~xV#KdVU$8HWv5r?w#0w~4lAlx_~rE*iOKI}HzJ$@9-aOg#wc9V+FeUZ{TMSi z`2Vppad>Ys6L4n40!bQ9&OyUTO`9ww$YB$P|H?gV0{H(uraXuu1&IMU063*w3Zk&A zOy9twdOWdMEZ9K4L8onDRtgy$6^P(d4E{ddTlSy@tPJ4)mnHuXWk38w_uj zmnJ=Jc@zMoYzNF{I{?oA`hlTIR&_lk-DatvsK4zYo#ui0s5-FSc#3pnL`#Wt!QA926zG7<}-{<2XTnYbH)lK+?TKG6(KG!G^JPxAkCXaVQ{9nbok zur878$r{(7+&x(%r7Iwnu6FtzI3DV$c(B%s*LvMs@VmPmZ-RGJsYDjfCYBcB*dc&x zng=qY&%QwJQ=UL3qS|h&`>|PI|1S&wdu;#?^M)&KcYDvR*7@`_%_T`4FrK>z>8Y>9wi zI&CGKAF&PI=g8L!~i*u)Y7uGx_k-v#GeSXx)7 z2a{f3^&J-ib8!dmYz^~S)-J@Go%QM;!JALvT6ng9m|#tz^Z(9E`!B6badgKk_hu8E zu+Z&_CM-fF{RgWg3OHLoF|u-A+JBt}|NoS-B6CA#?cB5Ly&IkF8&~6vLAO`q{STLs z;EIu@s~ero+1O-`jbzQsE0^?IF!94R8>_wx&bJT*q#nEZ_1F(U0?@ww_qX65`I}P+ z+`IFx`yYDg`IE<@(~rNfb@RxrxTp5`&n!g8+6zbG?Tzjx$on%3S1zA_WM$#;#}1x; zVtuf?rF<=W*GyRiLFnooc zzJl&8(G!5sy+!68Io*edTKe-^w|g^Q-#!8YWzgG=F$nVAy1st1Z(g&8M?h0>&c;Ry z8NC~j@PF$gE%i@R{yzFO_Z~d(@ZIlw{&;jOS}cdAFRiW}Z?`YT{hbWnQzPe-8l8#- z)E~n1;tHD2826lJQD{uJ&lJAtoLz)(Mhxdg5$$Pay-8bNSvMI7MC>=Y*^bB3#BxGh zI7!j9d}1^{mzPK1TVdYQ>uj}N_fug1f2qX(rT%}{+9dL5TBFWA`oEMCisQ8uVyV!egvu%7Agv(TIFgN%QA?JMqXZ-T1=%cnGkF@v zbr6X?xixk+5a|CGJo?`^Be;gY>rBMC&oG0IugVd_W`~i23*cF@(ygT&)uhw(%3O^6 zxOc0hL%M+fpF~tv-iMU9P=Brr;mpEf6iU898OwrfUxm8T)d(JaN&ib^sS>A?r?^=RD(?Sm-2Z{{|LxdM zA{>!P;7iKWB!VRbTno4d`YmJf!j-_6Qu@Z3+nlL$atlu<3qOD+1e1z+c!9|U`DvxnQmUZE${pfUAk&(L7VC?Ne!e-cqz(mJ`d zOlLp7z&ec%$`7>aCm#dvl9SC8H39R5CJeDd^S=50RLYX_6GcMdcN1)sxhIAS}5@U(<%RBUY27S045Yc_XRNhc5rBpE(?qgAzhd=c`aJR@W|X6#=g$sgUY{ z9Ir9!|3UvhDe9FD znt*Y9z@ffmAR-nfI5?qoJtd4yw2V2>|CbbShk_U*W;{T7@f{F8=DQ=HUu;k^aYmX+ z`cHxaBK^rv!itDF(z59WX2mF|z#m#_L(_j${@)c?sL4;2^#26&xp}}NqNu>J;4AsR zlK-2Xu;ihXDJRqd|GznrbxPb3NpA_jCI>-M0OU6t{sdm8`hD zej{n}Vd2vEo~3ua_|$Jp?iT^MDzov40{>O&h?O}8P$wT!XMPW(_mYBoe zmzcB5m+ki`h3hq>ZVR0OZ)MY`fhEm+xzzkxwyd_Im*uW=rY8`XC^V&&(ZpQ+qd5}# zP6^g55D3<$|2--du>UuQ{{LhL_76(FLD>;8uaxE~2vT_2xaYtptvLzr128KY7^NsC z(?*jnWAhgH|BL*rx<|n>#X<8!uz?%6LpUp0u~+gQ2aeL3!xqJ*aLX77DcY6;`2Trh zCXx@9vZ%nI5^yG=IK$PAC^*Y<%^2fl&sptcv#D$&+OO*fGjZ#kT}4}~^~RIQ^k)O3 zfH3ex9P}HEOOzk*;$$e?Q+U~$jiFn~5T(EYU>bQ{jCwVJ8?8KnK`DweCqwoB-M|0s zt^01kzvNFKfFSVd+wLtKIDGfz==h0aOXaj3zO=e_F}~6158~d%xW9w+Hsvgyujtdj zGWp`2T-ff9(d!p!#gle@O z`9Xzl+u%$V8W3VyMqwok*KEb%yFjJ_j|9GyA{Kwg{mMKKN}xgc0D)Jw|K?!(uSosR z2gD^y1tS(ldnl>4guhQx5}wtMOvm6OI^fJvX)@B39O@!XM!-0EwzFN0<0c7TFuF|A z|A!K*DWoguf3r#d8vy@*B{IR|-mT6?JU`0sQruVh>}epYKNn5KE_HUGq1b#Zb$4f{ zt4e>C3M z?R5rs&fV<9+k*nYsh?qVX}IJ|AjsqTo=TU*pa^2a^c0L0jZZpP<6h_bod%N*@V{yQ z!C2g~B|CJSCr_1H3}WGlrI=52PLR~a|8I&DRnY(6%H>N+{jafRq{*n%|2C)ocN-Lt zZO}7zz*^BnL&nJnDzj2FWMEKfGAd0*=b*``%Ky1<-@PRN2mT{}(}w`$hP*z_4T+8| zS0^{*&3_E}Kd(#ke9jGm`Ks;DKhT|o0EkMBft-#=vjB^{tI`UexU~{YWraMyqANP)ctta*W#gFFW z@@P+;uu`ImvzQwRrLH3#n?!4okdXTSL=uAj{}Ld5kItt-01%+Y{NY$-*+#eZ-ZInn zV}*H7NGMm3)`Lc$-XmP1AHfP0aY}^-B@?G4iY6_UU5Qms%op+#q$BYEEqIaw)_u_I z62jBS)+%em851LXkr6%C-6*n)FA^x2m)+Bi?YG;JrK+5_?aoB>cIfRkKll=Nn@B*I zwv8j-1)}}n5rjBbnZo_#4QwL2Unw|fL42;TFk58t;q;h-1sYOt)QxqQe|MRk6{-KB zR1&e1j(8$Eb&4aBD5Cn+T9k+Sf&c%6njrik;wYojNcs^E*%l=j|fs7>-kD|g8k9ZXtf+(xJ1Nt|3dvAlYZwJ=ZW+^3# zybuTe|Iw{$Y5Xey^}y#t2rrXIc-H4BbeeTPe-W#OZ`xwPf7s6OEMS&ZsnZDs6dGy4#Eht3rB9OF*M> zC!k^T%S>s_GY74CR=2Yt5!!{&9!Ewj*~uISQ$3R182%(m1qJO3)&Hve-+lYOy9NKq zUsWOS;xqU5-+%a<-hDhe)-ESOc%!?0y>kOj`McfiJqHPz8L5ICyw>gBjMukShSZ?9 z8&CAs_4S+m$&NVjDOPbnODG@_0E*;#hM!zg2J-*5uSrg3DqP{;2$&VJPb_@9#tNQv zS@{^uj-ETA=D@M(4FJIZ{~D9pL%mBxSkeH%Z-CXG)TJI{j_Wai|G#$VX#~W$GypKk zbJ74n8UQq-0RZs-pH^nCooB?@0nz|Kfr~_8lxcu$C9mh8-@=Bp1Nda1@&+ep)>9f0 z_LK$y&2Inz{Qq@|=->|#u;l+Lco3OLeiAN4(3AXM$^TXKLny@JFt3V8-@poj(BR|; z1^)kfm@E9v;N$4KBUDf^FcGLxL?Bj`GO+~pM6{8ggpM)zct0Jkwn$r2lV%QcCqBm|%#0B-k_@n;!l@4g7z1{PO=5ns1Eu z8kcC<2)egSYY^}~ru^Tj)kN>D(82?=qrNUdZ(G=s~UK3`~-@Z29U~9r~?_ zD#tk=G(Rm$mZ4-BY6i`+3_<_D=sB8WHo<`Wv@BHyLz}f8QKn?F9;?WBTT*2(n<@j~ z|8GF{it-!f05ELTuvA;m7=auBmKdv!*^BwWb?UU8X%UCkrzJ|`{7SJ%0RZs-2POYk zqYrRwR8l>eTk?My2F=e)^AZ3A{(njGe>MLj?w_ACP$mDjDNa;@1Hgd)zftmkQ~uAd z9VGu(@_!qX|NCc;Mtf>t7wFj3)+Nqb$%2t>cEdvb)FQgOXT44KeBhqrkl7c=ed^qc z{x@4Q6gKtujg+C&>BTiZ%@=UMMJV(DI!u&l+I-!WN>ilH{2mMi?lg08k4(ccTH`z-ug$cKKu<|t)O^RL2;>^ejb-r z*P@jfL6J*FI!W7i7J}lDR_onA1H|}M88Mc3re1@=*lNAzBjEr4dEhT(kUJJPzUg!^ z#W$S}sMbv;Wzg-*YQ0Gv2`m-?Sa4W|?0pD}|ybNjZ6A;sH+&c^zn!CTi- z|1-1tpZ^63bgBQ@jC*L~u@v?%Wl$ows9wT2minK>>mg=M-86S8~3gfr}z~yDSgJQ0Ho<#r)rk zQk3KWGI6SP(4^)3pT?j6bK&;tcIG7_pI(>vXT*Zf|M^ab`WYgU?SHRm2M`9r zKAQQld~g7tNFv8>oY>$Q`qg*TA4RnFCE5OO{`UVtu>Zd+rG)@BtadxIsZg34I}q-m zynz^8(*Gp=uNmooH-Z0u4NmS2r{-a6X`=0oBm@CNkk9{@?ic|C3t<;{SgOaiG-yNd1ov2ZLZmlu`Xu*5SPIq{aQGE#S@7 zuQ9Ij8xz$(*&-1K4YD5d<7S+q7V!VSmvT99b;2!%F5rsIPWq9FTJq!@lnD{bUhS;U zg*z|pKRvNIpuK=yqNx)Tu!n^8W0;61HaH<>-?z{*&OJAy&2{DfbB!ftBMAb~@`fsB zGgE?QMrMioJqPah)4PMrC`G2~=={5_A@j{j0D%7g9yHMvJyYZa8q0T)9<~R3YVI!4 z0yXQdQ=(?w<=# zZ4Ev)65;KF%A+Xg+cfrUExS~@!|*Tp zD<1-{zU6}tr^nVWAB#?$e*A?k$i9ku{Z4oL%tCamy>KMn-so;ZO!myemCNTJSy_1e zv4f|dSRd?eDMH3ffd3!vAft43?RdL=G4AhV&Zzxn*v7NRPM&9E7V-j5Qp!g67FW=G z$e7$cn`B$9Bhjm$^uf0%D873Upm@AAC@#M6!i=Cu#Xf>!besV(d((#F5dh=`@c;kz zQK#*UCCYeB?(EQ6?~*SPoYyhhz^^EZB0}O8I0E{bADfSYtgs(mqMT<v&uWi~ zj*_x9uK>6LDmdcxVBj{t>JXmyVmVKh8)5(d3lvvca3{uD<~0l-B+)ctmSH_KrJZ$0 zLLq7C$R~8K^mUpICTKr3r!y{H*19!TaNdyFDvbh*S1OqJl-kO5q=xko>OvBPta z?+v)dSZCJVl~b020{#DYq(w3bfaXI$DOhC&C6q&n5ly-V=@FRTE&Al+A!2Q$I@ki) zUgC7X|Np=q%n2zW(c)TM_@-lTSvNV4#<7~MH>r(i-K1NR_@)y^K{rd+{g}e>cd4C@ z?m3npx>s2nr@%V7wK$Ps1Oq27jP8|=Pa~Q03*xeDIWrgF-8~r;!2jQm_y5RfjFQpS zb&W5PLMEP+M@V^uR=~h{h%%;Z{4)Yz3=W3!2;l$UOjd+MX_>(dNAz39ha>#0yN>v` z?h*w6_Z-3KTp(UJykk(hy3yI3QBo!r$itY6nU^gi_%D zZ%gfe$9^QQR$Go?lbKAMq6(4mIF*ujbg72d5~#TvCws05CGkh$iU~iIqFJwY`W-k!7Ea?`>&0um?k)J;-HxS$bwfH>H>`WDiA4~m zE+;Vp`2UC1hx8wkB98kAyh~|40TxB?OQFs7?vjM7BFCSlmZ*fo$-%?Nm*Qoi-bytp)P5)W=E>*@I` zB2WrQ03`tyTruLe6ep+HpyS}Uue_%BB>}&F69Zu>?l7J@I}r45`ci@a|ED3@qP5Eb z;Cm5>asaR#0IcYz4q5>C{~xKjn!SCu=n~&_j2C>8L24oK!ht>w!o=89 zP6J(hkA{NLy(Jy$OVvCYv(IpHaIaQNemax`XX_CfO7sPlCzfg`a^S2SHmmh;B|HT% z$$la|{#VXQV`<$J{+g9>l3&!;pb-$ZAnC$v>ye@dnKtE}(_p6xAhX&DZvr(KW4$(g zn}PrTAtZ^(h95}f!sI6#ezM`G=%=6`T3E(RAbkw@|DUD?i6y;g%)k*{EyS9=|M)X{A@CR=O zTt;{zc?;vv^F3z*EE|<`PS*UQRmJ~s@#jz$%mTF)vamJjV!8;CyG!ijQFgKAlW$Po zL6es7-yDSh#y)=#^#4B}l(%WYb+mN4&Ld5>LJbgfj~kQg_DvFKDCgKpk6|Paqtd5A zei&cS@f6X$q6t6TW*t%TwO;2;6Pt|TLSaa(AtYrhpYStO@Y*s1{{N_>^CcPpAfY(V zEgvKrAkhFtKSW5tm4H>9zG0+}LxUv@3jF`$S^Xa&`4T>-L`?~RArq%xK!BHozXSzD zn311^axwTM;g0|Z=(&Py4YSIJQ{ex9+=IjBP|lL!(dmk!+;fKg3fb6FSWV}r z12ZirT#E_VAum7l!tm282@FmcP`@=Iq*P8^GcZM%6Y&2}!+(soD&;>3UF4IVAc-a! z4PYZ1H1>~h#zj4v6b+bZ)Wh%+;cO~_kv&lTXaJo4`=>?!KWd~hL2f{7d$?b}Vdw>} z5OG3&5|a`UP(VlfIGPZ|vi%-KcW(9Mu^v3oFyEDp`ZGt1CM3v4eLXE`;QyZ;%6r0R zrP%xA828vPa9d@seyC}q(6vO^L8B>@nqoti8|j$;}iq;D|# zYx08v|NrYDXYv!46BLYiv`$cv)00yAamhVQ@S2`6$-_0OBJ^V({l##Tek(9I`5OI6 z%phcrtL`VY-}^}W|J`fdcVqwC_uW&~fbutG2)xqy;2RGdzWbpIi_6E#>nnIMzR~Fq z;$F`FbgkCHhhBZ#2Oorqy&S>B%Inl;Cf46UF<~lB5aUfUuFJ(Oxz2{%J-6%OHv^6j zX&jf=gwTL8R}aEg>%ai?|1XJUZYm&%xCb3#)V_!Ad^(0`5d8>NUez3wOq}7swX^+x z+=EjUr*&}T7*jjkgYa@O`z65t z1veCz@9uUi4(FMpjc_19&uahm*X>W9fOyTHrl-f}ehJ@)XM6Qkeb4!_~%Le@Ynpxg$LN5s+HHVX!2 z)c?-(U>wVOFu3N{$>Q4X{%paH!*%I(&c<+~v_fJN$b_mx{qL`)-ftyUy@$E9abVB^ zR|vO~pQG_3^?!-$Lf}PyGT@W?KLQ+}MYBy*jCwVJTXJ=;gHjIB(}w(?gHr#KO29l` z{A{G;DC`aAjY%%v*zI)&cclI&fei&*Zpk)B^*NxS*vnnc|JFoR3o1({%g$8J|D4tNpRJZ7r^1p-OE>IBdB z95JWYH&Gv~ltBs1DU%`ap6hN8pbf(1J3I4H*SK~e-t4SbJ_45t@)U2FohV{4Z&~*c zil5wC-OeKADDK`KUd-M*{pb_xgWavi4nq9@_hAOv4Lln|{OA+X08oL;5o2&I5Tem< zVH`VvSKu#kaDryvx6m?Vm$CV~jKKfDF82SUNYr6D>t{#ABE=%SgbgXfqw$})eOoCo zP}`l2^;-8M2*?_-|7T_YA6iPNJfOYCvrk-PBbt_cQ;&*A@F^x!T#&<+y&^R*Xn}qc zve%@zE&VGSJ$VQT;(u?RPNq@jmt@ONjOYrP!}-;+)c;BSUt{Y3{(|KHfk>jvZ@U4E ziSCiI^l2D9UtZh_ll#WyGD`m6nWK{bXDe3Y(sG8NI{$CqzBjbsANgy2^mFfR!ZB^% z`*p{ckFA`3{DrNXN1%(YYCv{oAv)GxI1+DfbT{E}sWS^#E}ws7W#RG14xS!HQf*t= z76I7OTU{ITm^Km5BA$mPx=mFaUn^OVK5Yzas^VI$cdSAD@5At9Zfz&w{|vBLz=lxa zLq~GW2E2K!l)(v_HHF}BAxS0S|K^AP)&AdaDXOywSknI#JZ#paKgkXt;u}f-lk`7D zKZHUo4)ZvT`VFJ69U9b+j1bsG1_l2AZN>eLu`rE~o9|9=Mb5-2A`q)e`A>p^qLS`? zQvOp5CTCaz`2Tm{wh2$k@xMNnAZSJ+#3OX6z_H-lxUyJFbQ?P2)>+Fir_sy#O~L9X zAFBA@eXS#{{rB&C4*ui(z52En7a=0{a&+RvvBfDw#QHmEpO7+ANo;qL>1MFFg65M* z21DXp)cu4#CWzT1uXJ8K0igWQ1pwuVDS+~MH1m;=go*v9doR3r{Qko)ZNa>bmou-8 z?)LT0jVt}Q2gx6KrZs-dvkZANxntF@b-Op?_3a}NQ5f`gV+?|Px2~_>?3>pt352); zQoOHcVg3VF!GoL$rH(2MvWxbY}4C3hPA4NfV~WE zk&XXb2-On*n~(V4?Fu$eh1KT%*mwarD_{nS81P3MGpgIhVuky}2y*k%E z1^`$j9XrYY*?&Ly|BmY~7v=;4;QvQM|34D{AGyt3fM>jP!+cIY6B;PX|4;M(zPq*W zyXS=1>$uDppLwx;|KV?XHw5U~Wilunx~h&dAu+l=({66E2K`p%$C!E4?3QKpAQPuZ z{O`~wp#fCexXwmAKi2Q1xUbTC)1B=8T%7lPsk3vX*O`x{?(Xb#dvKieT&(tTcl>2S z{ogZE|2K?a*}-_mm6ZBFssC$C{ons!&i~L62OQObYc``O?xD<*Tr&}KZ)``u6&Rd+ zjs7HYD$AHjd*PnD*?|TcT(0U`xzheWlUT%_vt*bz>M|P-CP2B;{&P0%KL=_%e0RrK04ZG|J?Nz&jZG{e z;F=v?@m**JwR&MP8@?hir&cXOq_qFvZb}@_LOMe6lUq;k4l-4a5}COApF{h{FSa6Q z=K`mjsyMDsot*y*ed?GqkZV~OYehN@9dPTE^M8l-8-PjoZZ z=$4pK56yhGIcG{HPN$7PEDb;syxNA_7~qozAT_aQN8uFWe}5$TKSQ}f*nprGi4DpB zk^G;gTp=_<^1BJ{{Q3})l_?(lPkz8uukI|=hv2%ZvY1T|JtGT zn}EbD(lH7G`qIM(`i*H1njb&n|NDepZevgyfOPY z|1U=HHi@GK#A^5gkALvRwaUSdt#TQ|3| z0f6Sw0DdcjTVPw_wpiYl6adU-uUX~)J9x1$F-5xjp|A9XosuIMB694y@nYM7F+6+NY;{Ou=SM*Z{T?h96`}RWX zI#4?CfHT&-085jfD$o~H#q4x4Ij4Uk?%s42(TbNS6G-WviMk9<^Z~Kg1gJVyUfmt#C{z-vy+Z^B06=7 zn{^biOZHHItM$gWI;2A-7uIc({tMu87z?fiyaWAKz+=*n5q6o(;I7DU7J`-`>A%fS z|2^1hz4a%h|A*nW@mRzg8%d=D=5sPA{YjV*vEVbeZ>tPa=w8~{SRXX_=o$(C%_jT@ z{XY)9Nt>gtT0^8L=l>ZUEaiVv{@0B1znj4S56Ss|LkWn)owWZWR!P{y3EDkA-v)ua zY-38!|1)N85|dC04fy}CAJ?5 z!E*dxV(n2?2dstopgNgo`Q>=Q{{M#_miWJMj0m^`0=JlIAm5;ri0Dw_{~pyG=2VR} zEXd&+O_n82XVcn!{H>{hq*@AVGZbagn z+-yld4NCO6t$mNz>aqL`e4X|sXu`ET78g5}Xf512iym{tHC!$opGGxOS|Kt3>6gkM z|8u0(I=I!`^FJ|dCYp}nLvlaz_SHo!lohpWL+tm-iB- zU;7m*y%0IezDMKsJyiey`&&QO+W)cr&+p$4|5Km8S0BFj<^vDkefj9|=vcIJ`tcXG zZXUT6_xhdg_L+s~SbO0}yuH!ggzV-s3s)|me`ICh@y8CHeqw#FyQSm;rgQxNwh6bo z7PZ?KN(5r~QXlqI(Yk7{Bw2 z6&ROG1LNxUtqvHQ3$L{Ay-9uU3)SbA%KqFVcke!P?~Ml@{=mJ2N=}ycy-T~-`WwB@ zwHS685Nas$kuV+CaCG{WA#z|1D%w^qd#}}c+s6SVpFSvW(ws%R%+T=4$Vs0$%8j|Q zh=5P{V#!WvEUX2`MI6WDEaL3>T5^Mv4a6#_^*Sea0>@}0eI!1cY4Izr7%D$lAn^ZZ z82jJ01odOsisl8Fe#1Zxu1sN2@(o7nO2jWgzm1bIz$XzuB1nM1(f*lh{#BeMfdAhK zY0k3auY_Vzu81JZ zHz`L9`2VvqNLXq|8h&9pIYLHyVn8ZI^{`34gMk%nK^=Fbq#M%WjFzsCDC zDWyQeuWNQ|6X5@MJ&LESmx0L_uGuou*bn5@01$HyPQFHejuz0mZR5F{9q5_gFj4In z(|XAhKY$4n0KtGpBSt<_lNI70GI2&IYB)B&<0oQK==KNv|Jl;<&!TlAUVzvU$Z8kh z1&>xb{v|4&GJpLMTd3oo-R%$f|J_ELTYNxOehKi)FP^30M{1_lNA(6~Dh)qo)9{06 zH4K%0oNQE;ani!gLeX7O2rKRj{B8)9+W_XN@WCI>G;?9j(-)i|95xH2>_{7n0O&bGzlK)#1-!mspf&bf*|C`ugjtM}RgdiSS1d{(N z`M=79BoqQyjBW0*8uc5q^cjKwk9($$CNBBE9{4DMfnelCt`EI%&6X<3Kn~qZY;fmm zER9P3?>y%JehEnll5`+DMaqIlFi@kp-h>Xq%p4q)urXy~EQ#Wc-Ck#KN78|mWTnz} zd^k2e9SHRQi4mkK`Txdxll*_l|8Gdg|16C((IUYAi`f-RQ%U}RqCslu)hW$KoC;(k zNdCVA9gFh4-dxZ|b3tDIpcBdeKWQ1bdKow<0oP{fwUUoBl&zDvCI8>pbQE0WQ)Pwt zXMECWy1|e1fbtPR|1V4aKNfa%;g>N;yR!qQ`^-l*)b7qsw>OA4=VG;!$^Sn!i8#r` z<4s0^DKi|U%sB1zth-U=$st+#2n@$ufKjm+)0Jq?G^w@Ft&c$J!D z?giokz&j?QF>NJX5T7e7%obUEEG?5}kQTh1ewx-@{@rDER;0-)q2I`9lW%=E;z{rn zZ3=0>9I;FGP(SGZm1Kemtyp@{p|8o46CqiudJ(xw{g1+u`lCRCE3@P3;shi0KUN-o zmM-T*a2UnlCKC-sW?EBminK@*Z(}ZwYr@dImlYn z_DM!8ryn(q?=e|}{y&Ya>!{6|RK8O&&}SphnHcDHz%XjlhTy=0CXGHgv%O3_Ff-mX zkJ_~BIGMP6PzYLA=+mq}b81|B4?{HYa+^0bc{?>kD51A`i1H?M2%?%fwB#QLTLJSN z4vWaxQ4f!By|=dm>uR%<5=CArRQlhs>%*!Ko^TunxJK;__k!~+q_3v!l44`2wlgIY z7jxjw)-a!KE(-w1H3vZd|L;mrx$H~`OFv><2e^VQiC%${Sn>^qc*XzE)JZc$sQCXC z@&6B<*}4|@jzH$KCp?JF#en%SOB1dpsp%*HQQpH0&6|f9KlTV4SkF6(SmQlJ|9c_Akh>I$>$9dmw{-;i|FKlFP+e@> z@{DTMNjGzrIU!jSmj6@}tAtWHnKrg)=OSwY`2SD9v6;{$QZgr~jGKUiBVJQVT!q@E z=I7OCZr@goexT=bXJdU3PcZohyStWg){rz5iT`=6pHld?ltJ?|iEIbTcAz%uv+Y38 z|7V9BfE-WWm*@P6%5YOT@g-XwgcO2x-{*YV4|q1*$OEp6X+Pk>oArQ$Ik>AyBE_8g zx9<|Mlat2+(O(!Sc?-J}!0FCV!xN++4^SC~Me?j^Pv! zd()>uj~R2xaRt%6S~mDJ8k@q9m;p$26s0Ttv4C5;p_n67aa>1-*h(m@Xd&kD(ouxPcozO z3!!^WXs+CJ7HL)gg;#C` zFh}AC`2U>V|KxP?5(9S51|a&nFiJ+M7fZA@SSJ@)Cue^x)5KxKMjRbXip3_0Pi`%4 z#w}W?o92-BCM()mwa5uKPS!5b#0P7tjNo@ulJT3s|6h%5*%@Z6M3VnMjKN_9@%79O z9fB!ngrIAKS+@f(d%}@;Y=@Aov0V*s-wwS^%_{qCK6}YwBl0q}yzJY7nT2leZE*JO zz`6?N{~x-teS`YxPTZF0ZGhP1ToA3<$T#R0kc%Tt{5@g%F~BEH{3lPnGiHgWx`WR3 zJD=O#ykqe)Wg?iR9Vr0)e<;;D=tj}ODk4Z`j0!moKu!YymI|_7CAbCn|H*{^)9HF5 zgjzkgP|No?%|C53$(dl-0q!K>b zI3A5I#+-ORR!b(@4ptLALk-8K7qtTazgHB#Mcll=EYjwr6b8xft%<@<iM5fgUv^MBjg#aoqKk@cLSPxUX3>f z-Cm71LEUA-6~p7J8=cKEip#Mf03W2Lv~O0{ygaG$ekoUrqPtt^VgwN7Tk&NIbVw3?|-AV_6|1V`{50PaC1f@q7=r;`H;EGLf z`jHV%N3lW4HyHd#=8{hc*eK$_C#3_;+8zS_UxVORO|zGb5TP^+V#ZkZWeXL__?L`- zj}tus8Z2E~0{?&B&1?gJauMR8i}6Ocw>d{aa@h``ec=!_6qBf>Q?rK&(WKSBN2fQ* z?!eQwa{~Y@upI#Wf3+e>Zh^%WBf0#ZfhciN;vV?{RGG_=G^S|cV3`n@6BdCH&D~j_ zR}cJu7fUfR`M{AVfi4duLIVr89Zlbb$-7tNql}GH-d0CVsiO&$Q55uhI@C4PT7`x+ zZJ7}0G2(Qxv)>-8ISTOqmx}$bq@MaiqJEA%9WaaI{@_ZlgZ6*`7L%96r3{*1yo>!$ zWFZ(f!2cTwvmxWeV>=(hrcQ<*ik6L;=r2ablW zape+)05M%Ln-2X}@&6McMgccA=``Q}|HN|+KT}>t^i|##ITiv0ZCXy??F%%gQUY~S z4Jg%skQm?eYCzEcUxQgm?0>QU6U~{bPqF{A;yA5@rmd%lE@X6bvH0JiYc*_XceS%V z7v}skw{NS8Qt)0n8|$@hPo&vrgbla)+g@nPMynL@~?O8LcG~ouUqkbW?RsOV&1auAr5+S zYjr!@sYVqAI<+`^@ARWjtPgg#9y>@_CwV~eKe?_fKlB~1cMVS@Z(&~bi2%HiWL)Q4 zp)a}L$rhHFsA{tFJSc$%g#`ky$b{{t*o+p^5sEL|9#^CYPCLj8G8F=hD0h0W}|fTbC|gQLz&$a+eh608HGPU|9{z#=Z$kN z>R*X(QU7H~7YbI+jOzE}-XPvw-JFiyKE~8^Pu%mn+Z$&$H|yIK_W|(#_wD=E7W^ZB zm4d)WmcH@Ifx~yd=f={hW2a6({=ycVXczbTo$mITh3Hs&;Yhr_(cJ{w?aacJ%jX|i zS$O=hgQtg)9y=yt#{`h0a%pw#Vtk|1AH==VI>4?Rr?w?iX^O&F%hBlf*bcBKM!z>k zcUXX+nI~BTl@ml!jFxDgP@0V!rHRpZoz@}f9tVTvWd;TYKCRYk-VgczACUH6sRe|i zo>Kl#$QTII7>FK1)*=T-gbAbQM@DP`78{g&gYpxaw3Pp2zz^{W_Wz9`_4C$V^IM|l zrzANIL{0-~$Y~(J|6Sq#1OmeU86g-=f3?%^fD8UqJXq_+YrXC*_}$%(h5wtw|IdOc zklTfk{C{8)YGf+DL58N+kkxNt``7_|GLU0Aau6aJqKHI%R-7}ACsLt@hY zQ{kS%D?j+8{U=ca08FDs>mYT3|F>Y$X0J1Hx{KqRPG@p_(`h_z-DLKGqlnq;b&nvh zhCMlYt25$eOF9)7<^d0qslc(|TXau%g;^-KuU*A;a%*wAPa|wEo*Iqp(${GWB}ywq z1|SJg{emRm{~g)?Pb?rycFX=hp=t{{9-#;KlQ#^Tz!lq)(2tCWHx?U|e1pnf#Ei24 zj{!f#C*=Pe??PtTnWJ9tYm{NEdhn_r^L$|MgHsIKM8zOn_rjL;Uj{D}TthNourwRC z_E8k#WiPP?XG$rFh&Vj{oV5Rj{-09+>+yk0A-_@v%}>)(|J(Tb-|>3_fc^iKsr8Gb zpTz(75*3s3Un&1p^h2x*xKhE;An<=L;s2oVRF@UOJac;p68~4Yr|`-TK8gR=g2`PJ zXVV7$e_s0kJ&GJ;oBB(UdX(WZY$TEx>j~-q=h35plYl1GSgTOjN>9m9nzfAC_5XXr zS72yL|6l3dYI;#1E5@Q6>$?gP;OyK??VgD76k|G-M0iVEAfqb@q; zj5*l=0RI0oqmwGQWDMsZaFnRQ-CJT3S-7STWG=-qJ8=9RN(W$>nS>}VVW*afES3dY z?mAEEX0%$sVz`<{6p5)pSd;u5?IL-$0t@4lYn;JmlSO>)8${g_6 z!D6Moh`bKZZCU|j4IcV5^{=d#T}R2feTo*9Sa+j{`e)>JU|Iak0x&zi2cS59C7E|% zVu9Q2!~zg)vtx(m9iTFHY`4yg0ELDttlMQ0VTgM|R7l-@YvM#S!aWmQ0sj9D@&9H2 ze|P6*Rt5$HLhK#5vR6MaFsS(dGxPty9<(u%2ue3o{3Gm310WB45|{-zL_-w^RUN?l zfIq>(37YkkOaKV3m}N)4Y=H+yMvfkx_oTK)!@#ob0{b2cFvXI7RN_9_^?7VK!j zHQR*qU2wjI>^gD(oA3S~1pR-{M1CnpAZoZ6Z*+T`bJP~AyE};I!kJNhvEu&VO0Q$> z&{A3mOQG})EQ4GL#0ea)XbTQXzCovLk?`}oonD=hs^$EMfbH7);MvRTHxjjF;nMeB zicjGG7p4AZ=n}zy5V;g1M<1y7JZOFz*TEPSp@^%MYKAshHIS++D>NLN9@GN<{{~E+ z64;W!R)eJB?#@nE9U(p!hTP=>hfM(ge^By&kZK~TR%@ye7FRJFfqa88S*8DnCrT5x z(lpkveF4{KJVZZ+kvp-$ov%?eTVI-8{}1W^sr21=*eb^MK61mhms^;u-@tTCW=ek& z2OEtq{XZMu|MSA_)$PpjM}c*n*PIc{=|`VfAM9>DcJKk{|9fBSk=Fhn-Pecz@PDtq zD_x%%P?nhzP1 zyJzo*v|8`_@mC+dyQ!dfR6%j6G$=+ZGlHVCPlE{YBu(E(_wqyWNUQZ(10cqYj2KS} z7W-;yxAk!)`M4-$J(8%q!RrcgyNgreArd;pQM$<=#%_H7>sb!VeNEU;EN{18JOHXZZ4-7 z?<(S`$}OBlGj;VSzR9)hBH3hA$l7|2k-3#W08sh=`}e=Sb>9v6m;4C?5CmR*+lxyF z4&Qw_I&tDyd2x!1@r_P@5cirI@;TCKeaefkbY46Op#0DU0A+cx3IodLQLt*Hcxts4 zz8?JlZ&q5|R>zK_vThUM2={Dx=({j=yT6=*a_nRfpgDm>a^E$p=mTxH6Nv@)$kRE) ze!zn_>j4LI9#r`+IrxLeX5k~2vrjg^XjS6g?){KZC9ql1z)ROK0f&Tv+isRugyP5vfyoY6D*^G6y)9*mG z)>H9dtrxHLy0_qWcRQA1vt|^VNuf!`T1LUnwxkC5|CXSoa%c$}*Fh78NOQ(8koup( zyMuW9ivWBU>a$S&&x8L2WxwiK7hl+_)XnxfH=5rpK~u^I^YC)q+nReI)BpgW|Nory z|48*ek>HHVl>Q&$k~PC61OESuK>a9I;N~XboBYN&?Y@lPbTXo>o6LT5WF;&qR<+*b zzRAs&#KI}_+glopEbxRa>C@JXoqYnd8mB!9y5}@ULHD@C?OynsMcI4-1@|OOe9#L;Xdmh!G-6kVU;ED}z{m2N< zs@S098`-ph|NnBz|2X9IRCfTaJU_R)c_-UVNa%!60?f3Mi=8S2UFgX{W^#}jP({XL zLkg)Rw*deD1vOV&1ktG@HkbbYUetz>s|f;2eh2W1R4DM1YXLc{-wF&)(5&AYp=qQ6 zVDlRQ0{{ONMPQl~FaeE6Eye5-{oN5HSZq)-amr9gnu-0Npq@y7@{?G77<|(Ip8yBw zIUuT2YMeHojbaJl|G%2Bzcq2O|CK-_Y(Rbz#3Qte{V(=^rcfuU*e0(nf&ahDL+cE2 zSNJevNo2rk#gSmX3k1>dh*4i+|2N<|_3+)-t4gTx~tM%#Mt{C3Y0hSi9pXc7SS0JW zCaU|&scQ~Q5mqAlKT*sy*r#z^eWN13ED`Q0f|JS#P{uljk_kf@lNmwZc{gi-2 zEvH>eSpQYU_nn>oKlIm;k0=LQZ_4>UsYRszjVYs0tKtCH7mN7hH+e2eQ|o{z2mk-u z<@~<}QGC3y+v^PO$oYQ>PN}HKox?Fd=l?zUdN{AcO7qu38(U8Vkou8{`p4uORB|C@ zBz^6*#G*i|s?H7&jF|s3I%^*E|943LpNyMK^2==7GVR^+&M!=*|Bq*n0V$hePD()F zl`?3d{y&EytLstx%6WrgtEdQIy86}ZaVHZFB=f@a^h5bI0*PxI@4fd9W+NqqQ2n3wur1rH(< z$xk8z5cH(}SL%Ni{SXSVIINWTUx7h^|Nj~yUCIBE{GZGntR%sD1T*0?OwN-36Ocl{ z|37GaKl(5N<;8fT+uNL@U9s-&pw7`dYQ2nR650Q&hpGn27ceRcgk*vLze)1{CI6oU zxrnqV-x81npxGn<0snvBnWG-Zftmt90%rGNTS08ZSO-Q#Z`M9W4>B+qzABF}SBctiR=6AVxa8vsYD2 zzQM4DmiD4GE2=e1&x6%;Id41w{Qm=p&*I*#&PF^xyL^}8e!tV*PW{+^bIm*~OFKJP zdY$=Ls%-yLrAO5&@c-YH`hTNdh|K`tnx$PL?LR&6rzGr>uf`el)@{wPaye! z0rskVX$|oI52sv(1D{g=zZb5M`hThaSM)=?G`Lbd=Mwn;M?ADnrj8~q{eQfu4I@_* z1a?p1nyqVLY!BT`Y;fmmER9P4pSkG&^AEFz4=gpTc002vQ6#b`VUd6!)l3xNHNp<` zC;2cIf~G6p?QZY6)y*2G(`ZHtLY(*HvV zo&d9W_5$@ASQHUKqaPW;fyD+T-=L!1!tC?Aaen|wf!Wq^a~CQtnG-5b{-tO@<^Lqu zE=8l3LfLaZXnw|)jGxA5{EUC#Z)|B9$p1U^k7fVgmWdoZQaxH-WiFLWlZicQI5vO( zU-W;<{nSDRGb3OVRb3W{{ulkP!^>I1FUctc{r}6D&L#gx@_!m+4N3k_K&=7)|9#Hh z)y_7yc;T8BD~MD`v|Qc6f`!PP;ft;c^$bqFMt_nI1;o6U zyW^`k(EmSbpn zyl{JUJF{L<%{g2D{}VM-lVT1GO$U#*L@Zw)i7MxR%qF>3^nc1oM2%|u1{;di11%RqF#tTW*RAX(1ia<@o79;Q#;2T&hIU|BaKrW|HD1 z{eLv|Ow5h+N#ltPZt)U~YR3#1d8$s^tGz%0{{N?AE&ANE>%AM$a`9@sG3fScynY{1 zAyK-z(b=4hNmi9`jFkU1zx+@2|Nm!03)tv4DgOtMP(_emFPz=jfVSdK#e>!D>jk!C zDie+gNXTNr1qxOo?T`dsJKOKay+OP=t@6q-rlz&v`Q7b}vzwds)q}wQKbi1Lm!jX7;qq_+kCubI}Tt5HE%EIH19Xvfegw@8YjbkK(FRiX!jBj-M zgSZDwi!f}z5fVxCX?Wh4?JJC%wsZ=8Q_&TAZ<+Dn*wa2vj2?4^@kF_~kTpC`r!haB|NotPfNIs3D(U}In``(5$C4B3>o+Kl4%l^QxjSi-4v6N5O;0MDmkxDPn&){&O-d_@(}b z(qKSfd-YBrln?g*&!+635H!|KgaJzUcp`QPBUyr|$ckLfC0{_SD)m1J3W#VUKN;}7 zuv72zvnTY9V8`r%5nNu5ds_|eeFgge->4PCAF_5N0HEMO>|pYfa4CYG1OOxe zpy-ECh{a(Zb4tH~6$GI{{m2M`U0_h)|DRLLuScHh$I*8uw<5Ka+^i}AfCTjfUgRgC zV05Q!6N~yIfZW{q>={Oj6|KZ|DS{Q zzfbQDvU*As)YCs zjn1Q#hCu7&c~;fK*t6W;6G=0IpPtpE=5H0Ms%tZrL-24!CvJa-+i-p;W4j z7RQy}0FeG4dujTC-u>unUpk)j|2VlK{XanWB8|XuyY&A!%4y7U`+q$6)nNbslg>sw zKh-Xmpfxu%|0#G7nMi&T zE=ACj{6ES6Q}jb9#Nse-T21-}RuF^+CqF3g|Hl>c>yfAWar9lROA#v-0~3K7MFbjO z^8XUl6VXO~5<144kBY=r(l3t+QyJLz%l_!9qu)8b>ixiWh81SAPE=`2SZbbKq=# zxJm=yA+6QJ%1kEfk&0&LL>d6krU9_ZU?I9qA&b{<$rH(2MkXfLY$F4PaV|LD3Vmq? zK9O2VZTO0Sm@*jxuM_~xK>@((c4j3ao1V-6|AenM(3`mMm=# zrFTpG|HPQY&>T^xixlc z4#(=IDhZK&;jWym)`JhE8Zf|E4eo(BtbfR_NhSSX(*K*0{(n=||L<@8YHQzR_*Y~9 zUU~E(sLlV*FN}^w(doxu*t&V-R@_r%z-JbsW9@|_@%Bb{6AB~GEL^#K{*jf1#~(X* z`ib?y?v}DLu-L`_4|h=v-2gblm7}U+>(w z(vN#kY>ec}lz5fnN3QwC&P3 zjh%D<|Ilv_C9X9n=#tXJYEg8M>`ywuz0cQdOVF`LZ#h&x!!yNh%4ueS4t`zZ0j{v- zgMMS$gXYJLRCgqX8(|FVC;0!*Vl>CSTapf7Q8Z!w`g4V(10*7m+8*^sY>{*T$p85r z%fn41hLQWy;k|iuBGuhMLJ_naV`bvKHRXAW(mwiWA|m)&Aj`*u6x-=+r^V|O%1pfcesa!=&E(W5~GPVq&KMCg` z=rzkg6yq>u4(3Wve{2kiyqxuWU>yp-MACXn68h2J{UP30=^kh|G>J*ev>*L)|=FE zux@hSz>0Aledb##rEVu+iF23UxDmL4agw5U&{@M1#f@ zcBYY9DrHb9)NQgG2>kzF5`wKH?G+>F{K85$h!yTByj)FTPKdCCm~0NETr*8^JYkjq z{{KC|DHl=2H#z$wYPPjBf(JbK@DPQ8FJ~DyAg6S9>ss7XkzQ_{6G{NH=yq)DcU*iL z>zK+*V&@@)toq4e!2iFS8LYP82k?@WS;F5#`1%b4D!5_~N`I0sAlS)4T}G{xfC!B% z^O5OdcXwx}+Z)82wT+y)q&=FJi)7|Zrz)cpNa>!yS?XD>ukgZREk;YS}$Jfb#KASyW6qU|2L%mAMF4C z5o;fi+O}f;*S4Epe#Ix|{~VkD*MR^3h_QaPcEAxmxMs)n{I*-zddoRD`5OI6j20xb zE=f1g+R86Y8(K9bG-fQY@`KN*SJilL0Qmop5m=@CH||+g8`LBUOSSY3EHH`0nl))l zH*mkg!kWWv6r{0MUBnjJWPtj=7Bs%HXukSOl_bMlF`HsqQlo#Osy8sGBpJ>q$xx-g zzgJE6k}EbVrs4+@Jf?mX)>Hq%jrjl z?JYt7@8{zmQV1)Buyardo6Df8<0cr^VTt2o<)Q-r-)C!a@=WAuV*u*W3=$ourB2QW zv`~sZ;A9n(2b{_;a-ZaWCU>bV5;jjV;i%qsEdZoSrT@3=|21a+@4@?J|1afu?2KIO z?hfL)$W4{~Ki>W==9jtp1Fn?p>lR4=gZ;k;56J%CkpIg^Q88l5Z<**VPss*MP)Y%3 z8-+};M8k0o_WvGy4H8ST|0nx@nJ_F}VU;corO1fNII7}6|G!rD|4fX8XpBhSmRFMsL12Ohrr6U*wns^!uS*t-z-`|CI2(hjUzUZzP`W>1AXlxpRK z`(CSc|Fw^Q*-M|Jz;aT7Wl6wtdK+xpg}Zm3dFj-Fhd*%dr~=E$(!g?Q_ga6W*SS_6 zz4-91o2{@7RcIUXZ11ksdgJFRhL`*wPwG-lGLnG)fKA`Z>zYz>ZKeuR{E>x{nk{gB7o2Z}zLZ+D_&e@b z=6O&84RHYOY+XweTGlSao1OLQx8O__P(s5DnOk_af0+IIC%0C&v*=Lf=bt&M&l||z zL;U~X8zlcPL4hUpB>%4_LNz1l6o-ubQ;Ck9UY(OVwbnJ;)fUYb%>O$i`F}(Hx1i~@ zduC&e8zH|MlKekUZBAG&X{=#)8m>{)>cezmmB~bV6W*M;-_s59FoY1Q{ewMpE>Gry*&#v^(iZ~qZi6G z;A&TvX{#{w9((w$r{*QAeOSyg9)^O<%#)i7Swl{ErJo2WMizEu9E|HUNJDTX&Cx2c zP8QcEN8@va!FB2DG~7jDI9fnfKKlsx|6z{?7`>t_LHugGG3YkHq!v z-`=|K2K-C@1Of;GufFZxb4tNR$5)P(*HFmVFyj~iL>76-+-O8r%j(j&Oy-&QSS`zF zU|Y)`X|*2siB~%Jz7jzBp$h=Y@|qACP(F|B0}7i=0JK`4bQb*ohlcf%UTN%;$8c?y zQ7iKCk;{W^4LJZ<4gkj8t;Q#vrWXJK|G({~6ac#h@BGw2$pIjq{hUlmdN;>?T9L>W z{m4XJpTM963V?zCzfSl+GyaTkB>YddKY;cObiB4=YKbwPdw_h44NCZqF$bjq02W3m zK7s%5Rz69|)y{GNcqX!H!lnVB}CMatdvoD#?h_wYb!( z(#ub9>;}z=TPIg$!yP}w9W_(QbuvdOMQx_$EQ%PaW^bNiKgsYBJ0FrcU=iQa$a8$o z9E~Dwk!>c&0r>wjqT|fl+?1j=x6p_w)?%T+!ZzZ-z~h>k54%eKlgz06LKv)Y)8T~B zNd}P<%4V@>@)VN=!%|hm!<1PD&y_Yk7FITuFWXB^_EZ7xX~PBh|DE;g|0iYpiDg2( zS@M%?3?S!L%Jw~`qjB$w?L&fKBoK!ydmWTYF!BX7e!-Sq!2h3F75<+w1f^}4wCz&< z9^tXPT#WrQc!%*st-DcV)#N0K9labmR= zj$5~hvk3QW9p$@F5d4f4L_SIpjD%=;%?;{F9gU!jqM&b6&(0!k*MqfgJFcH~H*#EZ za+^9p_U(X7;F;d`EusGJ{ei);G;+iZzUh3|x=F>Hb(5~wx=AIFb(0I=aI+<%iOL9D zPB9|GV=U6AE%+9V*Ksk+nYP8j?1eDHt&>{|i5FY2<3b;$AN`sSz7?8QeBbkn%g3U{(mF#NZ@0&5T2Z5#RZFtEJ}A=jt{seT zibJ_@!lq_4(#?|opOO`@DQCiXd=veKv1Z|l zV<=61P)YxvP5S=;_`fav|As=^<^#%FNd8CypdHmu(UjRZAI`HaUpXPM{uLKbVesXOxgA+9SzJ-<{{{MXV|M#^%t+oHazMJqL_wUuW zy>u*T0(ElbSb4s*>0C6ECQvk>i5xICZH~zmCSg$6XZaVebY6NSX#xeHJW*O$!hrI5 zw0%c~O2+0evA=ik_Dk=%|L{xC!Mu)_Gp~*A_Vvz|>~ z(x2D5-J9|Hwwmamw;N;36u4!Lo}u#0Q8?rAdNwp7V!e#)J$(M(dz6BKKQvCkWTL7B z5(0Y7tDaK^Vcg;jc0*_p9~nVU5{V>{NbwV)5R1c#(ct6<1^fRPCTNBMCjar|!zF+z zKdVY2vBCj`SME57BodcEy`}IOMX{Dm!2d_2|5qvj0r1Anmi}LwL^N2LSez(($-yb)%DQdC)e~)@w9C`$s*|8*N=K z&yViA6!-g`?sjU&_G_#e@{{DH&d!xyXFirH?Y}(kO12mHTSm9SlY8kYPYZIp-b zTNT^}oLb5MnOXi%tA$TUNa+eWO&+sPJ(JR%F^Q6Ew#^I=ITwhf1dmwKs3z3vg^3H1 zX)K?7gNg$LUf3HN#M^_*cXsOR0q0-u+J$(tvtD@ve8_MKV_!v9K~VelrhtR|9*OkDW?&epJj$;vZ`BldE4F19OX5!HtH z{|cfSCIT^I8qjC?%E1;Xy6k|(7(#M*KuFUMw!q3vcC|+yY6bj%D%JnZQyX%yE$?(! z$QB4Fmja1xa;R0x*6QC_7LsE$fd4-S-4@4I9NT6%wvyDY`5&>jo7e~Z|K2SA=aa&$ z^ca33H65_;0B_j_Y9fZ52=K%PcfQ72Gg8>z{KEE(s98#w`%~?J{|WCp2g{@N9 zs?148jw2eWkW(=RVb5(-8{q#lS;|C(a90YI_WN*zSeBQ@WYyxLOqOeurr$IUoREn2My zZW{il{EZNPG2ZC*Hr)V18Umm%h6IU*kRd&|Vv8pIh{c7|OHiDnl|os3+#f(upp}H! zK$J@Te-;%<;&H%Ds^Op1|4c>p%vhjF{m*t&vWP5AiF9;<`k&e`syLZwxV$A`At*DejE3GTy)TaCpzWP_IT%R)A5Y=EWep^DJqg=@Od07n1OLBI zy`zoOX*=ZlyA~0RoNdmT5{OV4i=Z)1s6@6&hTu2ok!=!6TO6eCA%Vd~s;QGlQVmpHH7IS85Sk{s@1#wji4L0IzA4fs z3Hbl>dsS(>oqwsbXqBY-AA1R9o2=!vNu9QQ3h;(B0G&+(P?hrLIC^0-SYs1Y5nQvk z$b1)^Z&g#9>h(=jl9w_lfjQ&;N&@g4Bml2&XGI(+2Tb>m&WHt_|1JEl6nh34t>q~r z!6PO(SWN8;|4#sj1W^=C2uX8z0Kk)52T?oXZl7A_?nZ4Le9$8UlbI^9z}Qj5 z&WzNy!N`FKB)Lz8BO(CF{~^p#f7z(|!FPI-JZlcS0EDyvTvG>Nfi~&D|Ccg@kDamP z|C;!potu-~#G)wRzMSCR4!|S|e42%K5L>M0 z6!N=xuZ>^V3Ja6amwAsbidHy)M{O3QAxdHCe~}$}g(v?IYwFz&sEEb#xAAs0#Z|7HIl`G}Y@WdA=6EnwB>Dn3j1 zCi2qA{IcU41?zu)h=}!N*27w6o$awVHn7?-?rZfRWlJa>HkN8GXd(I zDocR=|7^r=a#FgK|0;=){_R;1PnDECla}y^-eU+Vy6eL+4iFE0>?g=Zd}3;0kJ0SP1Dpils43?k5th0pJ9Z=BuS?9IhKfV5Kv zv)!e;Fy-mD0-8xbhNbYt1}DVr`xauLO14u5{{NB~0|!mmYZ0Wl!cZqrpg)NvfW|-H z>u${jlgn`mipg!Gk^US_CUTs@WKtT|&i4CpZxC;;ZW^uw{=Z(sGB@e}HH>z7bSILq z#Uyw@kCig0^#7V!{r{I@We&JEDI8=skBV#}&__#f55-V3f{s0UFgbZ1E)H?p0o#4?3fZa$g8b}H!qFVd=Hn%;hSjcu?qV@oqOyE}>k3EX>1rw?TM^99x; zQnyUm23sdUgt$YVz6(V9!XtZ)1Hlm7prZa~qy7iL|6if`zicFX%m7Umj7p=@l#mgg zbZ6&EuVZ|hGUJ+h;#k_?sgxWny(Bx^tUM`3YBNUaESy^4{~yix#J7I97Lfh=EzHAk z&9-`!jBznGvB90Mx!*#|sAMEoc47GgmNoqZ$ZR}HnEPE=;Q!rJ|0Dj8c(syNwg96) zN1GuMuP!lOo#`r8z!y{hW1zS(d)2`I8wvlX@WjHEfJ4jQiCVm+3`!s}DUEes(StX5vVb0qt)?L{(HGrd{ccvP{OiOV$=3d*>2K&Dw`G0c$ zk6i;geNvVLfY~Gfi2X12e*%H&v%DvA0-7puyNqQ7S4cRL{3LD~@^|L&{J#sg$36e= z0T2N9?R%!R|Ht-!D*Q+OCIf*FzxAb)2OhrrUGF-%ax98YKmNiN)L6&8ey6*AW+6J( zUN{nOZ*(`|;Po>LS1zA_WM$#;#}1x;Vtuf?r7SnhjQIcI4hll7u3e08bozt12Pa!( zW#9JOiS>uxaihof_{sCB&(&%@^y;sF#Y>B@jt`$w>u8s@j>UF#G4Ai=Uqh?)t~0M5 ze(A)4!*^ePC(P|sb*8p`11-Zv23*PK(w<}j=8LpN7aEfblG-f-TdhO?L6N&{`-Lec zdBTy?urOOR`z{b^4Ue$23HP1vxL=v)K?yV{Gb8Xy_^nu zdfS#UbZlqq$9mV<{ITvjlFhnH!jf=rZ{lcmqq8|1pUjbGu$F+BgeM$9xn~GSnk2Nv zX?U|5umS#?C;nHAo(RV=%1F1VKXI7Rlk54*R<6h_bojD<$ z-mT6?T*i@<5dVJ;yim(!@i9NakA4JiGlX=MtD(rC^e54SX#81JN+eXP{)OgIb_lDy zDoG~7RtjzdgG%^+My4k4|2DEMrT?$=|IGy5-X&dt>&q6OQYC3cl2gRm>I?Y4yZ6d7 zAD-bF5-e`qIZ>qroYwqSf;buRdR>n*@ljNWo+fBuYSL-ElL7p{lhsr(4ttHxt71&s z{Ia7AUrQ@iGK(3LI_w?p#{B_wPOzLnN(*6e9%R1?EVR>$YaB5M08kyCcX|Cr;z?Mz z^u0I4C-DFCm|=!Cg4v?} zG9bM~o}oWShaaS0_00NJr_`1FJ7f+35tM3PHsY*G;Qt=)B*;FP?1MFbA1q&AfjYJe z!6AC0SD~T?_WyoAv;RS28kb!x{#4gA(-0Pmf9EEmdyDdmg(bDQf%y%wQz?TMvH0z1 zAL##EFmu~9rX-J+A?Ha5g|MA0B@&BLf+CfwRAd+WqAcc&yD*gnhSQHUK;}N{s8YO)=G0X9PBI*Gn9&2ti zNcB)k7H#lu*r&rrIOX!rg2i-Zp+5=VAm~-Ayfg6s+x3Vb zs)eH@$l!v;!Y6=)7|fo=DQXDfdSgl^aq%W26_ci7VO*t|qzyIl97akh$xk|ykpJg8 zcELg}DlI2#LB7RB>T#$xM_PDL38M6rGX5oAg%r0)S~5lXNUjW5NTX!nlthuL=JM__ z>WRYCeuDmghw{V3-qeCN8pc#82vO_4OPRTn9qGeCA*<1jsL7LfIXfjz4eevfd`eo( z6-4<1Wg?oGP(~dDX(L z@-c<|92@VCkWOA6-TvR5yfdN5)E(+~<;2cT)M`iT%j+3rR|dJ&$IvQs#FIh!E`-Qg zpNrPo%~p;`Axx$`KEsQI@v6IAU|a!?;tc@h5rlq|1@!;B&T{}z2>$ppI7BTPYv4xH zi!B-Rhe>00{j5k1=_20DudCbVMQi!IV)(mzWEH__UFz|7%1-{D_Aq z;-A`a#Pz?Clmoay|pn{57fH6CJ@Y)amwk+A`+7|km*TR7UzFW1uqV!J}Y?f&8zR&d)G6YN2h0tIZbJ;xpkp&@hq(P z6>?tHLD;TsEGD6)B;)82bk8_=1l?Ph>7A}fDvx=vbRJ5rM)fT*&~|G#Ld_mack4oZ zV@JKF^@cnbaP%*9+eQhq9J;8iIN0pTn^G4k{1k8$H9_;_8Y5hJl z%d9+;ALK}I5|O#ZLANMBwUq3V4U2PKhDpp{1OrZ2-gK=HkH#!6B+gPuqg`p+A*|j6 zJ&JVYME`$PF!j^HSBbTN96wJ#{OynJASoTz@(y7xtlrYdt zk)355;xOORZ4w7KG)6#jynl1$)+?Uech`;Q;M~t6#aODV_-NIB&Lt%$>15VNuERgW zS!u}0NDWd}&YR?Dz94w**Mk0kUv{yF7xJJLhpyG`a#EK9oP|VCJhqIB?h~5SsZc7| zvMjs+{J%j=Uv2PVNQDi#eZ=)PagyLwJ&a+yKutU@((L=}&@8)IQkRZ8&W8%=PWbsGhWPDq3&UtFk{^!?XTF>Bm!7 zm$$mSkED^5Hr@BSkzdgN-*o)2h4iSF1X5Jy{SrOV1Ko3l(ia_}Mpp>VRTW@~3d59R zA#>=0CShp$vo~Ay3p-aBlEbaX54&LC!ZooqDFSuFlTtSllRfdNgfMNpH*t);^bz_W zr;~Q5Ux^e8IK(ro{>ye|GOPayNdJ9ox81k?|Aq|vXr%xcktxgPe9mwWIS5hn|=@qo50`^)Za@0{;JI-v8Gn`O;H-w6@!7w6Amd zj~Jy?>*ugyE&s$aT5V)9CVAV|_%6GGmgE!3Tg>{{V2{ z|L^QBNKw5C9HP`Y9{{dk!Bz%a8P%{dfdAjWF%(OKco~VT8Me+Rb_Er9NZg&~Q--M- zf}oQvFT-PTWoxt#l=3OVT~#k!eSuHl|L<~DcaSKd?W)fWJP|384i$_YT603^e}<0=~Z;Nsow?WQM{|!x=BGz2Zvc=?S`mHD8vsTVYX<)RUgiJ$B))~%)TUt9 z##ZO%URtgIZQvd0hEHWQ16&55C)W|=I)WRb_G{5`j(#?^i2NVoKnu-+tP1OB;feSy zPgsB`borLXSSqS+?aAzi8^wV+0u3sm5h6JOsPYLwna=vnkn z$^QSy{QvJGB7wLAh#GlgOFpN|@x~Uahdk0Dn`f9_%obPo6+6geJcZ2J)2NZu3h}=W zqND(-igJtv*hU7|Jnp}I3&Rnv=_1Q^fk-i}Cr)gweqw8vs7;baG&k`{t-$}!B6x6O zD<`&ABe7L2YEc1z$o+J*)@-d$P^zbq)C&CngF?wmJv;uPd7}HB*nMI*+G(F{HMHDg z`i5p2WV192fnI+TZL}&J9ayQiFP*7hj9p|6mo~ur@hRW(7?tud%oDjaPO+<7w3J4X z%*r>Z75M)Lz!>D%sE~jJ2jnO5C=g0GF2Zql1}k9`G=^!l&Z3y+z4J5 z6?UPf@pxU7YGw^Q)1t2O{&XxDKxI|4k_1+RaRt)9ex!QE) z3zCCLGHd&OVc^P(bRBj<#tVd|;8V8qm9x$>zq8jf(6n+7D6RBvZ0ryG=!o=q1~5V3 z{~r<}zW0nKcWtC=7n$%OYSAJR;wL1OaZA+3DztGzxVFBKMaSzR6Spn`{Qr?yBqS0* zi98?`N~u&xz$2d3J8z?;584B6pDWuskkdaLtG=;SBc0Zj##%HvVgA)CW3Z2#-K{&%eZr#=?IfBazxlm`O0 z?s@lH_T6*ixx@2w)8T9}R?+J6%KXgC>1b!Wt5i)Pj?}Lu46IvRaZp&T;<#3Z7G_bO z5 znJO2yqJ&U>`W;14E8zcclT0y8YqYqHtyuT~O*o{jb~g-l;YdVo7|s)UtiL@II&X)x z#!-K7OaHBlDLk(*q{$Lm<45Pn$cR9Nhez-H@b=%)Z2xTo|Nj_7jwp#33)jP-5z+@0 z@JQ2-LQ-~l4~?T}i>5d!IczHqqzp+hfh%hDnE8KX{Lk?};A|p#Jk*+v?F(s?44g6< zVlj^Yas01KEyo`0tPcgjo$pl^bN9Yfc9fnpp3r<>&6nGa6y>w%mmOhQNIy;ET&ib~;v;nU%?PgZwVV{ zrh-*zNSI=^VNp-=F$H>|{SZG5(l|k~tuNHm$;%`2|L^#TMCZr4G zY^O_<+TC!*bK4m%KYG;FGg;(}QL4rjhR$J!0|x4yiv*sL%{V6=&bSu=dct2}fek;t($1J+eA(T&Es<$pe@a0^z)^4^+ zyrk-Zs&P~bF5*StBXI4*vg{5!3vf-hD&mHUYuxCKS~1!*xExsZ%Ygy^|9qFQoz%eP zfRq^LazLDqS&e*5$p8Iaq`8=|nXs!t*nIwvuqDL@vA0B7=QXl(c(z9>|pg8u(FpL1it zoX@$Tf_iu)`JmEA($>H+Q>su>Td%yRE#wLT7x@1HyGjZFYb0*EN*y6lIpY_~{qixX zG&OEm`nNw}C*`3gAyHVm|6@`?|Nl$H{~8Ba><)`kFqaf1GvVb%=b2q}-wRr%be-o# zHjYrqMg$#UTQ`0Sndc(id4%U_6zM{6)$ip$Po-UH+r5ESwsWr38kbHN9*(l`fP6zi z4XzBKQPKw`QAE)FoN)>K|4UtlwN1@7IeoV22ga)lyt=@v3mtZ&3=E8>H2Kiv4)Fi4 zcLKT&ftH@d*=!~{b2Mnp6{X-GG+I%0Grd;&H=EB_WzQ_||Nq&wjimm^?uDOzbwNOp}%^*@t#)!D4#tA zpj;RND4#$Ta;O08D#9T6ye8=XU+rE1-%OR?6eqzguUFUVQ#0j4qp@|SyiZ{eml*NH z80<;^#}9L%QQ-goRux|+4y+(yCU+ik{U7DfQD*RaV96WUxg-2#bL=n{hP>s?F;X&c z3JW~wPU)!1Z(0TZ|FxKJEZ#YWM;VdG3)`hZsz-)Qa)ho}tp@yGPkM;s)(+w6K~c69 zi~c3@D(tO~D!lD@Sa7VoW>fBrAeqKmG&xICt5NDgSHS;2**%28VGyyW#8wjGsIr=a zypEZWvG_MO?}7h65nsZ_KG)5yua~rd&6rqexmy=1f)SH0%8qmv7Y{@C?HOk&`N8U* zll)Y`3|$g8FXW#*Li(U89{B%X#r!V>f~)t5UnxZbl2=JMkFg?ojAFT$?tSQ(27@mP z5ZU9AFxfoc32&5un2K;DwD|nb%Af!B#?8le+ufCal*u5I9J^nB0uKimIZYQgsZzh(PhMVGq}D$u|teNat=e0Dzn*AkTW zYijA8VqFc_sEn77DeMcRBk)`0ynM^kxX~L$v)0on&;R``w*QlIUpo_#^Un5vV)0eZ zz{_a=-|>4`;&A|g0|3(W(KM7*7mmA2%m;v5>?h3bZL$A%PwmLRz6?i)8AfBI|o-SgDV!vZYDZM|LH zJ-@ToYMd{QUTk>ZJRh|VLM?|SM+vpp#G;k|I;lhIR8hvNu2+~ z`9GD(|GDG0j~})ecTU~4G}}w296#*RU5hju6X`W)iBOBq>&m|QY-1sFAn_XdlX!~* z=zV$eV%N$>FmTFohfS~`6Fg+2s7;cFN++fV#VFPbnx_-j4qZ0VaQG6gV_P7TfZ4w+gwj(Z#__+}-eBruQ*VMl6ZyGy_tQ^6cn+>QcCLGRjk_TDoHzZK2cO;sDE`6Y0*Z5mL2-HON+Sqf_V!!%JlzyXJ1n}J zEv&l=Bkf=iyy{N{|L+a122&rOdUf!}@MSok-@W!?D2Mptm&55WEDU!m^|i}U5WL`- zTL(T{)Umt|dYdV>H?{l1RLw|n_8V_;#SC1&zl(!i_jK+CLb?A7pI^Ie-(5GJJsD0P z9Rm=;h+cQ=?iay`o_lpTy)*_R>OY9)M5-ge7S1}NJXGtNL4Ng96ua} zj(A!);|Sn|p(An=hOQYIyR@|dxu)yv(=}QSiwS$ar(KvB`vr-ttYJ=ZoLF0fiGPx;H!hFkHSBBf1ZB)sYmx7c;Efu(dmNX?rY7h z3yq7wY2vgZlB$2c+1!ZgTOvQY-P(=1auKL{;9D2!8$0>7nEMdNu|bW&ki-PjI9sU3jBXNAC=m- zg|7||B{Q;gUQnaj1kGWiLG$*%7zH|&^#Q(X+vPq`EB#a-X*D-Xypq#%qDlRq zgTd6^+U4M&xd3qMc`*C>MJV_2=`*0|A|#Z*z#;0-|4-vA_5y9l!jb08;T z?vLIqrkCUf%rx9+wwgAO9MX=q+GnnBM^(&Z6J)Cq?#iiXy-^>36FeDr%!Cdy*Qj3q zp(OUHtNqvixZ^Ll{vVF~QHAVOk=aC+hCV6cl)^{Cmk$89q{wJoZpDCvDds1*Mo}vt zQ=lgzWRS*<-kgLqssq5`jKsisWLJJUki^VDRBi!tm18dH1ipwn4qi2GUplXz|UWh3ue!*)Z0PvHN*>v+FP^KtqgfQ0G_ z60{}Ufg}f~|8e@CpdUgZ<0(IZ|NmAoK8OF;qgJ;Ny^xFLz@jOw2=O8D#NmH|*9syw zOZdM9{Qv*KF(w+#OW=&}Ix-*s8Pjly$XL=8wm^|k;^RL@bk+p$|EE*Y(sHvgq9NjJ z*JP-OaIEn(No-hv!8P52H!hI-RP&=wdHIi*|EjV4w*mbBKREs`B_PNIg?od3%KzzSJIoc~KT0x@yp`oFci0{D+V2?RcM^xZ4_?z!=^m*;1v!{W|7 zSl+tQXh((B!*|sZT3qTXiB3R8)$Lh2()*sP&87L??~#)5)MnA+GL&Gkb}~IO`ZSQY znv1K}QYmW?X_oWA^9+K!>)`+YHRu0#xF9tlasZG6fYk^9LjB)2fXqx!`CR_T7I7d} zl_fV-zJ)^>2H=GpGBsLmjT1E6`a;^4%l}lr{LgKm|NoaDIu-!24S>jhd9ATt@fA-N z0147bvXmxo&qS@w3a@{Vyg1Dgef4JtDn$mg`p4Ke@tUVD-SNLW)Q@x@ZvX(8WTqY70FcibJlFrFH0UwdGH5LD{|{!7r1_7;!g0hdLjsBu zfIC9l5-vbs%0LityJifc=temKcr?DISn?ulCMdv%Zpr@G)`Dxgd1bp`^yTZxYtzZ0 zXlo;5nZ;MgND0g-=OXZO0?-5`0QF!0_s-7(x>Re4eEv@?|8z;_;3|uXrB7?{b*)J| z*Vh+%udln--pBFy?^3S4D^-_XyPS^JnyvK-s+!T< zZBIrW{haHAVLQz&8MV7%I73`jT4b(>kCbT^ZzCw|1aME6Z};m{+p1`r`~*X z754Xh{QlX6=`cL@@U_j2gIA)KI0oeSp>TTU(7|YHt+@_Wk&Yiad*+b`mJU7q&~3+F zUvKYj3hNZ}C;qN;>GBHi@9FF-AyP+&nGQAH-y<|Y@<9;IEB-HCLsMMOZ}hE;qyO)R2Lt_E)$f=5IwOQ?X=-cP;H5v ziV_Vv*@TtU%UIzekY{T&y#(a*KQQ1Ee1iSI!~6dd?k5r;8##`c#^t^>-v1ZllnMvk z1)w4h%c5v)x7BE0um1kOJNI>{pTG(TS%;Q~vManvy6-?X*9YSIK;@_pl+^z_9n?-w z$m(C=)BNN+Z=Qzb#Sia_<;9u8mKT#8t<%xYHnQ4X3eAjV(WgPct9>A@8i9*PQJ=BZ zq~3GwMR4tJSfn|$Xe>*5e?%|QpS_b;EEb&;2Cj8C*IZm{axVCgRA4$WT^-YrW8)f%)wKa$#{ znhc!R<&Ji*KVCiGY;HvLt%HzJ)NbuYNPHekck4oZV@JKFNe0CD5aYejZ5s(tDOXVGxba*V9-S_( z7WV1rVq>Q*v_nzmtc&Xw=*}|4S@Vuk*)H`kr?(jdw}0pJji6$`0Oed^et`nz z6Np!O8jB$RAG>+&sTHCBVO+DtjH{&jKRjKTcXxbXbU zQ*Q=`{DW@>`Yt%%7ufvvPrmc1uZaDB(H;B$*tB$-HxAX#{(m7RX%M{P_C)``Dwx_= z+X!A|Vfb4wzxle@008fh4FJFcHVz#Ap@SMOuXcF_TLwb)4SA={@C0?{R3}L`g#Z zkAKsI{qI&EAl41BfWz%r3Kb-JC_T{+%Ai#u5kvJyeJ-)UcZ~v8i-XUdSy956}%Km?cE6UHz?EmLudPq1@C!NYOI||mxLZ6`jzf$tQlU#WHPeG5@ z|9JhcGV6bQ{-=q2VzYxh(NTcb+-O8zG zy-^?g4Y-N%orrBm>{Oe#{zKWNr>rDS`ep?6d{70NSR51anMOq0 zMg-S%U0ZPDMsH3z$>(N*1%D=LZB~EDND`;UK+5JQ0RVvizff>b=VQhpEWAe8f&L^+ zjto0qH{*4)imaPeC1)1+|FyvTeekd};m$>C?Pi$`IG^xlL#EZZSOOI$b(bLHSodJ# z)gW!#1){Ow5v9W`ZpZ-t-){jMl?S@HP0e2fED_lZ=qx)eh=~l9aL} zgl^QV)0o*vCD85~b?dad28WpBsWS|@?=VxkAz2PYYf_4W4DjKREan?J4oyjnD9a}5 zwcDnk$G0s)8sD}Ed3@XVwkhE8+ZOSTZud>P05n6arvp9qb_fG_8Wo{>;Qt2%Lu+{M zoPC)4RvO(Xz~J&wiTm~pEyJr(U^rvyden7T21F9PQc}T$(!m`U07|GjtAdc*$*R65 z2>5@dbG)TbS~MF)I0{&N!3cDG#e&I@i@LC~l^v2(@ib0)qd!TK%4p`%27UoO?oUxY+5-nTd__ijnbdJ74W%6z5ltEaGsA}y()6yp?qm$t=^7G zJZBHVEMKm;ap{@=$q~&T`2SVR{z{4w5#+&|HP)V^m}B<0gv9_So|vS>8df!MZIr&H z9Fn3mZ5pFu|8@`@nBJ&LGLvQDl^~t|>}_F8jtj&E04+ksCt|!p-ox50rm3sTq znfk@plCm1~So$RLN1XUan1HSZ*i3mj5RZf<>?YsB!zd-73&CEtMhS==O9Nd0gX@1t z6X@83udlavHy^r9oc~#y+6(7@Th9LEOA`Tso7diRRGk04Ff$$U`QK=5*ho)7_s9xA z6~mIz;#J6l$I$uT`bplP645>FkWa@gtv94WLBwC^DtXmzTi0nrNfMs_5+$H!(Sq*@hw-9j7EM8<}7muow-&vW`h z|4#)Ug7d%OpYi_gn1yxI0%S440ER3jTmrd#tAxwKf8lUT!a2*q1DM}%5Wl$O{ zpwS?B`FUtIwK>~OoagPoO56wm>O-!?9X9L?z{d>{Un0lG37X}Q@I=rwczaLzxAzF* zfscuJ$?$Og@6Sp6lc%TvL!`m=|141L1AKgJrXl1Ib!9WqJkl&%qv>&4QkyvlZvO!1 z|40dFla%>WYI>sL{2z-M4M_4B(oz(Z$JQEQ{?DCD2%4P!Pl^^&BgjvD$s3sT2)|3} zR6-|*MoAxZ*qCED{XaI|@|Wu)Mr@Y!{}zOQ_mnU%p7Z|&4T}%u^c-Z#C>rJb|IzG! z0RDfF^*?X_E0HAW!_?vJe?Ij9{QsJ$br2$*OEO6)Rx9y8DD~v%VmGfy-bZ&mMKr=0 zXB`)JeId`wp}UNWXWTQ+NqgE3!-1yd?mBb>d`3T>NZ|Bt6Ps7kuXp(1TQb11`7NP6gTV$e7z1}P#T#*~qft!pHwboXep0pyrR6FLie zqEP|=KLm$eIu%$rv*b4ZJ#P;p69>{^y@X!k@OYJwTZOs(4tLi^Ua3Y>^GX?99yRXlEORMyY*KkTqgN50NG|qJt^#87?Gx&-BRgO(XJ# zZyFIp?IsOUYd2|-K)Xo;=h{sgyTCVHqb=N088eG42ww7+VE@0VqyOC=fAtT7rTV_N z^~lG6@bMqjIR0Y;`2SwX|2Tupo$zA#{a{KdPdapGL4=;vHeV(cRSa6+h91-ImNu7= zs3ya5H7=wVW?cT)t@yHS90r6C{Q*}Bj+bUA|9c+z|BIR%BLCMqPdN?jG#RueSy|8pRxe>hhC_`hR8@Hu~~ z(GQ>h)j}S9A?#d8qkYgeZveJyEX)T(UeC-$Xl2;|4Eq0dc-~w9fC~V0{lUU5R;$gK zm^Zm_#42w9q{bpBA8d{S|9?3j|I?v(1Q|a5XXx&0(ZWCkIvTACpP`u1|9>O%Kl6VZ zjs&i_-^2WmgHjzk0QCRKg!;W^S0Qd|A&sW@h4aocc37>2%(Re3`v4yoGA+58bQ>i7 zd};08pmuNV^J@>*j@DjZd#v`AwWzjTdt2?@wQsI{p!T8KkJf&s_Di*2uYIESd$rHh z{=D`#wZEHs!PFg7_f8#}x_@eJ>e$p9rXHPoeCn-Jjj1Q5u20>Vdf(KyPJLkN*{P3A z{q)o?PW|T8?@WDq>d&YCcF)wF+xNU|&*$xVV9(N?lY1WB^X5J4dzyQ$@430>8~40_ z&$D|zvgfDw{KB4J-}A{mf4JvQ_x#NWGm>uGbI(+GbUIwBy;XiaTC2Zk&jE3Dwzkr_ zI6G52FTaMhHTiY6wl2TU)gt+IzIH)=U8r5`v^7`z^3J#U+Ud@>h1zQ8+mYIt&bP(d z+0M76+PTiRqqWChu;;GY?DWhllfU7?7w$O#zr&eVcfN$L>3o^Jzw>48wVf~X4|KjP zOn1HN!^?95!}OE};8GP}_EGIyl&Wqz^qWnn3Kd+t#3 zcmDH|zYCwA{5^7C@^|qIlD|ublfOs5P|S38W_qS}sq-zYH3SghS~yc{$**B;M}D2H zwdL2j+OGUMU%Mi|F4V5duSaUvO}YwwU> zXKU}2U*~FHC%?|u-X*^-)NXXznyX#ze4DRrbiOUrHap*r)V4a`7HiGUx24*4=iAZR z6Y;kYVDePwTUfgpcM=Mie1rTN*1l1GovnS7{5n_rX8Co#_AQ|Q&!Bh!hyOVI$KgNw zTKH%T*FGZ`42%L#2tFi5Dt~+`-;TE38)##{&j|Sc zOU`owP*>-<30}I}iWK0AE-Bhe>0VoLe?`QUB_V1kn zng|;QQxzid3Tc$t-_RVO{~y7)6`X*Ksztg*OS|hSOX4Y~;;!Q8Y1`bBrj5+A4ZvN= z#k+rjRxjwM>lwYg0fDy%WbUmIN1aW3_dd{VbK0zY<+clS?%{(q#|YDeoOE`pF=tY-?5WT*)WtV4W4xPrp0X2?Lk zfn_nBm+olL9#H!wI2{GMN1C89!Xx@!T7*Qq>nRNEyFFOta$~ErJ~a1jw;=I}xEZIG zcD4=r{~QyzqDI1VfWuKTGN1ovfj{8HBT6OKurP&dy8MjQv4Py&8aH}#64J=d{}c5; z_5`mDrao5Nfj`dAt$Ut10ChE#)%v4}Q@If#aL5R?QUy^rj2&<~bqgMKh|7ZaRs?Sc5<>x`yKtLJJN=x(q|tJ=a){ z(#rB^4o<4_z|=7fC(GuQ15_2O0a)FLa3FgDjN>4<<6d6>mx9q7SxUg^u+#hy&k${; zMiap)#we%%IFQpn9IKxG1NDFQuXde(Dl8CTosQO;t@R1o72n)#Pllh&_5Zv|GK0u2 zL=Six&A9*n&CLHD{g34x^FIv>Bj}7#R5iU$=l%aUv;wk31lNM#wQpknXa48{M%ek;H6V!qcwj(VVAun>Dgni<>`oe*}gD-LIf>;H58|LWBL|7y4Yv%J<=U#Yk1n^BwWjkk#-zvz^2=~9RAV$823%oSgA zE(of(JdGQ@QD)bs@mQ;IvHHiKNW5Sp5vjp5QEPMJflx*OV0^|5q7*Nzslxi-m+H(y zo-tQy=mW;;A$@@LzkoXuFk0#sxpePff8``L^C71V}9+39h^c3-Tib!pQF_)NPG`2Wke z{--d1vI5m&8d;>jQj;zr%Nvu9A9lfj>wk7Ei`+ysPJ5+j3xq z5~Dt=?0bW$P%z%H;psNlMn!(L4hlWAWctnT>r=7NrSBL1g31# z1g_~)E*5-5GsM^OY24_|Vic;LMppj^`2R8{)ffWGSml_G)L{gl6q|@7S5B<0MLRpN zWWKz0p;_Vpq+}xrf;8Mg<1Pl<^#jM9ok*0XTpm(!%07m6@>0EZ5%lIGyIX4~*4JC5 z#WL{!1to@7`TQS}<4E}&=ox`4QytF{v(;*28_xPHEy0=sh3IgMA3pxuN58=T|B&PV zn5jAbkL^LC6Gtq&I9wCkV7eniP((Q%$wN!HhU@43g(5ssa=p*_f1Ll<6&1Mt zU(+CeO8kiQSET22E?R3h%j@^VOiwIFjmLT06K{LEa{O@Bw>^RVe^cl`9P*=iTKJ}s zXN7MXXB=oZ9R-cu^$T5<@|@-1oV6bdPd?JZW(vMVtp6|2^fmC_F z@%bMPany(8=)iFT&i}ac3MP6^0A>TAD-E%?n@v}Px-m>_Om3NEY#(gQ27m|tp#NLl z%IEZ1gegA%C*cYTB5F^SFP6gR{}dsk3K4vsMl+uOvm8@4;`P;z@pE#c0S89s7~)i6 zHqj-{-SE_Ya^Idg+CB3)VN$K_aK>FZstmQC`p|gn0I&mqPj2#%4(R`X+$x{a;sO9& zNteHU?NKv@cmm6pC;Nq{fl$VIjR=l=`K#o#%(hE`E*Uafo!YbOKn zf~gB^oS@m(7n%m=|4&5z|Nc(>Uk^2K{*PjCKL3l)|ES3MAGgB>;61@l22+1j`wjS0 zhR>(p^7I4y?z!>Hi*vKn;o`A}uWfD|yb`sr_&eND9KO1|atdnr)GtO59z)Ru{RRCMQ|r^G;d!+W$W=7? z2#si<_iP1~gW$8KKm9dNzgB={L4f55gXP#3*tU<~xbgVY_wT#sshfudSQZKc%j)j= zowZiud~x(*!~5p>sC5vm6j#mEBS#SZ#s;ROK{)&OdjUpY$MJsw7Wg0maGKBm#!(~! zokBtY*%~E24HdZO=HQp|C+eTJ|EDzIt57qy==R@5$q>Mvv zhDPxnkWtt?q0t5HHmN-W_ox&!FDTj684jACRo*6I6bnSsDE&!#K-)^uo9G! z74$QMSl&k$ov@pc94T2&V;i$>m44gf6S$53InCby`~O|M|EG%uBnz_18bA~gFL1?U z)8#0@Wa_5a$Qf0*I%78Eq*nwIj+3ze=LRBA-u}bef4ahOaKSZdX~^4ueA)=~|96i| z{6D>T=Ja35q(1zP3vNARJ2UUZ??Z?Q^jVy7Ffjl#K?L&09&zy^1D8YM8N z;s8N{>;G52{{N|~kL|X*aR(HplhKAQwV?Rlolhsa#OsAtktz5<8G-yRS#&5tm*WnZ zVmVL-6Vv$1WIA&ayFuc!y66ACJ3$%t_P7A>AY8$TM4U(@=!XasxPl^Ww#EGss9^B_ zpRv$789EwxaZ6;_nILj`6u{&IfOrF7^)~r+eTyx>M9Lxcc|36iGBAEIa_=i8mL*Ulk&n&_={papmSeg#!ib=PJ>IJhi zGpD1S?e1cbNh)rMZ{d5D_3g^FcO6AKzl6pUbAW2ob&sa3PW{TQd!IQXpm@K4;%s41 zoWFK$L{QX{bOBUoF)y5z%Xw0gq`j%b@gP)<_)rks`)5fr7K|%{H=9jh5*=I_w9)i_ zctw|NI#@@5%z3#6FWYI9XYjptHw-D!lG}si)0^i!>y7*N!BUpd-!4N9SQs&h%EOgZ z%;dr+*#B>FH_UNxj)PY}4qn|Dn9lv0+yi+Y1b6>+y18dF0n%&h?!w|DyIX4~*4N9t zdnLoH&qZtPW|`;g(NC;K#!`(0!Ao8{E;-`qxrX!qyRKhGo6xa9=V9b*dce~t=l_o^ z|NqW!16rc2r!PBF#{;_^MV&XHn=L59!A@u=UZdm4z@dlZ3SnbMqZ#qJS+SNR5;T8?xJ&4B+Mqzg<2jgl5vz)h9zw~r)()E2LAtPlmFu(8=3{W^28h9 ziTEw7UErFBQptUXw5i0A>s)SCkQaOqHI<@lTvie035&W9w+cNR?X17!DI@}d3i$t9 zJJ>+Nj|v$izLxaaP~O#9-NDKhRY9Ky3Q=P+)IPfBEPw2nOMdm8h^$1Eo##9k=X$T7 zxnQtFBku@yq(oEx_*A-pw%r?OCwAMHnyto@^)?iBuWrF!3vJjmD1n=N1dAg#!O1ri zD&R`OslfmLNH#?Jq3nqI;B9lU{vyJT{OnEMylsxs7SN-|v`pTxP_U$4N#yEx4vnT~ ziJaG9hc!{)|9^+o>|m#5hOMpfUiwBXjzKp?itfGcxzf;Xsw*d|m7I zRxEcEP&{Sk+=b#iFZ+&Fb)wn>Z;xSWaa1)@=%>P6Y~5ly@>I0+WD@vpJ0k4vcF0QzU`(zGGHMNIg=$2;=uoJPxOD{CmGxi z?Cw$LamvHF#!jOhtv?#IS6b0Zt9b=}H@BkV1i7%BDWYtm8m@UFZSpOw11yb` z-sn$a;h|1>5f`zVrg}YyNjM9mg#cY*u8&6J{eQvti}QcJzxd5>S$eoNd-E&z9k}t_ zTi|$_;`Ym(jxIKK+6A6ZL)J|JRVs?-I_`IohHcP$&h&I=KJl`r55xZS?|-#8b-tiO^BWK5Gr0LZ>*Z(hbCZUFB{fE;3 z+3Np)q`UuDSiwljcyc(12L!Lu_>*~oM1?f#B^y_fKB&0G)=^>0u*y6m5H#dFfiLy# z_1nG#oIw(v#shgUUl&CbwP#qzmj-kT#;N3?DCjZ42+2Y7WThEZ~$VD41g!%w{QRot{Jp!Trm3b^OukV57>XPnWP=*|(d%p57rsMWY|eIkVYYSg;YSc@hn>1Q?C5edmjC4!yFz;R>y zY^yODQ{CO(Znhx*+&f#~|7Yp?zgyQy`#?!YxS}gh`3QDwif%MR?$i0fH^tay3fBsW zo)REay9;;P5#T2`8qrqUO9NE=kIB)rLMiEVm14?5kVh3Rqiiw2B@H?lvNs%o|G!@? z|Mh-O&@bmx&t zwyDCkLOdy3U#O=^D&PS8{{!9iKR>)p^+J_LYB4ey>nogF(XmSiU67x|jY7;=ncND> zD6T0FFDn-K{|7ZsQ{@*FzK*0cLVDPgZGELHTgenXDyWp91J11wvW_5{{_M^6BdH3_ z`~Pg-PZhb7(|;!*{r9omcGo9GX(rD6-)~nw)(Y>(A@aHqNkIBY6Kfg6(y?4NQW>xo z#cx;w9#R@j)B)`O?==#ak^40gqoivz1IUzc%4QR%=QR#UR3Z_iXfmlxKq8h$!2drI zTfm)vkkLT=f2)YI2sxXW^YgKMs{$f5fh1MxG59>ftPmjZA}%lDYW$}y;sXEwSnKk# zKT$9Z{d!jiB!O!YM-NjB+9+4z)zvz(s5pr$mer=HMli}|PGl!^%o@-N3dcK(#rV#0 zk`aJJImOHzHx2y%Pd9rf!dgJ%7!ew+Ym?3*J<=4tXPnB6?h%88TK1`zlq@KvLWZ{8 zJ8H`d64+!TaLdjHjz&ozltdBl@`6On=!7w}pTPe=-q|kPOGG5M-ABoJOQo14jSypd zjzrh17A7KFNg?kxXlDT#ciV;((k;!(||0GmsNV_g;4jBqM? z&j{k7drNwMl$q1}gJxwDD($toxGJ}~=3)ef@my$F7~LZQo1*6lx_=G+|8O_mj&$g; zrHctjDEpN2@vvbQ`|b)j*??aNMhj__kRoMMx!G8$x9Xcwn=B~VrUch2 z%^xbK_-d1-WI{jGL>E`9O$GJ#rT!Iet3jeLl7B`cHGuy=7D;JDQHaoYI$CSC)=l}* z3-{>NF>+OjGtQeSoik zh!pQeFCrhg7fylye>t{&bQv(xGThkpMRJK13LIonltRHU*CjeN*|fW1s9RC7G*Nb< zr>yUQRikG-Lvxk|4#OkFrqm`j9*PWxluPqvaK&PjS=Smd{TK_E@i?602EztnUr-1dlLJZim})iP%yK^N#iGCnj0fVC45U~ zg?P3KWl|vie}VZwv8MaLJQo0A{y$s|{=f4Zx*m5LiJizpEUzis=-#A5esY0Ny7LMt z7puDT0^eh0j!~nOYKZBHAi?Pr1*TJg|Nkqy>8Z0@dXTqz-88xmJH|+kn$1i zbq?HUdUoRSpRu)9J;Y`y|Jf4t|7*1$2;e{dj4K45e*Br&>^<t+{of zaq-cpE$SIUMKI*rA3NV{ZbbF1gRuJ8ZtX_7-nvlV*vYrW+=n=h4QkRJ=?*CIaG{GI zv~(_4Lc8xBd+_!3_U`6Gw+WIbrdJv-KA9lbX=7mkIM#uPrmHtWBU%=_~H9!7p51FJ$!9*C{5E5MGO?;Gu3wXP9YhY@-OX z=_XX!fnY%3GOb-HIIv(OEGi$#RSJ?m=&r+!>Eji%@qF!`~P{a|DTxj z@Nd~^K-R72`u{OXsZ`X>QJ0X6)^=Ns_Vo#<|9|Hvy7@m2fbjW0iHx8iD!<6!^M8!c z)wm+nV>xC!|L4x%lNB30yEW%LTRoloDZ?3BrUNFUB8{G%puVnY$%ua1KI$xJ5QZ{Z z+O-k1afhC1xku*SgBs2{H@Lcia?~?!&%ivlodfegbjI1XZ`>X#bG99Z&T)sKTqn2U z+70h8ba(CBtn8kbj|!cvNy7NR9Lf%Y{QrkG*Z}At9GU+Ubkt$=#BQ|HKHF+^Q%3|i zs%hyoT4g@f(Swx?1^}=B+g8`d|Jo;C_MWeZ*Z&u0dHr8VD`iVMi;GQ2AvqTe(E9(O zhZFw)?x6PF<4^OGHNsCGc~4t#_{D{}>7$(C!yKMo%5^zh*m2^6q$8^A6$E?U4)Op0 z)_JCK3nCoZDvc4JzhQfxSG5wp7VO`9$vOz`_%PT1QcLkDG*XyYBz;gv8)1vf|5zlL zlb$;?pTHC+VZd7|>LodYf?ixl;J0o_fhS^3>1o{P&Fl;HG^+AHZHWJUH_S+RPv#;3 zzG*};@l7KFs@4)*_lNTea1l`btQO=Aw2lw1j9MRA@a z=SfNX;Wyj6p>q|bVSmJor8h@e;>Av!4V+4+uO}nJ6fNJb9FQ2O0u7% z=#voF=mgazpw<^>|FQ%fjP7WH%4TF~uj4k;@ zYapC4Gm*#x)Y&n*FtbRs7KqamzpmSPy)F?4D1OYNprGfnILecYRw%hI|aiK_Z8Iip9cO4$S8^A%N!I-7 z#L{y_j`QRM;0_Wkl!Bu1Cd8#Zg&iA$QTd2k)q^WN8wLLVzd9siBx?-R@F*K41E)Yn z(BOjA0#6iPsb#_&hF`F{TdO7>cu%@cNq%(Zy$ynj9##qb|DO_AVIlEov)#CG{fnFH z*SpySF}MkMT!JMf0{W9yqii%isc<3#Co%w~QnfRd+yeanCt|FrMgGbdCo`Zhz65`E zLuq-fvA$Ao)i)zJ07nypvTbZ(`H?H%!XtufI^czXGwCL`#*N<0zL0VBSgUbyx!IU( zAe@O>n-vBE@c(~Kmm5}LAanpgxP$Tr;*6DZjhzPUmFgUrxm@N=Q#OHvrmAMT(u!7E z%_}hT=2o;0q5EnI#XhK@-o8}!-EzSHpW*tSLhXtVqI<6YSrTV2J->>2P+b2rp>#>@ z!2iF&m6EzJK>{G#+O$WTW@|J(iSzj%`Gg)M94F!Yk3a2(R2>#CpZ}4_2nr(2X2{0f zBNiE4CD9Ub8Baanp_B~ezt4mI|1+umoV3mEzglZz_n+PW8)($f9C({@c&ZmpeIUvHJx4*>rEFA4j{v&GtpfWspwtx7LZl*4Y644i6f#HyVB8%us7 z+Q`q|Y{2Qil(sZAS_YN?{{OEqXth0sxBu8!qBjp%kZd6e1>daOe_UH;xc>j~!-a2i zQd%s%ei{Gz|H=7(`-9qkQ3;4YLGY>9z5DdOdv5&f=KSn*c%-m{_m;P=Kn5W!zM(8S zDmaj((yy3t?j&47ea6yGiKiu6K^Un9SDP*oM2_^J?33Eu=obboYL6dwsSVKmKM()^ zHLw529*}0carz%Ic{J!)I1%oT#Dk>LgbW*rP)`5DG0qM?f&c%8^Zz>hUw#^wd23w$ zBSt9|4(Uye2`T?^4EXBvSHjTAta+Kd{v?I2&B!R4*(nfJXaHS{h#`f7(V=|`7 z<-e#)NmX1B-2K^!s2p?ajWt_7t7;OCmCtNvt(HcsiTK~1pdHjs2cLmIL-{-(zW0R? zVf)}$9hsjFXA6z61;M@#KR@%{7l`iOEV>H|?r#52e)65~{VeG2!@HupnZmkDax_jy zJKHFjN2NXTel0FLeHwIw3Ir}Xf`p6opfdEHD-h@kATG)?YNRiQ+tmA`woZD}$1JGj zgh9mvh(YkuuMdK0QU7D?gE!|I^@%W9i#y3utzQ}5fZ-u` zUwb+JCv}cDi#Jgh*{R;5g;TH+Rd~H)+|s(|_+N}t3b^!^!UVZ$hBP{#14<3(2eP_!F^w-l5|RaJk&lX0LRGJk<j%ZPH+n|o)+fy^%TRyDIg+{TQAkw%2n07Z9sfl&dD;tjy4tdVS#aS-^wX6S#^ESGpG0_q0Db3kQ! zCg;!TW#7S)Y`;a!}NTu&<6) zgY6Jgtn&Wfm@7&mLenGmOf$m{8Q}lV;`|@vW9hGJG&e@QX=q7}Fgr>=?XGW)ylT0(y8Gg>2VY-r z?`}RM>i_?Nlz-j3LJXQLfM|&ws~AAKLg@p1oHk!M>${{uRp9@BC3u~XGC>bw{o+=L zhOIhH2?tk{Fy*`l&U>hS-UImmFE|L(T%tL8$a*04n}JKz>g^&;-NW}Bn}}U;epd+@ z*I39Ls7y;O;w+8`wW~E4xHcxc>My(IvLH=1VQ7dCf-6aP%zvIr64SPO>xG^`%hFg? ztad;fff!s-D#ijc`G$fTT+u04J|fNbm^!jH3jCkc|Lcr&SpBNO7XTpwFxmsc06Q`< z_2>lF2l&{L8FT)YeAWx6!2h=k5`Yh4i;_Asa}a1ogk%gKC%U7?K=G~4<@;*;Zl z6A}M=$!&ss#m6LTL=9!!`&5)+v7)xc@&@39c5KuG*UBdpiHxK?fo4>N4ZxuP?@-(S z9FsjAtuVps;#Pdw!W=evh-610jb-OIDzWW!Z z3p!9}`Rp0U55Ca2xZA3?;XuT05-EtY^UdZ)RNoR=BJI|0G^|?}>Ki*l>ui`4%b_n# ztRbsH;INAylrbWcNxJW${NMeDkdMau|9Jmjg^VFS|C5@E)WQY(|D{NP@BzT&HXD4W(42_sK%LZWJ|5voix4DZC0FX>d>46IPalx%8F2V-@jAjEc@c+FJ z$`m(2Qwcp~4{&9OL2~?2GV{1HZ+aah<7OOxjB!c)J@zYVxxRJTY#G)N)98B1ji-`d{_a|3v+dzn@s22=kol z(*cQ*=8J%oEt=!uxonN57vG%gGr_q&Ha{Ee|IgLye|ZdsEWyI`^vV7Q`ycFo93S5L z1MvULEtVW77m@7RoafLPoHK0Pn@GxX5BFt>soAlvebS`QZYe^j^eSmM0ikboc|2BVCYU)$U`cqMA> zz%Kmbhr;QZLkFX+wdOhq>Enmao_XYfr9%%tblb7c@l86f>h2hlm#fPwr=yFFop#iM z3?Sss=x-oC4}yKSZoT}OH^IQ33t?bKhA^<5?KC5^E{@ZAz)aFPCqr;VgWx4k0*;p@ zju(ai%9J>+eFOOa_p$z0UM;afbpGnN3WNFqqz_8Fh;RA)PfNNUl2TS#Ah49c6o+Wx z8g=pHV+#B6s~+^qw>*s-y-_qnJF2IVExiN(e?I5mpdFC?;mr~gwb2J@l>Q_(JfaI0 z04x9qb>t|cfK-LKTU-Z(&?ReNfs2Se8#7IKqXfiM%OLP_{IBxyzf)KH%{vnOkJCwn zbODZ1mWh=qCC}w*16g}A4LL&aawrojQwTJe{jbZA+C--RWH|qO|2+oJ^YLFo2I}r2 z{Yi`_Br*B;uY8W+SvkSSf9W(>fUX1o{|jRNuaKfm&#Ig$CvZ>Ur4yaQqMvZ=~Y$OR9OGmgyEl&9uru*C) zC%w_1#2P{zQIYdM?-yE4hd31kc+zZt7fOwVHcrrN>kFZp?eF64Zy`97kAWK-cHo-Q zLW4+D*&FEp*UAB?mU#gXU?M@(F^}j^hh8|bwifN|JQ}r^w=OiR8=!qeDlY&E91tp_KONxX z1waCv9H_StKI?^3;QwjsE(!}d4o|M)TB|4@xx!V3#7GF|zI_L7o^8I~YjvPJfW2L#u2<6H?LJSccf4a=&1Q#MX| zqd$8afATEMlN*g_t6kzaVE^&5gwiktOt}%SPW3mG+XIY&+v6n~R!qV;hw1WK4DZ9dNJJlAe~c1m8jb&-X=V zQn_m{Db-|kv~!#zpFb|_G$PN00f&Y704FvT+BhL)TVH4zoPIcj^h4nPBbD6PEOjFs!UN63IQTYk^Gs6`Xj*qi{1Ud>0vYWc?~i5`1W5{iB-DE1brYO|1kgeXr zgl}n_XbD?isHYO_S-Bm~|JxJ1HkjH|+lD{R&#eQGiR0k!3umV13p>MnrM`AKYNKUg zicJJx3nuB)fT47%cL*s7U~7Hz^Xrd_bKp+`4ClrGhA^ZDZ$5cy?}2BYfDz3WGorI^ zfTf2Ejf=ajdK>my3?H{y&8qy$DxGgamHqnGL6D5?)^3DBknYxn`o@lWO%p?iAq1Se zZ6m^;>0Io-ckIE}*W0_B58Wmho_ImAFdT)rw6L=juvjd2Cm{wZJ{F$$3_p3J5{(jQ zP*~{1(S|w%XRdEg#@4QhJOH%+^MCih710P6;Nb#1T!6^3q2mT5))f*2R%Q2d; zHw2b`mzLkw?vftKc$Q>bLR?QiC}=TH3qflwAE8@Ew7bUU5$&$~-9_i9+%pP8D*3gJ z&BK+o+wQjA<63fde1uYk*6*V8u6tBRop=EDL9An-*mpa05?46moO2jD3CMHXJ!>DH zXXpku4c_jyhsuq>|6hW5u8bT>7PtY@`r5s5f!wE7FcRpTerpM?0z5t8Rd~WkOEIt@ zgaHM8d@Y~G36gDnp=pdN{Z^XdiDZobMWeC?#N|wI9Kr(Jl=Bw`pDX{*L}bc_C!|pV z4NA}mnY{gG0=C~gwyTz|ky@2TP?uV|>u-|ry?oYvHI|WB!yy{WwEyR^=m}(_IVjj7 zj_A`Mh?Ki=gxX*D9yJ@$y+!>!ZRUogqa#4j=y$wDL~UGd95Gx%85!$gHNRj zDGYlz#uaR0s6qYDkMsT?lmSU7NLpJe-UC-W7HWU8-0T6h&kjhDK7tAQSh;%8E8kL5 z$56@k3q%-cgfuD#B#!^rJ{rJ({3#IxKKZhz<{**qhwl#;rx%M!+k@!$>F8o(ryaFU z7iA*yBBN8-P~#RvhBB{R=Bg1xMDKNrE(O7B-X}<2-}^Z-5oj^jZK8G<3R?D?tJW{1 zQ34H0FvyhP_yfluy42E*KM4Le>=K|F@0$>faQ-jn|8oAXHCa;1R;==f@Rg6`YBrKS92Q=d{9joAUr7`R z)g&XH3|FzXY4_C1ezK}q^9dGNkDUkp|MDU7|A>W3WlpgeIUIL(qEi4iU_!X-u$ zt{t?*ND$ohA`wMW%L-IUK3>AH}da{r{71wAv z`^M&AkXSGd4duAG#n@7U(Cyk=IMQq?<@l$!M#etN2=xD1hyIsljhefKXyQwRaN=u) zEFz=_zO03La-#utFDAkclvC#NpMn5sNUML+se1X(W5E9lu2g*%07Uc|%btX&B)~=# z17-mbVT2Ln(4RzUVQXh{>i@nOscAm`i;w?`HD{te5oMUxzm#+iev^-kN*L~LZ#PAl zaw2TMEX#kbr2fYqsQ)Q4f%r3l5V-l|mv!oYhQ%Zjm$v?Ae&L36MLr#+L5r*Zx&JFk z%9#|}Sgyl0ed#&&u88>*U-PJpl#P?#=ugryvfEb9HFg>x@gI%aSDUTN!&;w`)5=xR zc^XwSU1>!tt>zV&d2=gThlL!1QJOQ7Bcg0$glnUwf_nSXMCkm}(OR>$e!98a&REkG z;{QJgL>UwM#PWuW$3|s78XL4xUS;G}#_F#!Lj3P78M4j`VMxOCRBIuI zKi8;Fgm~xezr6jI*t$8}ZovOvXSEiGt&P(&{{Yrb*=8C&u^a8Q&$b%cz^P#L+uMWM zLfLY|`amg6w9(3F!fLRQifP#7EBo!?0Iq;Ta;APUKI79mUi_XPpRzYROSqQ7MF;+W zl-K`+P)$C_$jC>xZDd2PtNdd>ICjcb%KMn`A!xI?! zPCw<}e$8Ge=KoK>d^}F=vLf&tFdXKY<`-Y^@i?`N;Tf(r@{492<|I*eH!S5c4B8SUhH@6b#s!g=@N9W4CDi3Or@w zMsH4_j>-py`2Sa@f#`TyEv9zMl>E$z56YM8k6g0_0!SZ}A&~Os#D^gzJ^=r}lJ!69 zf7bsUoicg)|2&erT>q2ne{%g#>-wtA>?a0|d_-AQere)0tVtgZqbZ9G4Elc!2B}sL zJx8*-k1jQibI_V53%{}3p*l9sjo04Q7A_M}jRx&L?$=n1)>?Lt%9s&B2Q)>!N{S(P z#N)2!NCUk8pZEW30TV)=lsJL^*9~?GLwY)&#xZ7vF#YxnEy<Lo;2prbExTjbdW@+aaw|Ms7Q2?G~%y3{9ue+jfs^z!SQi=0^Wl6&UmVE_*{kCON(8JUyJ%oEcg{{JHz-QvMiIv~Y0@J>TAY_HCP zd1-X{fKmU0l)|gBj{wy|M%#?Y>lRu2B&%b56SjK5P<*x zy%?_?0N?zqUw?7pnJ4!h zxbb`MI5IcASj-7ntII2=ql=9lsBQsHD9VJUM2JPP8E~Ud0}-qJQ|3-3b5SINv$mIhT8HH9IH>IA`y zzXSCDMhs32y-p2j&YMxjCnYvuJ(MSSCSB?G6hz>p~F*jx-G z0Fx3!2J32fL(f*68TW1)&yFznMxLXF@HFsmTtM8}5psi4nFn{k|IxNu0PxUcmJDOg zE=({9|6)ezEi!tNdR4apx;MOqA>|{&;m*CPzRi#B9igFfC#!FFqkAi!TQa%ZHf%2) zByNBn#WF9k|KAnV-X(Sd@MqW%`28_3~{^w}wp925yo{w4w z;iOZuIDjtYopzR|Y>=mIQ)=s7QwxxYJ9wA~Jo1ycRoD)XcEqXK9RC;Y2>}ya8PxkM zq*01&GHg6(&j0fu75INARwbV2ve*de@x;YN5_Mhx5=P8{BIk~eFx4V#V}Xp=`%&2;|Pw{-YlYgAmLF!i&CmuN{JvOxG5KR%Nc;3CB+`& z_pIeDCDsHUwy#FMGnFg!RPUdmE0Ef(JuoqnJhYcR@b+b}dP>n7IV5`DGc-9xyX~IW zKuKtx72hzVxk1{%JV!P7D21l$Xl=Vsm>@e81Q}u?bSL$B4<&GC47zdYMpm!fQQ-e~ zxP)1b5xq&-Qi-ggGL=*6nRaZX_h}?wHHH}bWEc;hdlVTJP{9B1vaIa`ieo#rzjdzk zHl>sWyv0bd9bF6o9C*U8CXNUOBpOvG01yBMv3L(uqfF8m;eJ{ zd8_L

;{Q%G)Itbp9Xnzfh%J$dpa5l7Tb-U*GJkXHR4TaR2;&=O1!~F3I%X;ODse zMRHwLBpyViO-hZ?K_wZ;XisF?i=6bbQo^z7<-g(l&;3tj*mhEg(VZSW?EXuMRREV1 zf?H3c?Ea6&{ci*Rzg^N2{53@=T+`Pqj0@yGrAQ>Td1Z@NwvHbbMP!GtvNd`mq6}4S zfdAhU$t7P0>y}|I7U@N0lP=0!^KI_7qY0r>uFzvdz>(4_PgFWfb#CDQ_euRv*#R`Y z^0+udN5O*a7`9_7V#kR3-+P0Hf<29?gSGdp}njL(`)t_7E}yR%GFWbJ1G6S>Xut@>*kk zL@}8$smJtKt8uaVRv!>Qp?1yeJrlJys|*C-|8Gd_f5hZm{zr&&5-T7-3DF?varvJJ z?+qCMj$HmnCpwR;$`Yvn{{P09{}UrTx2vxflg(VVIAP( zBBKO2Kzu4pl#P0a%M!r<-vmA4@;~$448mA2Xg7@#B-)#_#Ey2;;bxgNZnQUL_F^&| zGFn%kuF>XkfRZ>h#e!suNK^1Ns%fC9F48JP=$`8sTGw&A<2X;(TwKQkyABg8e4a`* zrWcSWcH5Vlt;Un}Hf(Dg%he>{|8MW`6`58ca;T6-$-pW5A&JbUIh*D{?UX{`O1ZRl zM=`5GXAa8&|G!M~ziO_^5swb+h|NpvI7AP;*vE@~6KP_&p&eH|0j}CnLZ#X zb;cQmFy+uZhvvcas(NU?qn6#)%AlGW^#3zT@0Y1wr9&tY8AZ)Kq}*5e_|I-_YYL|F zTg6;t%q=`1b`=D7Kf(InG;=J5j?L8Z^N4&4iz`dxL}bagWM;O|1xReM{%8H4aP6S_ zU*!KyP2C<$eGLBL&tya3`M2L(*muv3XP=mzo1QH$4RLm6=5#bjs$US?^`*D&xj7GG zeeSRrYjL@W^Go4iVWefD20MzDuKWT{%{4Ci2ztyz>rPjf^sz1eK zSq&Riqh#RJx<%Ub4ZMtPQYmr@$LA#B^f=`dHeoU9u{!!wARYMM75}p_uhDL7oEj7a zk9lY)W#e?%WKyJK+-av$JRdTk+z2WL{a7-6BZ3f#M%BrB(m?k15{Fu3xj+m_2a{q11Ovv%)c`p6@5~LNvjp`6Q~#LK_nOSYIH7 za%sLQZv%(;-*=@V*g+Q>hhWRddB9)Ont^M&nlmnt`;>hVOK?gsrvz6dB{&G~JnG2* zNy$m_F|0!18pr=*k>rDeDXgd{(j}KeGReBtT>m?PJOLc}NrGt@Pm^-UFzEm9H8o*x zz+~QNlAB${Y!;VLpRv4A?=3l!n_X?Xir|o3jJT3 z+8e-s{FzV)+`RruQ2$TNO^2-hfh&|NnxCtcPRC!UZ|tNp4K$gD#BwJ6|3g9|Xf4JU zh@+E;i_X#Nr4;`h7q=jq;N77;Co3+#IhNIW1p+O(Z4`;A(;Oac3YACgJU^@31_9Uf zer*>@B2?u3v~ZX54N58gIQ%~W;s3{W+kN~0KiqCyxc_3Pa?m6REO1}KD8i6nDq zMXo5$6~((cdHlJ>AZ!T#eygtkkvqZ3epb|i$nn?$QYfiqq*$a<`$#^9=_a?v394;< zp=ofk-vlK42_h69q|bo=e?(kSL60!x1AqV^Ihrpi;J3lrnR}` zI5?>AwQ?-I5FNSZnKkzzzx6och$2a7aqbd)Dq)_UIL1CFAddgnemH>t_%p^3c>3($ z-+R~lUOhKGQ%sD0`RtjVYxL=Y*EuX}gG}STkd*HU4NU+c*_9>!&+$KD|LE!-E)WF) zSDY$ezM+)Fa2h28r^7~r=J;Rb<9~15%o6|m-Poe_FDpnA*X+HLGX<{+3glBEq6_wZy@XVifkL^ycVlDk#j*yg zuSYH9Ii%Lr!2ciY*8g`3GcEw61UnZ1;sQX`C;$Zf|B=SlMNM=_;h|K8VIs;$G_9%l z!xBT4Z#WuFuaLONV50FPP;*7YC>rG=gCi<32>kzJ77wtuEyy_m0$c<>f*ak&cl<>B z78Zc;mhNk-$1qFh*0|A|IT17s&Izb~P5|)#jcv67&_>#bB8t}QEL?;jVc{|fE&_D? zuoFI<@OPM(N(x?=2mSvOvF;mQ@Q#mWwb&ZzO^*|6YthcmqfvW#>q4`{yHss9J~FW^ znnu2XBPi5n>jREEJ5j40tuL<+2Z(f}#LGid?|Q+H>~5`{SYK}yI6&b4pTh7=0b}_H zj!>b|XG2_h8cmN!PA;-}RjE0YlZz~-^`L5+@)_{|2V1-VsAL&oZwjv=+e(jLy(*G# zqOEpgt=^6bR0Kr_fjxla1;EiP00RI2IFcz*>q=uSnw;8qt6)kunp=sg*(ou55wS%z z2e!`|+i=$RWK4B;d%G!Y{E3+DnJnHQ@c+*^j^>e4o45$N4HxS~;?AVelPMdgq^)=E zqV&!oPA4}Spg<>r2KfB1e9DnXIG&4IP#mYiqyzl_FR*f810Y)-b$1QbCe(-olaDB; z1Fj$=%sgm8zJbLsX_WpX@))rVV?R+9XfFMfXN$}00;&o8dWFb+9(+~g@uK5s_p;)|9@Pi|2hD2 zI$CSC)+b0U^7$WnUC8qDG#da|LMQkPf>*v$sA>(noS`G&q1!n0XK$;6O9JN;gIhVl z89F)*0#OpO)7aK(V|%PO(EmRhv%jEtSL3|>Uq$FR{h!nStC9Y{0sQ~-rmiD`0Qp7T z+{AOyTDw_fX5y$5Qq~&lqe;miz!%aPA;2o+rR>H|x`9>O1*0$26L0^m{`TM7fd79X z(fFjRjiK7$@%cYfdjt57KNAXpo7Zmc*?Zub&Dn4|Ear5fwdU4^ z#>KO+;l8j+GcLQzWjh@?s--;w6DnIRKYL@~V~sAfA;^5Mb{D0 zg}UGc0IO*C3wN7%hikf30c~6KMsAH8y*YIhF91}30RZg(pX=^jaZ&>(0I2XSCjf8) zKs6Eog5b^-&i@r^SA3A2GeMcoyaC9m_{POmPbidF<{Hhe)Z3TN)Gx+qD_vh9eyyib z3HtwS_=%wgAN(`Q276-WQtTow=LJB40}3zQCvky~7XV%Sn2mY?ANe;*Q7n4^{{J<$ z|2q;eHQlrQ&-Q;+?En40ZqWczJS2>P?P8Aq32+hk2rwb5!YcRWTiC*aYr4#d8!E1G zqc?LRXc`>Zxeug_w$XLR{)gHo&r$L4FQy?j&urw+uslQKf7`M z&(Z1GV#Za{{GWxH-pKDSuX>#Ge}2^=9t1bQ2QeP|{{kLTe8$j8{y{LZ2q*DO@)owR z;F>O%)nnKo(hx96<3?}hM9?(Y|DOo||M$A}KQ%gIFP6R7uF%5L2uTR5EHcGhe_|(F zqofZi*wCO^gCVpE`+utTL@@O;@DG2Ahrq47pZ=VE_uP2yzPXv{usAnhc4lTo&XmJu zb~;lIM@x66AY}EwZ{7R!?E;GT3n&)kw18haf9=|cps2f#pqQ0Q8qPXE?7XSN@n8_# z{cS;T*Q>bxuQ0ol57HCa^bnxRa1I7;G`(_@C68C(Acv^J<(aY}r++w3K>goOaQ?4_ z`#JwNe=#;<*~s;Ou^X2-`(RAn;{3mk?$={+RF5Mq&iQ|w|5us(zkh3*zMTI9Frmg` zdg*XtZ4J&9eKcw>Z(Yc8DC4-C$2?+v%>}?I4d#y!@c*Zk{?|!7|K4IrL-i_jqjuI7 z?bmU_kHA4@(Z&fs1yFAxd`3}BygA8oVE_Mn#sB0XjWc=wzmigH|FivH8T?I zdE56kO_SC84v)ARC)@krRby?;xIjo9-bn>|MFzHBGB%nPpTPfr#QDEc0*(}A4mu#j zN0}VcS+us>YP7F&{%?#^3OJo-Q^0Wo@_*mm8kc+%iY+4h5SgEA)N@pR4$cFKKt_>+ zj7UGv$FE)$8b8`pa?_+I)P3*RgRif*cQ+pr=YRhJ>;DIpyVM1d^a&_O`GsThhJ!#zAG8O=v#kFu z_Lm<6@IYX%7e-a6Wam@aIWRwyJfiQF!Sxy`{h#(THl5PS*x(MkT%PXBl#{Q$pNlMVfm7)kZ|6c;mAoYuLDCDs0 z_yqp{yr#c|A0r7=qj&KL?#E8^;tflq>Dhque?zo}pP`~U3vL}F<@LW})|!C-KNpda zl=w6BBnChox=RneQ|=Pm0Pd+Cm+1o0obX7$Vv}@ASp>Du|PCCAgYyEm5Ca*Z5|M!9f-j0diCji`bB|2L8T zlLX4~zurI?f=|3LFuWAmXnOMI<3M`hwPD05@c-Y(LD{35dM@XXFhxcfb>oL5M>H8udck2F4p$wlxL z{&&L{*!~aMPUA(Y01;=1(-YYKPiV&^O9m#la&4RlMf#I?@t6u0+xL|{B@p!g7uo)g z`ClPdw*Lv?E6_14dI}!J_6^}B@d!3U5kF;Xl=NYd+HC)0z{mIm{{Khb|1bEz{4~z{ z{|B@7AmBIx`~Uw5i(sz*JD>x#hF1-8{ohF3Q$wNrvOi<}pMT~3zg+*9>;EP;AXbNZ z>4xyJRDoRLmx#Bp366Ryu>SvNlx3f2eli)*_r=*E34Cxet6zpw6bUA%;73@o z9Y{d}SW5?1?s9z%2{?*3092}c8rcG&Z3pNlX<;c9GxpO*56)P*YSPYC_O^ZBJ~H2W zY^qwH8~p!|cQ_kClk@)oCRA*sUT5a~zrpz6y#JTdAQ0t%qq4yNUmBLyA%z58lJa=5zswbb>Jyl>w?(`b*@m8C!+2?N=X?h98^*=-8Q+TD0bn^axgFZ{ey%y@-QkDSz|M!prr1IBS z7w}DOWdh&S79NzFmNP?q-*PaBF6NbH>0$@IX&Y_s^V)pujGP&|qJ-YF zosTk%^R(6Yv7Om+fG(RM800=r$+A>lcDH~_Q2%Ggw@N}K6WdZr6k8!U*jmw&%lbrl zxwRi7gx78QShoTHzs~9(AV6$h^0T{yH*8ul*o4x&%BuctDznhCcv5>PbYz>SZ7w$T zZwq9y`tRtK-U39x|6|dMG0{pJM`H=NK)3*|l*-r96)(I0AxtvMK6d|0&l14@*Tj5* zc$w|dez=0|(LU@^M1`FGMi5fjP)Jp*nTengj|eQJ zQTWbi4e7&*SuX!s5~MmPWdZ7uom@N@scDioMe(1|81Vo0CZxL>&j5;^ieQ7u7e=8* z$K_*~gyAs^n4>&ZI{?p>3zy4ppHvWVec%Pr0pG! zRWJW@2=agaNMV`Qg~n1aI>ql!1nXg*e;mnP9}OANSc6*MqcPQuwY6po4r&;Q*=DQ% zv-6Fi{x<1iA}+-vSjl72p(p!`H?V@=ibhEv)c8Sz<^{kA^{PGB1NbhjHCn+)FjqyB z(ZK$nMP@pe|Ksw1kv53_AVHbU;1&vCpeiH1csjxApXxrq2x9kk3+(@Y8J7AV=@H9n zo7MJOs0VtxZv zT)8w#U{2*d0x#G9;QAkeK@Z*9DPIBh|Nqk2JEkJc+=R>uCgszO#gTA2@4a|2+(8Db z7mcOGc9|V*2f@tWU-9G;$NY;b|Jw%p|C2~ZgzH8e|5pTGNh}s3pe=R)*Z+@$8+!Sq-Qap@z^I~sbymu zj%^eC0Si;@y`0W3KKqNSYD~^l^N+j@xYHpUNQ8I7}3j_%+07QW^ ztc21Hr@;R^JI;iZ0J+OjC9MYaYjIyosT<`&VmJ85u*cFRFW(cx9H`U+b>*&ZxRKj5 z{-NI1TzU1jRxw(=?RuMrP}H}zxQ%j~5INk_@s8FTVhQRAk&`&z)00}waYLZ(0D6Xe=@^7Z8Eb;<-~1s>BnWYki0dtYYmHQ zG7S-}E$%x#jn?#t$!@QouN^jwdIbIdVqFJiOeP+d03gV6B1qs$zxI22QN;xSxd0&W zR1P#a_(r4rAMatW{%QDA)MxYFtIxe=*IREsFf%ckPjbXkbM1H-P#BSdh6`s`SroJIPf73V}pvUMUoq~Fq}>BgS43N1CsZW{PxS2 z@4Y&{ZTCZ0_8yp?@N=TB6Y~ovHqNXswHjvvLR>@-p}F*G(Atc1TX49$-QanTzdp|Y z8~5rzSBFF;{xAeo2z>T+SNB5V+V30$*_>Yv;MAnwTl$~pZGZQpyRN=4Oiz3P3@yK$ zx}Jx&dM=Srk(Ev)0H|s1QHvifDFN^s<4*dV^I;~rXo9llAxCneAIq!%sh_~dDK=hU>WTH#?HBMxh z7?KiMl+)n)-y>1~oA>`48BynPq~Z;}n_wo)-@Wl$wnj-Gbl7Ony#Jr~{|j}K#7E-z z-xtF8-xpNRue!fJF}wNHZM!f3Ok@A#grA>Ndl!@zT|AdxK*+Z0MOIxwI7z3|8c4Ei z=qTL^u;*R(K8XKqULVE(LS*L`CMak8Z~WK6{(tfrE&v{y0MQ5O%WV2s*a2OP>THds zSMn!1HP5*Kc#KY=@H*HfKZ&b_k>7!1)eC^b{@<1DF>oA|%Lf2S*O(6g;sb!HaR3nL z|7WKvq{s&VbyNt^86Y*KT*#)~9fCJoqv=fsSh3y+*4uCG8c)BCI|4#J) z{O_~+mj>`ws6x^Q)!;~f^Z6eJ0(M(C!hpdx4qQ_g|INnJz#7+jqi9xoD)9V|9nWO@ z|5g?Ns0^lH9|;tNRbD{e5db(dl4Ey5SV`|BHD4Pb>i=Rw#SOoA>`%R9H7I=-?l-?#S%_ z*>N-H{|o*{1aQ2$QR)M?(~~;q{~P={LaQ<)1|LIwV^M5)2w=(&^ zlMvy z2Zh)UtFV@=p$E{QQa84-%&K$9%=`xP&Wi0kt@%t?+#Q(L{s zA>jZ2Y!F>&3cTQFfDc@93U`4Bj4K1S#AA3_WnhgHN;UO`P|XW|)nD)<&VE?sZ$rub z8X#%+MtufFD(Drn5I2hPMW8_~55(MD{&NJ%f8MjvPKvl7JGlG#D4_qJ#QDFR|BGdc zkh<6+L4qU~InDXMh2{U=656uqV_m%e-^3qq%@OMnZ(&bnD= z|M!Ok1|LMgyc`h1gUCeklW-}59xn&*azIEwghCV!%f*Pw&?xZ#K18~_|A+VgBoU&a zBv^xBCVYm;d1Gy@*=h&NUl}Y`AF>nFo-X?0BBppvMuD<&aAL4@*Pyq zrO2$ByUtTu<+SbY)HU>rJHRU;yF@dP6ND?ODI*@)N`K#g2r&%HNXft{i6YMDjU5r{ zRYV)W2m1eDL?!rynB2Kdp|t*`itYI0Sxb6A?(>wSYyiDXy9Uaa!GpY{3Whm!Xo0$N z*Z0*tiHNM^%f3(HtG+$yC-LZ*%+%Zd0qbqo+aj(lnkJ1;+ZrdxhgVf*FAR~Gt>uZEW`k(}WXo~Cq7}&$jb%Lod4m2!8 zf=om1z#1n=7DJMhru0-~{hyZ+k*+1p!APaR*Q|8q?r;cI0(%RCv6&blU)6j)fbY^; zxewGxKh06?Lok?`se@ccwUG4 z5f$lRhYYAn@`AfDzaLFu$6td7z-3SSLw{<YbrgJ%kZeK%9dkw%*%t9( zka_fJwO_jOhv`5~=TP3W!GITYI|jhOv<&e7%dufQu!f6ll+rlSx=1H-{6EAKg;#2s z!1X^3BCu2uWZ?fJF{|QS29E#r!xbF=}lKSb@omEjW&!2ho>&^j498h8@kIY7`~OB_|KHJM!-t(8 znvIIH12uyQZy?U#`k!3?voiHR@8I>n$Qn@9EZ6@g;?He_#Oec^AVi`<6N7J*^g(+- zQafDeEO)x11Av*<|8~5M>;G{5AFlr+bU-n_R#6)O!2dtS`M(M7oyZ?{9VhZu!$J;0 zg`+dZD2Nj|>1_o8#}UZ?{Yqpaas7|#mx(yhSUc5flr>>B^wLtVPoCiVAJiWrZXD?U zS4!cPZD9&HK!yQ8I99?jd64{Qt`5|KGWiA^-nX26;xQDz(SO z%VstyUrM>b%Vt;$fDm_N@d+{Sun)vzxip@df5HC$8l7V0ZXVlil>=g1kuaUm4v(qX zWFJy|H|4$kwAvhcPp>tHZ)&yT@J+4GoO09Jr)3+9?^__?Tl=()HuoJnk}@fs5K^#{ zI<+-`qSFzMZHtd>o0E;;h7xFb)pC>w1emM3*(6phXaxSh%fP-`l`o80b@LYKpZ?q$ zin7%lwow~zC^Mww*!ftw%hf@p`ZkC|hozv$5eWD6$jlKV>%&kmMie^m|3dg0;_n%% zy4AaMtEqCANMX3ANhj?Bkr41szhEPsQi!1TdH-L8d=)1>fRF3{4W4>|0S4b_H=F|h zU*P=zNN`eFMX`Xy1}|jtLS{7iDW z5`-t_VYBo7$35?c`44~1!;@imH$!*+!JNC>d+(#WAHEg3dt`6e-E3~%?VFrD9;~mS zV3rCCm$gcthUe48NNll=0R`7Q?}^U_{r}am_QPg3@Ba^7qO4Xi@Bioh{~`Sh-ijZ5 zqrm^C475&$jwC+s|2Lu*Fyn|?2;AY=EnHKD476>an}Id1^=73}-v2)m`~OdbL*kziQWHqezcdu##u9+rRT098(+Be1h){Iq0E+IIKJ5C0NRjNE7ja)KJVO>)N$ zGx5e&H<}(d9Nl&DHR%77n#MtR=L&CBkO0{`G(8n2Tf=MV*@C^hezaY+ygSc(>TB2J zZiYx+^h@69DUnZjpjMYqs&ZL*0P>~>gdDwZv2_kYf&;Jah9?A5lGY$ukd7!&-sJ=X z3Aj8o5$OLzy#5ywou;KJxRKiD^*>(!tI+zNH}2K1sof9%XrD))@#gVuyDmTCPt8tD z<+jRlJUG`_ZwIY{mRc>e zR_^}l%B43y`S72QG@)_4sbM>+ItBb@`fN&>_79TfELDZ6g4PH1*`YaCrS zFmPP=$ZM}*XPboBlGXMbe)%IyySMGQ{O+UvM1Bbp=|Kosy$9_7-;a%78(X~;2IC?mJb;lVMq)=+ zk{%EwcyTBP@NX?n!TMd*+UVmNfKPykN+MI-CH8y z!}%g1Z*a4sCp3FOV;R#0tuI$k6;iAKkHJr$iYd|q0x#G9;rc&9i6!wr@c+NoP~)r^ zu1inLryGj{j7w~_*`9u$_g=ghCKy5(rm?ix4oW;{hwz)fzv72WIp$wn{l6WrK{|r# ze{=osBpn1uR{DfSGjQ0|1lRv|nVg~huhxEL^Iy6*G9p-hUSRWo1kC??Hss=Is`Y=c z|G$pU{|Pxh{*+$hb=IwT{V&2N^|XZl+d+2sV2M~q9f9?~*U9vM8lOVka6DLQww6bz zyl-=()c!W5{O+V4*7pt8+i)h3k_bU*q5KvQ7c$27Y>ZFP|6iXtd{>^ZDNou5?T# z&j089|7zs_1OG3AF_d0gBuk$I-yycuQFxd&QHqL+n_p@yk9JI&>wkBGj{y!>xL zPVaE6`ttuF;Qw=h2p?Gpi5M-d_@=`|mMcyjs z|3)~aW{?^JwAi}>j#YO6!uo%;+B-e?k3T~Nfybt=UJnKL-gEB2fgG#F$;zua)#aSE z6j!w!_A*0jzM<_b*3;hAx||@HhpUl5QKI&cNyKz9ebJvpYT@=d|HsVw z7)F_JAkb70VzcJ|z|ka}{}Yk~e9BG(B5cj!{}`RB%I`r)j!60cF#l(b^M4{@QMjMO zf5d`Npi@f2hs%Fp!=!^x;Quy!mFok(KcyJJ>di^Zs*LZ`gLaf=E$cw~0YA!{;`Fi( zm#U++^=TU|IoOA)2BJ6!GuX`pgU=x0n{`dcc7~m8U5n=#k_|;~27F5AD}7^O?dE2y z@rK1VY%uIl{J#$HusxFsda>{=xe>(qf2FZ(9a=8K z20-Bdckuon!T*Z$q2>kz6ssCN{Z-@YJWE-zX3}9DA zhZGT9<&KT;9;M;_S1KgK(6&jy2l2=7N46t4a#ZV9x#(x$-gV&rH*_dYnz4NTcRzf_ z=YJ1I1uq;~Uk}3SU0W5HN-zDABKQ?J|9eM6*D2lQell|||1Sk=C_s^JG&&COL>Er7N%Alu5QmNgq@|A!U_m^F#jWRY8hLm zv*R0q0%WwA^Z!jO(OrZXL=@HE3Vb>LbZ)P0FM}vTUChR!=4^|2Lx6ja)$xQjLUS zmk62Y5&?d6%|SUS8`pZX(kRFOM5t+$KfcFBuLX?~!fGfRu^R`j!4!ufxZ(8JmUkV<}bw_7;>kBZ{bu>|P< z?=fqY(oLl^4H>hlYR;xM(E%^l;QfF=1=5Vvau=1mzE4X$liRegw0c`B)~w#vic71v zU2h8uIEG#L7tPD}rxUALJb-SK)IxYwm5` z2;QjhMkr#mvh5H}6i$|V=^;Ps(v zP(k8hhy*1WI3+wZXpSKF4c95K(xkTGs|XyJQoUohupa|Ieebam__)T>sVg!6w6Z4bc^fAj$k3>X3-xuCHGkj@{%y#e85&|0Z} zQAZQiA?~g|00>b~1`p5wtb5P%YOjYs=Fg+MAKt%h_vJ_SPEAhi+jr>jrIqvJ7lKxJ zfY#g|e`0dac(A(ETm~IAx98N!W4FxiIegppL$@!sH&#Mk$35cjs$iL4n3|kC9;~k= z;Y;<+kb4l`3?g4`J9^$?x+1go0A035_oimicu1SJd;8TkJ@3Y!|AR9R?*lNte=Y>0 zpBoro@n8T4`k+x$xby+VX}U~~AT?{L%|mMXP?A)2@&Lzci)WXz1`*bs2=*E0>3Prj zRCNAt?GX?D52^AS!C^gi=<@WoU6@{j%?9cS>cg@u4as){8759qygIbHDHixDo^EaX~HnlMlH56K{@qsl8 zGT<1H3+bKqji_>TQzdwr1k=DdroixKnMK-|G$&#|0EF*EDB3m@sjKRU?+td z2WpsvvIa(e2aY39|L6L*wT7j(A4L}lVIlnRIhaCZQ6e5z`^02}B7_!w4yFKS7z-Or z41*A}WBx@&NkRYrFq$u$|7`wCR&a5`(0e*;{=3uz@c##}#S|i6Svyq|S+(0EQ`3ov za|&0)D!faYcS(m_M66f0VNrxQ^}LBY+5W#(tbhQLR39-HJd!>rr65_tSrP_5a&wZv znyT3d*dtx0G3me>*LtI9R(dMV{@?kPlK7P&amKH7j5y<$GkzOt05^SIhuo|AJ<) zz<_I-?W|qU`r5LYDm)Vn0}oywdPzn~25u3dTqS9cRg$)vcoaOVKctzOss7LR#hN8l zE|gsbn`7RAYqG-@xI+2wrX>IE`+}KmB&$e3Fn&h5K z>J>9mBC=WiCx=-q+!ZW07Q;Pe%~sG^X4!{p603Xtvp(Z3kY<^MF z><(TwVslV1$NviQnL~SjNc`qp2&?Li5_x5jC7k|K`Srg$SF)`C{f~~>jPwp4l^$AU zY6Oh_B+)MfJ>CGw8vqllUYeEzFxeeeR0d@i*Z)50)lLp7^2hBw_Ki)5PyNWo%!HrQ zc^y!`I~LLTMW<#gCm+pNDsj)!9pNa)!g_|hC8$Nt7NU}v$m#Ba*}xyvU;+-4!89#n z1l_aE#dfxk4L%3elScENr{_KMGvNRK6&&X^x0g$$8Frc?rEZ`dA&s}%m!@>lo#2aD zQSMli1JHKq=b2xe1gmemY*6l&CYucS|3_ksIpc+b+%ZVX&LDSOfCC6hoLrI%PSW$; z9hcV1T~RmvRFAcqDLy-w|Mmr)Yjo2`{&UcAD#$L0)7D;Ve8N2mU^+Tu#`&(gMSr%S^OUD7(SZY&6NJ-4aU8&SFA(EP5@I~S zU|cy9v_eNdJs3Uj`DZ}?|2R1RdaY|~U}Tn71w=xU9QLe;$QhrWOCW`-HK3vfMwB*f z0TtU=$Q-ENAzG=s8tN5xwxE(NaAcc{jpepDsI(#I&^Avit`Bsl5gV>^pQjA-P+I9u z97DhT5cvPUb_~k0_ zp~27jKNK}pb_Qm$b%5B?0|NkWC|H_C@0-+o=Jn4g~d!+31Ti24t ztfrTW5PqEhTVVdLOhqpO^#=c03}eWMG}}nib31G35zx@{t4VkRdD|lJoDfT*pouR? zl?AX$U%nyR|B<3k;GUz}7g9|c8~q~B;8Rj^k;K8$Wdx*4hW!5<-UMVwLJ{O=ccMDZ zXDTPVr$f=<62?LXV9Q1Wf7B3x`2ZWwjO-JgLott@ZtSd|?^|r0 zgGkP?jn$ok4wl+Yl`??;-yiCh?3~5a5dyCe zNtqS&lXQ=cG68?m%GL*G5(hS-8+G>nq;O@$&0gB}ef!9Knj4@ruBKW={Uf~izI9su zB+Y5*p=~X1LwQ%r+)(anxf{yeLF-*wo)7r{r#b#F8Hq?$zy&c5;fnOB^Nt8|{NDh7 zHwFaOhRDkjLz0xHOrxmd|JuO+pHRl6k-IWZBf*Qgl?U8hq7xEDxkM)bp#&v5r6JW3 zh7LX>DvbVA865cke**ue4)`qyKhxk#!~@MiVG04G2&#Uyu%l6GC@FobFpMot$9P0{ z4&;f)aCdNRFpU#5oBBdMv5*`AAqo8dD`%Q<1ps{$KuFm!KMxVv5-O(h22n5vtb@hn zpr!ch6kKlMq7wkYfS?g9voID+bX82FWZ)DQc+j1||LLIBIQ!rLgQ=L2$Z&FjBk6-q z8TkL_Wd0AmivYq0@RrNGao}CSEFZwD8FUCfMxVDB`Q?xh3ybahPA;B{QVA8IZ+Z`| zfmI3o|G{Jho3elWNXI-Fbx#Q!;avZl>wj0K{`b#^Mm`4sBK3~MJ_i6e08sq^0G$8v zPt5&$f0QU?Pgm0Ff++6}I$bGS>?J*kabb!G`9!plpF{>AJ&|K! z3Lq%iJtgSV}4Vxn|+mjh$ zO%VV8u|Sv-)V@J{!s$P;l|(@VCZ4nlw%P==*p=y>w6KIju-*odprnjcbE4%wtwi_} zf?p%UUy@&j^q({F`G4>9YVQmy0r6*eAn@4qDnd%BBJ-M7xI+dH)dzeM(|P4;XPE-omJbYbxzV z4H4iEuyL(7eIkfkIQ?J?(hq?Df4z$5nuSygA4E=^(-6W#<#+m%us(ubZij7Qc|?XI zM3$nTq`7MpbFoCRG)nrQ5=fcy2vmCl{{M|z1%T7TX6Vl~iMYR`C@s{G3yI~@XnNdm zPD3R5vr4+r%4vZ3-xFJ007ytcO+yyU%Ul3xM4X+X3IKWDi@%!LpV@y+ZUWCmsnyCDU&63#0L9On# zB;wOB|EFGmrZ;vD{_uw(fFSVbGcK<~2GS!?m49M-3o?+_*YZh0vZc`+pvM)URGFz+ zG@eMZ%B^a)d*mDf2(kUAk2Ef~0F>{(3qW~b3qYAFnalHD^slh~_uG;FcP^YFp&<;0 zt&9$cTAtw!g+M*SBpwc3$sJa;HzaVZdSOfCfAgl6?nPjM|36YL{z-fo^RN-#IkVlc zc!uCJL}3hvP|T9q&PA=$sA=H;$HpPgkfb;RKBTQc zLIomOHz3gfJO5KFkhZ-=jd6O}R;^|L|9>=+6PPaeoL4TJj~9h{kOFy?&6jJ`A+;hQ zstI4^uJh2pgT%#G-=4IdH&}`za~-$?{{JljTgRhFLU4*{M1@4tlAqmm5G((`iC3vXT~4cTyzOe7R&E{&!~Y?ftG;Q!y_ zrP5SOr4iLcl#^B13OY%TQqKQ3@Tptf2}ZDWMlJxJr4nHE)wJyZ&WIY{vNCUt&9tOWSj4`-+sd zPgdP5HqpqJwTAfr|CdAzbW_?c5-DKeeVH|=C1#*|2lk;pBVjDxv+b;yqUjo_O|t7k z84K)S>E59~X~|*qeVPJ-y426cQEpnB6(O0#s*n({_h}n#?wNs#=O#yN!*wYSZptvv zteKuRn$8`cB+BxTYE=QA7DP zj(Y?C|HBRw>!ZlQCcu4%;3Bic;0yRQ+GsV}4<0?=2v*x8VKA_3&aSz_5WR3qZm04_ z^}oC?c=b=ipAq?dV)p9EZM!f3Ok;X-!q2a;)m>n~ES?K;J6X?m%A2iZgY|?wc{*Hd zdmvAB+OiU2D+58sLdjm$DO4$9ouLQ7=+mI0(4vIr-86Ce^1WA2Y}@_NmAxUd^DDh| zV&lyEQmb($KXhBsWsFgV@OIU$h5{c5O zkPDep8XP=AfdBuvBNig#1RMN>0S4cB)UiQ^=N0VKNsJ2_gfJn9rau*{6`q#p;X(#E zP;V}L)(xk?|6f1|<@7&J|Ks#Op(lvoQ$%03Wwn1OETh?VSfh zO`uKLJ!$b4HXY!a>eq!`SzX|ro1ks&#Cjgos*qNje)tX!a%6#t%h!TBIN^s3^7;4#D>sCQAid2Dl%7+ zA0GfDVIdMp2a-Dr{Qq5D`5%yiy4BOK!WUzyfn@+(Q;iJM1)^D$o=yg>mFfp(1?aj^ zeDwi9sD!E?M0&g`o!hE3*#CbM^FPX*EXBblF8;Y+iE|8SjT19#B>gOI0l9BFiU#H& z8}KJ-brafx;W!$#1)t`6k`{<75#6P-8d@}5(&RNfR)lWIr%v|hq80f6vh@EgGI-=G zC56la9||HjALtg6#$Y)#O8THZAm(K+sWeD+kY5HbDcth2RjCM$(U->?9iow@XLBwx z!bL_BYDtQWfd2pM#5Sf%LeXvPkV<=(9n#z!(#Xat(g8_$Br^9j(*PMxp}JL)Y0Yma zTr_N|1LA+z!T?o(Q#pX=JhGV*iIg;%F>V}-w;YjD@tEq7A_N!-NWA4}oS<2}h5JH1 zahCK5WJ!bm|GSRZlIo2!B>*IZS?Es^5JP;!S(2P38PX4-5V#^a%qYdRmB+xwoAi^4(`qn*tVs#i{7xRg=?zZizFkFebF_C7EjqY>5cv*9V4MT(Da{i z;Qt?t_`ewa-}|(~6Uu@L@6gC*8TJmx(?P3o_QA4;uTm{t^PzU#548*H|J7>m@ZdlG z3=aezd+Aqh+j03l4@^(Y9y)w!<@`9vy!A$Nb#9M8F}Y_vSY2u^!*;c~J*Q3{yJdFI z;oG(!x_z;|u@Z*zu)l-9!yTl$<`)(gm+lW_O?vf3x298@j-HpfOt#IxeE5?uivCBM z7yjTZFzbO+13mo7^R9oV=k0zv@Ba@`pjv3T+m9 zR9+=_Ndo`>4x(mGY~jQfuK(9D%ME56a-ej%53(w<1f-#$nU&%ZMQHZhXnJ!*um2bN z|6|^`SHGrqKm4P89(~5u*KON%`4NA5-^5gIuITaLTw}c*w2lYsYp7Z|MF0|1hA+&^);}KUt zj`!K5Z4^`x^GM#q`M+N_c)#5}ngvb(GzoFI<`CoJEvy~jn(CK^nn#yo18ZFCP45d$ zgA)L&p8yE*|KF0#Rx34d{=Z~!c9Ymms)m~c{QtjGEu!-N-`Fd(%1DD(BJ?>{`@N~* zY>kpW=&+HR=QJsU$%WvP4gLb}1NHPBjb=!biq`+V$Gq^rs(e2B#;eESe7_%iAUyId zzo5mw$;pD^6~dj1B@z&Y47*RwCjMVXUZuOYe_!|ae4m$u0LZGRW)Y|cfkB^EaApf# z*p`I)Ehq_l|6T$Adz>mM7zxlKjeG+d;r@_Ectv(7r%6UQrA(WihlBWl>Z+$n0{_=A z%|mu=V=2(r2|CJz#09IsFY94mU0m;beKgWx8*8UpjnSCu#@br5)ee?NVzwuny-ySP z{|PO~B&F8hkgK`Vjm6&QTEcnWd+}nJLI(Am8%vAi=(ci+WMMjW@rUPgDc6XDE-(O9 z`-kw;?Q*wD6K^>h*Lu_YLW(z^x`vJ+!b~9k_sKxugpLr6kHdfEVmCs4R?I%I5v;et zBv5n!eZ$Qc@f(=r$RGsc2y%-UuwQ?R^g)NMknjT=<=(FB0APmj-x<%l;oD=%*2N=* zW%)^fOLK5(4x`pbVxp8`pUhb~p#T3lS^qc57dO+3x3J`gYeQ^oabipL6I&9Zwra7F zPig`GzuwXR24@I~#gT^;f(57laQaU*(tpka|8LWjH5Hkd^f~=k*gM#bg=-E+R=mYl z(%N~&3DKx83JYipO#_3lW|&fHS9+@YSyW*E|B({+G0|ynAj{@Jkv=F=5POZz;v{G0 z*=^EnlqM(~%Wp(pxip$3G-o-JTTG#UWfJE64U4SJ1@cvIG`-y913*UL0Fe3BM4O|m zP?0d25DVJ>xAS`T|04(_z=`2uu|U}WXaBz<{(oHm?|okFeO1Z+AB}lD_Oz>KpqRjW zZiY?!Gx==VKQX@`>oVlDYk$_V?Z8$EXvR;}Tt`~VZ4S1S`Pu#5-?J4LvyFw!fvOR8 z9n7Lt43;W=8ti^K&%U<}c;54$#rA)PepECG2Wu;RL<9cCFtDGOnZDTmue|+#*ToF> z|8*S>kO6Ey{|7*lna?=MNQv+F0mpSH7zD}t^IMd@Pe)4PVkkzKq}v?ZSY0}@yjcb~|L^AVKQaPNz+Es(x%`iTPu-jPitJSvDB~|3BR_ zPtoHLNm3$MsaQokESxy@|0Tgta47_oEdnQKM0PT)jrLADqu~EPF4lgCaX9}kbP!c@ zk^Us=5kZgh{{|C-TR6h`e<}^;AZa=OCz5`IyK?|^*i8<~mkgZtfW#8#|8V|KLM?dz z@B8`uuSf=j3@VpGH~>H_90fW<3XH)AiWU|Qzm zzj8!FF1U3x%Ex~dwAVbW|5dL&;MIQ?{_rP%2t0b@)vt!b$sc(^csTj~+$wif_;7M? zS*IR-`qhOHiZ_Q)+?N{^r!HM8=!kbqT{M56*v^|M0a+BxdXpUT?s?ZP0WhD*@jpKP zHy`iBq4o22c{u*(bUA_lpUwGyLXhGGz-+`>G{tweJcbK7L4~U`WkU{eVlBZEkvcjG z`G3#h{QnOBqi7i~{||oMqhQ&{%l~-s0gw^e{h`CFVY+j#f4hJP+*}A?#2Y0bw&*lo z0I2)|K&JY?&oz|h;01sr4Tf@*TR1v_m!4-i0l?tFx-lSh0$#y_YjlxUJZ8{~Tdn(w zN&tZK|9(n(zmX+?fkr?^e-g_9+0VQ}C!m^x{4miif_*mU*wHAj&=s^omv41mi2ps0 z9LP$T+(8%Fh>i3?c?1)4u)f}Cu5yGP_Nm&R)IL}H+uA?YzFe=@pHP2teP{iq`gr|?^_SH5)o1Is z)o-uAvc6D1U4KpeO#Qz4YQ0^5L;aiUZ?1n!{oCu`RsX*FBlRDx|3v*~>L0BCa{V{z zzg>T<{`>V$*Z-{k`TF12zf}MCv1`V*k6k}@|4j)KK9PBca8nf*pH9BckF#*zcBVIV;>s($k^|W z{lVC0#y>*JEE8`Aj}o#*ZT{FSfwyl3BX1#+{ttzCf~8c+V~E6ecxtycp0+q?qEddjs|8lHFk zO;_&syzAb3<-F%T=ZRNVp#2YBS%tr!ywZf3Ub?d8c{ki~1@?7~9lrvV-p9^gS%<%u zuRzu38~)doi}2RU70?2EUVG&Yp7*Q|Uik*-_mx-P=y^B&>XmPV>(9CJCiwf5E8hfv zzkU;%+;eiX27j;Lti!us-UQ;g?$z8Ex%;*M({cRU~@P8{p99No_FIHH=hZ!u5H3u^t-*yacKFgHlGJ~ zKehRMfYNtw?uB#e$2MQ=c{l&j=2yU#2RCnlw?4Ev0V8?c=B)sqFKtf3-+$Wl;qO0e zPQiHo@6Bmw=jP2B`1`cYSz2xJYfUkOc z6EIa@+XPJA_|PU`=h|mK3{%+?JRD+Y`Qd9|%=bL}IL~|hKR^6<`1{U>0Y^8zC-_+=Yh$JDmR)#y^Q3Ess?}25vC(Ryy$=HULJz0GMA*{EW2cf4&fi zT{zFk+U8<&hNlj8r@q|hDTCDMMedP}_I=G(;|+^#NMRYufkHKIbHJ!FH%iEX5(6Ryw*QAy1*hY4 z1<&da$?bQpWU&9o%!JjaU@JH2=NB znc+VeXr}!nLS+$B$h3GvvM=cWy)r|G4ia%D6KpIdDTsyyk1!148<3yfWo}p( zr#uAP=S0iBUqSG17mm+x05I_XzH}SF=9`U5?tn(pFEz_7oNlZ)+QIVOLHlB}b^rWw ziES1KP05)qw1S0J^8(Dgxf(2kc2V@3sTsKDP)Fh|sgNQoR7FH|iO8?$+F%;bEI6xR ztOEZZ09bMYKxQg1m{|rJA>HbmEdgN0vSK=GNgT+1VO&v0>E_9+jG_F3kAYGgLM?s+ z%S%GJy)_E_KaGbnu!f6llt6?687U=RWr(Oy)wex>k2e5ob_t>`gK7}mxz&8u4X42W zGcl`TTP=^32GNU3YXTmM64_c2m{L-8gP@p~9Q4AGr6njU0?xtw>e*&>U4v}o-3uJo z*Mk;Sj#}v>NBCAN6qn;bhQSsW1@2{69A@WRvs`$X314^fHw*^Efk4n8nG- zoH195%h50RV^vuhI12Rtt7QZn+LsE@(3+w5bO9e*V9OQ^D%;K$+dPLhfG2&?^df8c zceWs{CMO64o;OFKeh2E*l7UlJM2y=@Pz(5fR!9{Kn9_I7g}?I>)p-$?Kz|o%<-*@p z_5y+bCx)ix8%vp($E6L%=YJS1UYC^`0x?#PSfjx;s`|xaSn>_5ajiG1v6Y^RJO5+n z5o9`WVhbm>%P-=cHE9|KqBZjHIXZ>V1EjOPSBB*i7VYmoKy5|PmKCt2A=WW!RDrDR2j4h98xE4~g^ z-5hw;xdEp`>UJmu1N?s*od1O%LcDKS0uVkEHX5krR28ko{#rP~86GOI1bB-=h{$Uh zcy&7WB>(%Pi+Xl-L(Z60juD7>oVLJ6~gW-(&)@)Y7M9|h2P{ug$ z|6xu4BMHEDB&hfT#K`zuHUSAu5a(h5jS_O9J)l8zb|(lK3NDq|EYPb~b|>)v?V-rc zg(P!nlp>CB5~6e7*qVo&$pxv7Ml)<|am+wLx8I1xrd4X~^djf1TXgd^UtG)nrQq=pngFNrV@TB?ku z7?gMfyE$ki*=Cwcqbm4-|6kTQQpvYFO9$!xQy87(X@Ao04B6XuxN$xEO6nXnEr=1r z=l`Y)eGM%ITd~XM|5EV?T#Ky%;Qu=!{U1MP5xZL;jI5{(mNr_A_JdshFGiQDXnPTO zF&w%4U&rj#h>mbb3A5vRIMg2a|LYS#V8KwvX*brO>RO5S+xEc4tk@iit%USjMCv>o zgLX8X0a)QpkR1S|XFpB=;sl^-BmjZ_KMMLEd-C>m%l-5mFZJa~dPI|Q+Yv*s_k7UW zv_DA?!BTqmC)GoRLYqgKv?F{$3v4NGJ7A)nQKr0XO0ZN$rl(gbw;j{Azip4&*yp7c z9aE>(SH#EnXSJ+TJZn2PU6f*l$&{5)X6@v!9b~7%#J9)L?DX%5&)JdHjXi+>=TY_# ziVbjXbnF*Z&(7p^(bD+*AU?>_6I_vQdjIR9!2fsMiWeBPDMK^H zi&HjEdZRx{#|R$cY>T7k8^LOOG$H{U7saGXX+@=5%1j2*8L_zNbx{9jto8}7{{H$a z;UE4~2Lc~{_0{IK-Iu@rmg#*H`z8+^zO-_F{6f$Q%XiQ1@h2wtj0dYr&1EQJH@D~1 z$z!+7?m2wh_CvQXwl`Kng@Able^;gaJfy?je;m%6f9%6wb9FWB?q=xDKbUiOk9+o` zyRWW5caQ81yPM6eyM2?B$Ak4XOnPpQ;XaxH!bt< zwLqZqCJi<#H);G4-_(Mt=w{E-3C{leoaa6DOO2&qbdG21AvYq9|G6wYxE}>1EMBO1 z1jkvh>#3_f@rI>Qs(ma`5zdP+2dw(Wfk0D1h&|bVarsc?ZIBJXFe@2i9AF$T7if)m zqv@pp7a6X6k>R^8-m}q8Tv22i2zw);mZZus#Q*Px2vG78Uh}djpIo>u866&k6s<@o z6_F_=tO2KRbeaR{=gH;&lrW?~0iuL{)RT#b;aU;8uc-2WZSVo!F2L%Xx|6a^5Ou-R z*=TxpIl+c*h|3tFQgFIy+KGc)8cmPb0T{XxFs#-PjR60DoKvMy1_U9>f(f4u0E0Ah z%QJyB%<6DWO$Lw>0gK9kHLmq$70X2#0ATMnqY>Z>}lFX_f!zj~|j4(T}J<)fg=@Fa7O9KAC2L(Ks z{ezYg3#EMIHV^yNgv|b-Eux5E)oxGE5GQz-w2OX$|4%j{FLZ9Nk?w>Ab~LIT<_rA)H5~u%*#AfbjLwE=j{oN&dmMb2%c4TI`2WsV!B|ykOn(y5 zjM*f3V589rN*p+MASw$?IiAAtlljCP_(5e*rMeZ-v7`0{}aWI z_y2!gBCUb!9Wfrk7}%|WYpVI6T_E?VtA{!b)oqE5iS!fYe5#o0C@r{2uo(T>3uYhK z2-e$h5>*)z$vy9eA4>QiF=93=BR!Pz+t`|M9ozS5IX56hxd^TokyCGLh1t~GS|K_0 zw(D)jn(nkhX(2k%$Vpi^xaW}8@C0%A;EF>p^vjgI{jZqqe^CE}>wks(qVdF*vq0Vw zm+k+`+y8g2WT^k;dFPV_fFeYHHo7m*NQr2nx)o_w=Fkz~(D~KGSVKmdFz^y$NgVXp zI7d_>(r5>>s|~9EzbopZUkh%C*f;@V2X;i2BUs*Xq1?v=5O zq51$IoI%Y`;QyPs{ukH(;`(2)u?T;WqA(h@LasXW9br827FK_#rvmH$1!x%Iz7ekf zg)vJ7rkg&B@uUd3(P3j8^9JCM*C~X`kJv05fI0XQQN#6jSD{`7yfsC7sG|%}0^( z{Je6||KEs=?uFBh^+r2bzB_1NY_{&7UoP>QhlAhcOcz?gLaTWJX5L&4mO&0AE3~ne zrA!@OMKCi84$(Q5M{rFg`lumIfe);4(i{CrIz}_%EbIvJI^GeCj97Q73qckI=^%Yq zEAanW+XfUd;8N1@U{fU!O<-scwh{m<2*YB^Y-PmgQUxx-6=iVD-ksXfRkt#L|Ib8_ z3ja98S9i44GuEW6<;q$AMZMR2i)UXX{buFOVk>YyKiNvx&dnkouA7l8kl z;Hzz;3%;psRKYj3O)kn!y1hoZ=~I&%4@e|OCLD!t99msgWcycWx1F8JS8`!CypZ;#SZTa?BUi?A z!#qiNg#IMVi6N0!*i2#~k|Gv=3K&}6)#}~D+xYe*^(e?~>U62M{Sp*jaNy4Kp862y z|48a0-~xOTVuvfzDaxCj@~e_!;r3kS>}Zsuiv>j&!}=c@g}Z57pc9i3T%(4ZenIQ2 zZ*CGpkv!}kzEk6sr%?i8Dy|TCxxBz|hTvlJJ7NsXP86}2x0HJb#dogsT3!I`|CS;D zuNVeVrlqqWnkX+XMpP48v(=EOYycEv00955BfjGOf6IZI{#O?MN-sN4@czG0cvcUw z+4leK`nX~_yX+7L;J98siVk#wVH`)56jm0lbC7x7fgcfq&prK+{r}jICh9X6^yktj z893!HWZSX-UwQxku8SG`|2F6U$1)(Y3X%FAo>jf{OfD1$=l@4IrGUdhG+i7cVJYC4 zy8>2Dp`_9qhS)DXQV5W65%~WXW&K~;KkA(itmqgD1b_oTkxqyMXw-ps1+!&3umV6s zn3((|_#qQ5cfC>vrDSlvf&VXX{GaRpsk=<59vFZ;a*!^^|BH$LUk3qzTJ4=4{Kuc6 zg1}?bZ+ZTEi-=3x9?<>dK= z8(ZBdmHOTN%!MOMOHjNNYADUGo^1~0w$C^?7ENK8;kdpYw4fT*R+XXZ0mWh)+_8<- zr6bGBt+HYn`2S5D*pixkh@@D0Y6Rnbg9BR~H3t8nn4b}!CKUqL)Ieg`oUZT&);Q^n z{_L(@#LC2AvPyveABq4MPjz^eftWTgY{lqOiM4m~srteemI3*d&x~*p3JMh+Cdq*Z zq{mRi8x{s6eNfqi+fQFQANXHAr#!_##3KW>+0)NXFJc&DfdT}ESpmIXo}=Ue-YOT+ zpWSsD8!(uc+=MGQ5K9XU{2^E9JV6=<{{IGDe$m$uBP|He=X9{tZkE>Xi9`mSrUIM! zrN(kGYchmSB0M@InZUGzAP7f_w=nS`RP!;37v}a>yZ{LB|F;4e5W!6-5YYs)e;TQ3 z$fyv!=HO8A7-mVh#_V4Z5Gv08+kyZ8OQZ`!vUX5etS&JD6S-j`-o6_peNdf^+vkmK zk*z?acli;UWn-H`1P?p?7O|-v`2Rhaqk&jtt^n6mO+;f!c&cCte8+`gwO!Vwun5;w zy$nEjrdMF`S(jT1Kj8mw3spZm05STd3B>+C`~M^1|KBHRp38r5`Hv(UbO5TaU~_~I z88$2cV28Qg0{wqkwf_NU(gW~)n!ZhL(~N5MwsruAdRsd%M7`~Lo1P1zzCGaLtUXvr zoc@O?iUKaZrFn$Y|5RWBfe+db1^)k!(5%`I?FESpj{k?=l74UNh8uYPNb7f0| zDFI%!Lj%csq66NpfoB0SLRy2`el+DS+lmr!lqvyG4*ifLGs$5^`bEJf@c(%zK{C8d zd?I}=V=TuC1+@i^>E#v|=!`HqR6H~g#17#)Ch-5&j{cVdYQXx$0y|(<&6X}uQd&lu zo_%@ypG}?g0!Q}$Rlht3ZUO#(%f`x?pfwK8j%ME>+s}43ZOVEB9XW&S4_S*Kyhlkx zojes3b}>QCDcUxXI;gSXKeIK0Bb}fIz8r`pLK1--bR!i<-i{9E7xcv^hWrBH|F1$(NYDCx~j&Kfd9V*s7UH$-=|A@_@=fbhi_`jdCEXK|mv0-xiCWRs8_vJ)56o^E;|r|MzD>|9^Xu@l8YQ06b~*vI8Jt!3F>u0M#%6 zfdBs=KL022fFz4^m9fDu^npGZe52{zHm)*;W74s52mXH-pZ_QLUom*HEoK)?<6I_n zFv&*(j#V#{3jF_Y6Hbg<0A`2Q!9Z7YyWSW+(*Q zMhTx|5TlFG3i;`VW92n8l0-S2V*vdBopXDAEp-n>4ay1B66w_2TFM}~J*%7|7RguK zIL&NR-abfkzLdMZePsJ-(jj@-+Ot1N6A#JTG-*-2t)(rJ+tYmj#h>hNVvdp1bV6n1 zB%u)QsXVJ)AonfmfCF@TfG+3Y9Ps~7L<~uh2xuh2H+l?7qdux!P?AtPryV0>H8gQX zVoQIC{4GMWQnG8Q&Wao%i|SM>_zoFGkGNIZ_U*-=`qCOR4$*5J_d)xx`_wpAxoy^k z!2b^-{^A0FWeu27kxGO *kkAw|@5C{;5avOHnGD~>@;QwX_4Q2Mc|38EWF-pi! zLOqCfc>n)kmf#k+{vV-1AWA}Z3fpFh6a)W%cg`*bhZm7>$butX77;4I?RVBZIlLGv zH6pdiPd6N^9$p0g{~pf&i)cl)fjIw_5c6ep?g(5c>7N^w*Q3t|G%#n8;a}y8?9IX zp%f2BA799BoCv4^K9t0|i9E2zdkZIV{r}OZ|Nm}Gx;dm6ae49H_|7OkoCYW9gGv#M zV_yF=%UKK~Q*w(F2PWa&ccbYMn{oZ`zw%MZx5~f>0e8VDz4zk9upTj-s@qsvYzHMy zeR2SD{{Dr<*5XRg4q7BHl1j3OcPnRX9W7}7VE_MK2vMi~I_$!ax3L&JhrX4MgKM*y zDvn08gt084I?>w@IbKA^Pzi^zmiHD`;Q#OC`ah8b)G~fZ1RSA-1ArU=tVRG3`2Pn( z?Vma^f&+jdxQJ*7Ww}w5_b9k>BUHX zjx8o;Am_B(QTX&q2{>K6^-UQLQN!+kLE#VJ|L@nBpY#6#Bvh8Aw~&r3Ey1CscL(kH z)w9j&hU|=1&Hz;e=l@e0bO_Nb2nh>LZ;;|A(9K}ttAvGe7=9?awq9Fh0d!6yB_O7- zK!`lrTy4WT!pR5M%Djw_e!dHL1I+orz08vON_N0x_V-PZCi%x9i7jVJ>lWfZdf#H}Tx0dz>0qhdEc2XoQ4d$7 z44hwTEEnYC4vBp`l;PC){Ga!EwfCW;XZY*TL*TKeT|N+=4s^5cPs|)Td}#%CSqH84 zMssy;k3TWFXFOP4YA%CZncH*fkBKd;n{Q{<~L9^ zo=c+y=2TuG@bUt{YE?o?3epjZ?_8N*O&m4k5?SN_*Qi`;p&*XL<`{|PC@fiqMs#fm zD+pnVHITvdo*za^>z0nSq zA!X`fvvvRca*6e{1MPCA3$0+G)w}>RZ>|P~ZKnYKfA7kfpcS3~=(~=rpg~uds|@8j zYOb5hk0)JET95f~lufr+dv~26Vy&9)PukB2ae!=+o<^^L%mEX}p)B@U`>q1|j%nL* zZ7)=BpO+T%S773(&F?^FpOY4LauN^51U_Y@1jnpg0~0ZMW6uuOa)8W=4dDNu?qC0# zgdSW&fkl&RFW$l?99&b~5$yuGZ&53Jx>&&Hf8xde-brT!;{QAU`(A&tA7$WB&URJd zkX^q0Xt6xcqH1oGy52^5TIb3MRY@VwP&ong|2rd_Bi5r>6%z^)+PaHVpDjd_OQU4q z77O8y3y=|CU1u{JPI>^}rL{(DGVRrt{9z>UOt`J zSX*nhAh1|s5ubjx8Q1@JzK_rUsSwF?0-(i)P0vgsc2xBMK$QPqzs7_A_%osqxN_;u zPrPQ=)s?B42|u5$1WV1;vyF47)^prRpdB`hmZoND;|!2eBm>+ItBb@`go8w#^Sir3ksZ8TW1u93Wl_Wxf0Aw9%S zvh+|7$u2$KuZ9C5078eYEFv9PJ86Iq?GPHSh^`H$@dW+C-qHI)(-_MAYW=TO^#+8h z=c<7J|C0I-17PG+5#}$y?9ZtG!T+a8cNQaq0{|hoG}>`fk9dm%0OUY8jrz>oIWPzln?T?N zhjWldtatzb^#3;{5yKGh;YWAt3dRvZ8D&3&EOT4lNDp+jaHxjno z@nEUhTJFPK2mb${C8nxN0)hk~EV@X~Z0@e3Q7$FNq50~c%#nm)skQ^|km9x9ZKS~e zk8}h#YLyGthE@;>7LlLC1whc_G6`HJA*3HdAqwB-q8KwY3jF``g8x+lFUbT9j7s3n zoEan7Y0FW8XM^K9k#E6eiHx@_2z02>Ew5`UigJAgluYzi$hbgZ_&WG9p@tV=75a`5Y1lKeRLc5^# zcDvHX}D1o^}Xmb5OuKy?a5#|5x{2#G-XyD$#Gi!Qk<*m7q92N+Ranu9& zcx&$9sW%s`kRGRbMCClM{&K8>c>^$S0Pg4m_y{1wlYHGQ+N@hgD6rY6ymhWkqE_9v;YXi|9&gx|Lj!22Q^dJ6)e>_ zM>7;^L~KQZPA;7H6V}SLaUzUOeIW_lZzc%v|F49=!gYLUF+hBClGcUAH?@Mb%FTUr zkpcHW`M#hEi;V!Q|}S- zqCdB0p2cs-&oEDE8m9-^&>uez{Qs+iJ^$Mwung=X-jD!>E5rsRKf9x^qIOz`>5<&Y zBN`-nQK2pHGyE$olxn(@3Fm0VIa`QP8t;sjvn+7g){B#C?gt~jKRQ)ZJss8NF2=LFypiQ^x= zznBDI(ElGX@V_AYA=1ubNL@Iw;&mF>M(fzaY@@}1z*?w}Lq$3N-$+*uVPo*P#T!^+ z5-=_0|hHA?!h*b5|7FnsP7}6ZTILOa9W7umkCFS3O{C<4TSue3 z0kAOp|98(P2>=%D(RZaG68{@^3DZYSrLxU5cwi$~Z=Y&4lz~%P00!E+MxCm8|%{|=x3BWz0|97`A&<@0|AQ+rgvvHIu#c-{sa$bhA|n+xEHNP3=i?z(%@`_X$D z(BVrf=f^Jut@TE8b#9M8F}Y_vSY2u^1BJ}(Id$^bEwg(L-?shG?ThV=l@O6wEaLAf zh0QM<56(5#+d&JKNRh%;-%#JtBenEtcwX98v($P*_iU+oGg(EqTAf%O3l%LX$3o^n z_?rGCJZKB^Ty4afJJ_F9av74)w(H) zMLh4?cYOABn@r9=o0{~G2kUF;MVjY5=k1T~+I$)e?U5J2&<+gG(8yuB znI*;nizJ?+?lY2%Q>ubjB&zCxLhS$7SpN@5Ls0Qmp^PnERD^*=gcQsOVVyluFjUkqp<%p0a#bNvsp2gV)-C<>{f zU(D8Mq}l3!d^*|iZB)tJnSlFXC zZnn4W4kND96MlXX{C$&?y+wlu7ILNQ$vCWP3%OeEX(87?eRTKcdI-h6Ar$kAsr$19 zLD3d~K0xz~QbJgT;yBRhcL6cB5@O6R{$F7*!pi^S!2kbq?AQ*SfXX*G$!E)j$S0bJ z{v-|fl=&fvt&bjEv^i!?qxw63je-cuF%mCp6U?!I6&I1N&Hdu!ezIkMc zT9AA`%Gv4Noo*RZQZ>@HyAwxV$((X5n)L2XPC^dQbJE5C40JBK zvWzA@s1}aix7a!d33A6aR+o+}FSkk@Q_C>x)4@`^S>`zlVvtTUT#-)k{8D4N;_+h# z1ny}y&JA4<9rXWaLwyGyge*Q=K7Nx~Z5JVwQi@UW7*-x| zEf+;aL^eeQ>U2Tot8ivcjLlpTm22Y^?Wx(9Pkcgrj2RShN-W|+jUPU%-N+^s2*ym* z;p!=7ZfwJGqqsslfrdpEa={-i_#;GSQt&$x4Dp|k6G8v~WyJrH)4A1Lm!6in;GaMo zWq7yj9!iPI1^FRV}2Us}Jtes}#<^)vPJ^^5g~>i?nsUG*QR|9Jgp>c3e3Q2nv`r|O@r|84zC zW8T;k#;zZG+SvHmi^e9$UOIOB*ga#f9t+0S#=c?f&12s-_Pt|2H1-o?9~k?UvELs1 z*w|;rK0o%4-Q$sY-nn*cSAE}siRs#JcfQTkKHT{>Tl+}o+rirJMBk<-CTqXf`R3O? z*7>%t_VLcQ{k7lke4DC$BKkH1Z~Q^$n_v56=i9#8r#j#E*Z#2cZL0R^&bI@#Kk9s& zu6?HSZKn3eoo}J`R3RDZ2Q>m`o7r-f3o&B;;Uc#Tk&;Y?eE0b{k6aE zytS|P=bdl+YoG0Wo2vaq=i7nW=Q`h}Yk%4KHdFh2=i6-UuR7lj*8V#Bb`Zw%51ns* z?F&(N2gC9FoA~P2{#|_CSNq@M>;Aged23(oi=A)#Yya5!HdXtl&bI@#FLl06*Z#Tl zZKn1woo}eq{} z)Agr{uQT-IPSF2<7vxq=%2w89#*#EYYe^HgwP`yDlT?hLIz>229oLAg!P$cr29Ya6 z?|J0=6`BX9#FNs^(~2`%_7p8!*zn2ueuFUMApdW-VX;F5?uIuYaH16T7cB6j0>~n9 z*r+u~SjR$BF+q>?NF9=Z7U=(fP2`BG1BDDwNgto?_0Y2hRf~)A7L+++*oS<2}g(rfz zo%8>o&|t;$|3LqL85^lU63C@fE6)<@p+5=PB0@4a7?c;%H#YQJszQDhoP|M4rYIii z!h8mpi8r>oQ8I9<0uiFwyoyjy>?!iIJD(I_UIG7q&XQ71*%U}nosFQ$t)yb!O2(SG z`kFc2uH1e%6axSM)vcI$1w&&cW8ix67 z8)@&PGh$_`f&agV>a-w$bHU%pj#rN6>0EJ0xnhi_^rX%Oe@lZ@hfvH=@Rw9`@x1F_ zzBQIcwhaX)0Khc|2a2~GMhs;c)wQwM8NADg>;G1!{_j6x8y<01zpe!{JOXAm^Hs>P zE*Q$CQMrMV3w}q@JgI9cxUCTE|1ZQ=?Jz|4vJo^@b!I#s7f|q`Q+%b*AT=ik4K5#Rmo?i&qw}5mn^i zc%)}HV>wme|9{DH#74ok?2zo9*qgVAy!Yb8FyAp)Z8w${+d+v-qB{tN%YhVA4g~D~ z>v;VyR@ps>QW+%YDuW$+#}HL>Ta!X6IO0g+F&sD=SmPA!#0|9geT(h;N-UA1c?17@ zb0#%rFjeHnfZ2UyaSv@8Ap7hAP4c}Nzx#XEJ>u#{1f@;e9&y`P$Q&|Lfx!f@!Y+?` z0A)M>$BJvN2S9Rkl>FQQhpvJD>mBVE2|6r@2}_uSaNp5_TpA?wzKt5DHOb ztx>A$3WE^c;2VYb|Gyh(oeUilH`o6#VZn`D@s>kni^rrf7K&$t03+pyw;YZ4Mow%G zRNo!|{eNu||5xaY)BmMq%=>+KzfU#x`qw$P{#(t zPr}z0{x4-%92+W#j%@RswS@R>OE!frb4b&QSWy(+$W|NvT2)~G|4>Nq9dAWW60WE` zARbZhEmfp}55yZ=-6$Ej1wS1AHwilx?>6vVT5Gh*oRpNFQmUG(3jF`2g!?6HBN@gE z00#I(Y~v7qCh=#Gs^T#T`~fyj2;9^cLNz=5)pz(4XFrzfy#FucHUnEywFi$l_&t7O zc#R$2|5y3_e|KG+UrjRXkTW*fxtOQ}wEu7CJEZ18B+li(I)Z^Lg_K_ol%f2WB*{oP zTf!%R4|&(0qzR_v_Q8ZZV(gOJ_P6~h``a{0wYSCvkBWgQZy&S|e4lmT`)Rf=Y8v8y zPh&zaxn>VJy4;R9P^3-H_Fv~t$)Od!VOtHZsd0};@MwdA#~j3xvT@QI{Yg5;od!!A ztw#I7qvsp2Ev(=D2f+W^QRBSO#S2~4Tq4QZFPlXwwO(ea_5D&nXI-OZ+G0kq0 z3l7g0Q~bB)|OR~Jec`6O51{~fmN z#)6ZEh`EVmp;i~-b3P7;j{{Qdp595P>c;^A|36jQ|G@3m=qBYgcwR2P*fKsxC9~Bw z&zTvre1u>(OV^Ijy@TpKO2ew1MKP2HpHjBdwiV`4h-3IOTSJSJvsxu?1u#@g2>Abo z2UlzsKrt~2^Jx1VX?pVJ!WLAJDBNGlWN(gfhXRqP3*i4JlS|!&KF7H^&YdV#Rgd&3 znF|*8qnqOn{J#_1h(YT@V<{M&;P;7OeZA3KjrIL{zu6R_$yt!iNdXb{OF!!OjEKcBBt#Y9o2f^}h|P>VOk#l*%lG z;VsqBm5*WM4y+pP~a$B zTt1cn{lBXnKxPDrP17kN{2L}np9X-)H34fpd=~W?QKfuucDnmLTbn%;1E)k!Si)jI z>jhY?FtDwQWUYiTMfZasnCHG;fYl}Lmu^Bq_p;8DD}LncPI}(%aZ~w!;9|l7ghMr| zR`_1yU*)bpNejRzw-3^VGUcvqH`Cl+f6}o@ixR2Qw!LS6(z-{>wfW4xeatZ}-`=%v zotE!YajMMP(e)&iHOk8lklA~7Y-@Aj(n>|X17wrxvMM2O2TXiN*H(D@E^PHf!VV&( z^8)?<^l<7qiHQB!H1> zJmkXcjz;JEDX@U^%5K+jj)wG~iD%a@ zcEkFA8*6w6Kx9HXC`L$g?2*DXO^;|720Z$R=F39x0%+Jk>6L6|{gc>n3pVRu@b6WYAive&GcN5ULLVB33M7j;l@< zR&|p7|JYDgHME0wb5ViW8cok+?EhEZ|G#r3i~m2~SUr~n4LZhe6sN;VpU_z@3_|*_ zD2x)gmKNZppC{Y@<}}p7gr`kJ4A%zJI6<;-JwZDXl<45UFVlZPY^#}uP#~2!uZ7#NICpP$yOfot#5(n#ho}TxT z`HytA#< z=OSDblF)m=IOZ}bk%>zrCBUrYh|Q7!03Pf9NOQz=u28<}Z|F2teu!~3;D{4cM5mV| zTn)JN+5!0gX5eEP_t7`I;hS2a8hleLim2SA<#m*sw0xyZe$L>}k1^ws1_J}jE|G$F$f1y~2 zaa6*C!r(Y|EZYzk@$~u%U{u4eh`@kx^Xb9+>*;kDJ2m&BIqp~ zSz3aM^>+vD`PH)-j$|JisZ%%{*VltqJ6N7y-kQ*D4=6r*-(u?=_|3;QR+o+}FPHZ` zI^h2Ufalb5aY4-dbgmBjWm~q6bFCb(`uZnew9)O z5UO6Q7WjWU*8dJbRG$)h5Q3*0>kUv$pyDq!Tla63esW+amt+MsmMk$>=O4Y=ALPFv=OtjG|Gx<8?zyb)QlZ)pf zt5w0J={>j>8kNBRvt0i#(JF{svPo4FsQYd-J&kktFL0{7G~!>tvFhnRhk*YNBIlB~ z|8f1VL>M|PY^RM`v^3=OA8OKf)PAD!f&Xvk{2$=}0d!RNuV4b^{2$K$Ar4I_om~c{ zpjvDS8Av;P4EX1(6#Y!>%PmznB96*9=?yD4?~0*n0eD)}mvYzl>5fTqdnyt80-LC9 zUn_)0-lj#=)Z4DNg?14=t8e?$wxN+SZ1Aeejiw8PsNj)QQaLN=C;Nfz!5Q1^{Yg9Q zT#&bpOxqAk@DkPB3r$|N_EU&O7eL_&O%lMh+)!tcIASOmyRPBugV%?ik;t}sq-5Y0 z)z9VsD_{Qqu8a3*aNiMUCYbtw7R5LcgsjKPiR&{1Da{n zl7`*KRjN+43Uzn&R8{L(4!>E=u?sdfX3en%^uw)p>fj{mFh@+5$Oe1obxr0h8UZ!re^=75B69CLwd z)W?&Lso9UL509-O-|{qWe2q>sw4=T>&G`T0svBb02p|88XVy7u*<5zXK$z_iD`abw zup8|*Zl9eDb~5n(|Ibc-n1+DlRV)&4ZJJ0*KJMalKK`q@UeS6clJTYmk~6aXPt^ap z5P85BsivX@k04W_is|n)OyC|&9{gwQ$w`l_Gn%}OwICtZl<_KaS#FU3&zYe76RJ^! zK`i`^o7FzDbIJ_Co3|)$WZ-M-OZc#fj7imHp$~ar3X?W<~lKvjW4Bh#l z(~Ka*;z`q|VMbNPqwB=7>F*#V2?-?|=X6i8O3rVmyfU0n!9>wYwc^z1A;OS$3W9?Jpp|M|&|A^nS3>OmrP zwJRPqI|kQO*DUH+z2#|~e2xAb4(qGxzzRN^L!VC^O3Q7cO3DRwIGQ6(o$|4>@DWCswztjkkA{MF|#UxTqGC(I6_bWu6R5guNoxZpkF}k^Uk~?=wHaBdK%5JGjB2_MnV4HVcBUQhohSY zgmd8`U8T~WM0OBo%k!1aZMLhu%s2XwxiWWTgi^v0PV%!(-79lz(o$GjF4X^i%ciJG zI+bW0!$8Oxdbs=?MFoa|f?)vk|Js?Og_gZ(G>R+s<0;7FsRiUIYcpnX#v&{3%)85h z`Ud7K$kS*zs~8!<79z7_ScSsh;S+iz^C-5FJg#O+D_uTjTL1$2zof1suo-)0fujl> zRmkkVE0(08UN>}EBFQ*ZJ@2d>=TRmeTx`srAS@4Zhr;BZt~H$M!d>#tQ(?`e1wsBV zCwvMWR){lhW`RkJ$e8m)6kJ#}JwJs5{v7bHNx+{h_JjOiF=YbBB2+m_{G_T-{IHnHwX0pKg21U9^Y z{C`2-M;{X%=UCw8eWa#AK*^=4Xsa<`+8J~PbfbfQ0hs{BS$jGg>P)Engc^%_tI#`R zm0pit-)Tl-4c@n%F1syp4iB3~3&@-S74%ty3x=VHW-c3N90vJ+r_nHKmiLhsL3M-T z6BY6z_K^zFfxn6H>~yJDuNo2{|L@uwo@!)ae$9N)ksHC=k^yh(y(P!q-(|;pWaWwQ z8vRMY5@DJJD&ujg(WGyT_mL{9O-BCH&kfg*uwb%IK9K*X&KzZpVCpWNPKM4wcv3Ho zz}}z`8u5px_}ukocLVCLTP)gj5VBfi|xHAE6)N3zJ|upj07^l8#ew zP3HN`QLg`AtKwYIdb{Z`G=Q}Jo?D}rypzfceezknUWIsErPNN++-3CM0!U$ z<>8ygX|UQ&$2b}dny09}Nf!>Zn{-VA-*okMwAPK(*!Q1~pFdN>06~_YHy^37OXdKulH->7vKt>ObDC@;C zezyH z&OmVH%uzl7O!H@AzVHLQR0B21tMzj$hbZM`6v}n)IP5VMw72k(g@_^ z^}zhO7X%>xMu*KQ$p7ZRszPGH`9MGuN-`oOWR4K^I3Fm)hW8kB?DfKKKU`l~pNz9d zd+M0ty5s|a{C^z#|H=6=hSX0Kj7=bB|KFkvVNN_2qMS7hLzbzPkIl6I&+&g#*V`Dw z$8*$awD8*m?K%@mIR4M^|HQz-@&9ie@QMX#5zliuAfY?cnu_Wv z1Ovrw5XZJ!f>WuW$r6#53OswGT=s;^p3Fem6Oezgt%)wTMUju}!jnxRiPSq#h?oDT z2aMU~Rsu41wUJs`xv|>pHn&2^HMFuKehr#ZrkJ%i@?)5R;hG-66%?c_7G2AyapP;| zx6m-Awfx@)`F~o{0h5b#pZ**k8D-IA(R7r4wDB5?CK0a*LKDdUwg5sM8!1*Hq+$m^ zkc;47G-3JZjY1nI(`@?|nre0c>hA!E{Qu&Zc{F~r+H$d|IZP7|6W6^_LSl+cNSt{A zU6je z6tUClg>b#ytlVC?NKS;P=*mL-ssB(OV}{aP1Gijj(d2$a)=Qnyw@HBg-;c&M9rb07 z2d*fpWy78H6yxoGV(uxu2z!(8Fq$4d9D>?gIdJb}MFQl%3tv>*)wx=lO(cfPfCZu~ zOrhxODhE)>ZSpF1qVbVyoRutlpgcQ@m&2K({3Z^_e>>9uSncxm-*L1eZ~x`(zk+`V zEWnj<4ch`51^NHk;m7|(sxTUdLci#mZX&A3urlxuSdPcjIK^B20+*oB(G6&|wW4a`w^YR!Vg@(s*QW3$ecu-m?Nr^0lk6dAamyhHs{e?72I!^f= zNk=JzO(6ffsxX?P_ZP!fr@MZ!v)d2ri-u^nW@x10)4O4>f4SREmX4H+)=2=N%;j#i zk1z5d*lM$X{Zexy+DfI(rR_bq2L1@h|1&KAkx~+RNqJ~2|HM+%sAGwGN*AbB9?O5M(Q= z-RQ761^NGqGe<2QwG2!x+>s*>p~vc;aeN56$Hz9FIa<5KIE_ygAGpR@$wWs5!^4DW z0NhAeOTQi)1h4)7Ww(pAHH1Rbzd=C;QI0jUm=;Q}^yK4{d5F~q#8j(07KI1*OKxoy z;gyT?zxVFh4EFAafAL?T6nMFP_e zreCej_OT{3E$pIF(3K zi~#6fJ>(zY|8B)rtr8F$ObM~`5FE;6c+US}|GS#R zbZ@p>;p`;8t-(TFyR#h!vU@X;*}T@?fn49&80zlMPDh*|IuoPKSpVZ;mVcIiVM|rT zG#EjPv;2D|73}}7AK1|h1||E~<1M)Ci>ZwT(&fPe8HQvgxm z-s|7H7uG9YYAi0yEfy0OTw7Va7;dzCaPHT|u(yMvZB%bzBh}pdPoD<8k}ea$72#i4 zM*R``3$^LGcjCDA9;n#oUv9s5Pqg#{q&ztRQa+7(KxvauG6?p)4?6dPHZZRL70q<& zg?7tIG9|c1U)M5KCDUTG09`tv%eowwUpU?oGad#mwM_px4D$c1VE8E|KgjQDOr#tU zi*U&|)O5fVBCX`-@X6*RBOBPICm$yn5#9n`9G80~gHJ{zK>ly>{@(}z4HzMFi)NPh z|MLFdy6pdb<5$Mq@4+2D{!0Nni$9BhJ;Wb!eh++&lz)i;4%1pbG8yA!pq7>3@qRN) zY(bGHo4YjSIpxJBVDro#?6`|fApc*>`_1D6>sNWdIpM=8Lj%{E5zs)~P@xo&D{94j z`4-mXa7_>FL=B1Mp5i`We9;_?Zz%B_cp%*9E;?9?P=gW}k(UnuoPh%XM?L>L-v9Rv zV*lSaprv2_zf+~aZ+zi%uZQL0A2@O1RDnAMSGI4q`(OaJ?%sOtbz=Vye2w@2;Z=TD zc0g_R|9o3n^gq{|tAD*YUTYF&w_%Gr%(h~K%>e&9ZE^sJ&3hnbrhH^dalk9>=1lD9 zc10wMbBk(@wTN!8K1jRlbE?Qn*HaYx9CJ z5cH*U(;7d>|BC{SRN@vV0FH*wmH-SzbB(^P1i-9`arxP)gh>&LmSLQn0GM~49?1XS zLVyRS#_{%FjO-RsM&vScMQz$)G*w`cvlNYzZ_sXIIp*!ZcDn-8sEQMtW&3XzLoQ@cu5xcit>$MH6L)ux3F+=eEcltYEcn9QQh91ayy;Kxz5ed$sQ$-suKy9)vq(*jR{!Jg!W@65 zoZ}MJ|2X#3p#Q%)lnx+OTu9Ab3|pP<`s~yNouQG2Pw$4kK9mI2R^BNuRL-&;c%aH0 z=i|SnoFmeJ{C@!bj5osYmMkC%jUuG>2*%x##oMuXJ60@`lm~$+i6c5TDuew0eoSub zy0iRZiK5n2E(t}D%_7&rxct8Y{@fWzaB5W=9i4URzWjF@2qFkqe$qIG009z@j9I@FD-&#RaHG88H%*Lc z^+LGbZkGPYT_J8#FdS^IalQUS$?D@GrMr*73eR_cJS>(imt__2 z%ux$2TL46*e=O^@>p_UsJ=fCwQbSuk(B5;VHJlj!-txlmd#=8aF;FFgw4Vh|kJT{s91x|L;)KKN^2n@KJIUX7bS*z0&Tr;lRcx!v1PETQgAkn zBhSeu0`sLTDe=_MIUnhZ?Ek&{q5ju6#xK8HX$nC7uTLG+|7sNDy0kjm*V-GGd*Ya{ zRA*C-?zt3Uedm{Oe6`cr44d1B!J_DQcSGdZoX&7dQ>n;fffA3`lBSX8Hb1zSym$K8 zW6l2V)+6_W{{Juro9v1^A3Ta+Z*pNp-T)L4oOplaC-FxRzi~ZwOE6_z?kz;`Cz6ka z9V`ow|L=(}c|ObMf2esawj`Uf_sFDqW~dMVW_Jv)y=n&dYO{a6!uc;TbAkN7G+~`9 z@~}DK9F_3Sh5pk32O$BMnj6tVR$_J%1tXOU{1+JxR;-dkz&0pc)2)$+Si~ZUt|@pP zr*ZN%`jdPZk7!UZq+-dYApai{Q==1^{`3z!_j)r*3r4f6R-p_(4|=ceHX3vRi`=Gb zO8V`2x{RgYZk!}+uHW{(E!{9NqWDki`J$_FQf?YPtWTNk0+}{=#3Ll;3WfQVjE!cT z&t)gg7M%03xa1<}GF^Gp=FqH1H>uodHz~EXo0OXPrmMF^pa`SWpM>k(f@Ed{NWoMUile8b z8w zf0yQ+%u{$jU??zV@>fb4gpF^>3oNakijpI-IF^_-$lB0vCl%CZId|G|O(uP)kr zLgMEjA6k~#sC}&j6g=m1QpiDFG{yoDF_5TRqS6`sH z{vTO`6#xzL|9xElYasvC=W%I^<(`h=2; z6&n)W&M;0T__Xceja4E4?}s+U;@=wEN)~oTu2B_Z*jzPH+A>+^mW0fdnls={1HZ~_ zLjnE&!!eDJ3iqr=5~PKJ>)>j;Kp+wxDOj|MsV}LsgEr+BhS2WY7N7M8ED1N{0W;4* zf54K1p*>*C9NeXIXTN03A3WxnL3kp1OXoAFD(cqgJDj6Q zn#R;x3``pfjm9r^ZaienLH>gbEB%&wf7n?Ik1K4yS*#AFrOnct2 z*+%;apPR#FbL(F=_kO7}ol;zZnptuE|91s@-X%N%{>zU7zx?I<_CN5{w;%Y5G2-=1;n7dZI-vq0&i0efh*(kU?GiCK9^D@ z&3o19G9Q@%^8b;z$1&Xq)ciCA3!V;req zLxv3*!9TypYp zum6j=(oNp{aW=wOiWxa@1nD^a0zxHT|KF}l-h(#jXo@e~%Ci3d)4+x*lxP+K!Z(d7 zCitdN0Y$q>OO$9gX+0V3rX%oa7OKH-x_X-}WEzRFPi(0WYV>u5hAWvCuPHdiN3L;} zCj>sid@9pW6F-<-V&@})EPeX_VetQd28fV;NM#OYaw3CbQo-3|R&5su@4_R>N99C@ z`X@4g{Qsoj6b0OD09ZuFf$^3|4t-jqZxM>IYWx4#01!L|e-=(r_-o-T`3A;$6Xji? zP8tRI|0&#++!~%{ql6-q$VkQU`d`F_dh}xi@^StD5oE25A_4M$FYXt%{CNEjXhOw+ z2nm^Z1S%Z==lH+iAHpGUWwN?G4c>tK|6KH3+*?-vh!|RAt9(;eR8J}H5jI9l%;`Us zka1v?p>qoI|4(YOnIV#h_+KWR8ALEH3?r#QxvC!K;J4uL@p$_tv}iJ@CTT;@t6KHmtTf+t=C~mwRCs zj$%m4l$e8Z^BC1^@V;8SEMjpjzm1nyJDtt2xh={q_Pe_wCPBJe*P5F>^_nJ1h-i@M zcP(if5l7}xCGRCwVD8>}XFT%_o_R#D{FYVIO|OF~ikf-Q|3AN(rn>mWu+{0V&yHg- zLn95J-VJ;G%iVSY8j+?ant5zhQ&6J`nu+$E%7hO9!frr3pCJGL{VE>-6!VT?9~I;y znG*3MW?Yf*pUHtaG)lffO(5Lqu(jK5_wVolK+$|r!licNX5|1NkpF)H44RrQoc=37 z!cdKV8JBP26;^}rf@ceCoJ_OrTL?-x{kQ(D~=-`DUEFj^8bsG{7=WQ^{Ak1WTKKgTvR#zSIj-7S8Al={2$X;E2EH`Q=EuI z5FGqOKL2YRA+TVSg)53(qR1~$oiIkE6tGd4=Qu05(OG$J6flPqt@Im!LI3{}z=L8> z-u`D(iNj}j=EVZXlo215dnGo*eAZI@#s2?)F4m*D+Osq8KXHwoU(&&ZSbZoC)>CdG z^QZWaq9LH>VbFl&~TClt)6z*#18 z9PnQgnT;5TaUnhY@%A6y{!@?bKbs)`FLU~zskb=&kN6D$mrf7KhPeb$ujBN;f&Aydj#K7wnYPC1f6T_)@MXWJYZ7Fq(Qi?(F_MZm*FV6pylmd6}EW+;prx)i6a)vIyLsTSaZ|ruP zeWI>oZvApgI? z`~Sv~0So9_tdC+H)%*-q$rl0^;18+1Jjdx=XgrAm1W_Lp?OcnHg&*juY?@)h6p>6L zS{3&H{mUIy0C1w%W0Fgxt#J8q#b||0M&f|GyP?MdLbR z0g|7?mBghgySwRm_)5E3Rfi9lFa0>5x^+uvuyDKIZZ-R1g~#lXjg=d#&2Dom?1x=y zeGq0B!t1t*q9>xaut*tXSC3(DKDWlnBo71``f1aCF8o278da-dBVP~XK!e&&f zAxVKXz&-%Ur8_%S#u072`VXbPAK!X%x1Zn$TBICafqifWm)4@mT8NxEMIb@{|BgVS z!Jox{lYMh_*)tcd|L=J!*!vTEKOO$VfB8`0qYu9DBjN_xH#5m>)%U4*KZ(Iy}JBiA4YCaK& z41!nPxOd=%3;PdSWTqdygoLjBJ@-8R82*)==@(u90uN<7H{xPilF zVIm)Y#%wp~x%Dv2%m(159DD=+|Myt_k0}@{7tV12-U4s{CHZJc8z$w}_-KqYt>C+G zca=3Dl}cU&9*qW8YpRsmszf~{B&Iecl9U<-;7tKW<6XTFuD6?|&%lXg&dcW7JnKIc z7+$!wqPAC|IK%LD2bTW<{i%CK1<9`$yi;g$YYvTStYCft$pg#(c7+odw0YKlDEWVU zYjpWP`0?s}&c9nH2_W@@0nWdR5WjvCn<@7W{Qo}~Q4~l!O z!xq0=o$ifE?N9T}P$6E48tG~`T;HnRRaETb{D*-bEZ?Ye$F=TlLb(vZZ>kk%}H_A$u+p9};!8ig7p zFp;G02;1Ry*Mepg7&9TpA4^o}He5T8heb&^vy zJ{mi50#N-EfP|H~OBO$Jz<) z1}>C%fL&lT733pAxym;jrhIzV=JKC0NhMKporY;N%H=<&w7CZ4|36~Eq&|*Z<}Ezc{AI2EbMhB{2v}d5FsO zf32sGOR71%2Kh+kZQ!DvCSCxTfdzok>wg~jf02>L=0BVNZ2r?ASxk|#J3Cp-|8A83 zyLW#8|M1_eQsD0G&))aI3!PJQjbe_`yZjE3nA+ah?Kb;RJQVFma;&jh%pv+Tn0{5+ zZ-iGy_I3)TbO0wn!f$axIpexrGP)m^*@_cJ&VBjROQwgoO{T4Lmd;nNg?PVg{6r%7Pw|C&IkD17b z;rt(quEMO)2mSxn&ZelTFph_A(ysqN^KAELj z1)f*lnaksw70=c+&ZVW{p6#;3^Do?kS1w6<0V#c9I}tjNYDo53&Fnhi1H3D|7qw>q=&5@bqvsxwn&D~Dail6Nd9pEo6G+R(@|pOfIQ?UnRqnq zT>dX~us0>Ei;lfsC^qj+>Ui}Lx+aU@o!{MVon2qA?m3ts|NBi|cT9>LIhX&#E+deT z*Z=BBgiB#}tIkK?fc(EIR&X$TMC`TstTPct*6@7(C)l<$nrU#4#y?hLSn?dU7vP$1 zYKhq~Su?lB$=B#lGAab~;<&BKucCtde_Wc{0vE$pr@KBwN%5WCepvb0O*gZA{vQ!? zKekNAi?`t*0i;XKji{1PT5tyWhw`6j6_4|OBYmT*AgX>4(Jgw7KCRK0S4qzt<^12+ z;u*gTScj{;q>>J3UBw5_z0qb)!-d z1m~}mN2lW~W;H0oEO|Ag;UyP)gT|Q|L1R{6v8M&MFQ;qS4X@iAfW2TFK=uSQ&|<0 zU?@+<{D`Dm8pL{iW7Ke_&Aq7KH_2Y@a4LkYnz`URw9c>AxH{-FOqDW33{jvN4ps6m+u7#X3Y zS@K6R`mB+U0|5Eso8%>I$d1i@!$32t{~P@KK>SnxzhArh{KxM<@XYr-y0AF6P)x1c zwUyP2;YPdH54%ur5*g+cQruHYp9ZE-JFSSrxcCk4Id+PUo7o$RVT=IRR> z1LaTMN1@ahgLZ}&n3e|AgG2ARXh7VrGL16`UeyBq|H%V`4-u6&00B)hPZe(f;tfE8 zf2v>_fc$@oh1W^f5j1cCKZvZ0puHWE_={f01mCQ6GG$;UR#0@|o|8vl)iY@W}A0g-IrN<(jRMs^5a{P(+ z|D-dxEu1CgKR?_7`9C;NY|6al@Sg<&Qb(jY{Kw%x!9SI-DM0=YjiT;2{AZn7AfbX! zD{xDOz|d_FULdi_H@P)VtQy<5&@edsSO4&zsQ>w(;5zYVavtIa4*w|u=kVV;U>wSA zuyaptxMgF_+!`mKNPiM7jwGTE;lE9g|4&UIDi?L~a7u>o-&K(R*Kz$1A=%L%l8Z_T^BULx za3F1ZP?U6>h58?_SB5Pg|5w$M07hVK-X$%dzJB&ird`sY|4;BvX|W{! zh-{GJc1b(5WFcerG|Kybr?&q$2=Eb!>C9j`o0yB>n!ZG4yFj8T@CY(KYQC*b5>0_k z4#OujcVG!0|5f|rzb@Q*a<`vEaZpl^tRInZ3qJqr(^&s2kxVEQ1L2fqmi52IPWPjx zoHdVnl8>p`j~oM!Mv`xN8Xt|3&fQ@BU!s7UoMX%x<+M}?o3Z{+$~3NC2-n-qx|~z2 z&9nYP;nm|?S@i$FIoaz&&&1O%VJt@t<#HK-X z)ej!06FB~SDm6*lCcYrT*SZL81=I+{|K2o6M@~OKTsAi{6p3(FLDv2XnZ_{c>}Y9t^FWpRnv7wF!S{vLH9Qv2B!N76FW4yy_Esgg%l zV*3z{#T845~nT+ zRL!3U3uzQHHpu_mEnS!JAej5y^=5YiLIhXBR=?Bz?66tY8W|p9u5iXrx4lvSbsi5J zTnf8evqJ=s|A#eyPDQcmPXr8v9uVXMf50=N@ft(lfoLiIvAS|n`0z40T+0rHTsi`3XP~16+e@8j>udIg1`K+mAo`SOQazlKWyMdg_6hp`7-I8DGp%QQ*=8cWBycn^LO5OfjzGTKJJl|z zn|`S0yPd5HyS_sQ3i98GA1sY zV)J}CZMCU zPVI|UK>p8ClK)E`0HifI8`!Q`H6JM(S4xbvq9>C>Bzl zFBh)m!nFf+Agm9>8I|;gc6W9<0;VPdQd3rLS=axraQt6dK#Je_{4b(ntB(d^p`+U6 z3OoRlG5&wfY!(53Vo!}~SvaDKvEPbw3W%j+_NaLF5IX|<|4}ag z8xe(I5dBH?A%@7atyb9UJrVX-wy$+6Y-<(*yQ9#NqY8R}xA+MG`Tt)MNSMIKiyx8s z1thAxsvsttiljd8ysB^*?0~u!{ECG=5ebn0vwZxIDH6lAy=CE(N(?k-p0p%U7T?Qy z{LfU6#Zl>Eg^!a@6&~a!7UnC1{6Cf)q5<=%B4E7XPtk%m{PBjrnr!$Z!G4hccPKzd z;?D{H151fm0vbkIYyr3*y-^rqOFJU75zh(#vz+ix!tx;hpRMFy@RrHGa836R)nnvU zr7^9Nk+N~}HTshXB*HA2waFX))Vx@H6VEJ}3_xZ;PNVt=Tq$Lvq~nwpxYILwN;Sy; zDLIensl{Qm2m*Cf9D#hCoJ&Bw`T$Zya;{)9_#=#!EBtc(@4`te;WgKJlZ_JIaA-KL z|Hbvc5^lluzn*M`vy<(%1`GA=&USo`b+5u}^~qF5_+@ys*tF$>Kam!#oyn0Y;g=Nq z2K)c~fP>VM)#537(xbY!d|bOn*^rpTgyxtl&4hBQyg*^9@1AOC-_`ET$}-y0iEK1j zUKsw~DZS17=TikjY1_k@z5|6T(N0Qc?rtzhp*_I?ihhyUtBfnRyov$ysidgj|6KCw7=eE#&K zx3@MALs4K6{ycM}F*kqYaJb#-tb_G;=E&ts=O11^^5`S?pMI>_-`x^g3P)q`|A#w@ zxQwWUCaqW(jTv)R5(7DeyDZb4g?tR=TnpZ^yFuUUkIxBvnUj#j!gw5 z-*Diid?Z&8_B6^4e>nmkp#Q)0D#;1Pd?2S0vkzR;HHMup;V}4N;XBD)eR z>x$+wD^*c|k(}P@;3C6ZWVkYp8p!_>pl((Cu+eZNi#6sQS$K`c$>CwiMnjK1l5aYj zop&|s`lhS5h3CB~G}6ZE%44i#eqV-hRx)2xdBEvaLHY9-LH;jm{K@hkMKkmO2el{M zjwpRvqc6+**N9L^s1T9|K{-jE+D9MQ79)7p2f&HE9F2y z|8ElaI;B|3$0TuMlLph!wiqqn@&F2*snjyhTXT48PEEGvDA*c~Q)5@@3xWqWla&Rh zHNzVKm0`^&!zfb^lmY$!1)#a9z8#J@d>)V>7okt&0V#N}hAre<9?M5QHVL!J_AO+< zah5^-vkb)kpS{872f7|6gd`ddqC9MUIHVA4BAsZOET&D8vnCj?yOpfc$^aAaWOtLJbmhgAUzrfeaL`c#PiojY&63I!?QdI?WpZBiBWr z=n=@rg^VjM5+MKYjO8E8GA957O{f?UAt4iwK!p>4T{#PstS&n8d7wJe<*$N4{=eiH zjx~*|v3YY2ht29AHml8&8OVQsp#LLFFhXN&uN!*MxG(~sUupN+{cs&l%D&a<-dI_$ zaOnsS6swW0cEiRR2I>WYXmLIl|2E=zUj8Eo&`}<#0YvcfpV!&V1}`=> zi!sGk4EGG6}Uw5P4q#4H@e22FtRGFrjVRXY_}NLV!J>z zE?$a{AcdoL5o*W6z%V2k;O7m4pJXoPPeD z`wu+xq29^kbH$x(yD;CF(#f`tlOSBD*Djo*L2Xq>g`8{)DnQ-iiuO^wgBbpxD1zV< zzZ2~LXDC@C9fDPR0voY)P>9MU-=OX%Qe?a|N0fY74W1FEl$Yj`9fgswdaPn8fmlf4 znl9o|Lk6o5W`X*j&-42K0M{5~lov$-nD9*nbH;i7U(Id;GNAvr2Hem2e;Qa)0YKou z`G1`MSD*a9ZNqYKvHrR1&F%)Q7+eWk{Z5TDOt_8-=l{<}{(sl8_z%!vL<0=CNabi) z491j=6Ss!`)RZ|A){2!HZj?v(A;U+rDj-S1*?`B}DEWp%8LaK@>~y+NaBe2BAY=aT!Dr(MNAtp&l0Xv5 zX6a3kv#nOx>p_vjmF;Vt3bWpnrFZo#m;cq7u7C*v{r?pfA3rnm^Wr>-N5GsR`zn*d zD`488Nu9MET9nt#u=(PjPdQzc@SH&Yzud9?hq48XO(j;jPO@>G@UpZ-A`Ym{Wyb+k ze8P(~%`MYXN|2GFfCXr5I82XRTy9V>45gO_{2>3gs5BZ8f6~H~XO&G1HZdF#<`^5X z@|^_xdSoI?X%5F2<=5~i4MC4&-(VGZ466!||GQHN(8@X$=Qi6=+p@wwGT|+%m@%yf ztC3uqBeG&B;WVveq@r2qSo@_pB&Nlc<$(SFKNiggh6RrQ`OGF4gYxlTeEgT-A4BzG z5GzX{DBl0~fnd)EO0xNlyD^}^D~r#+OY8#NfL(y63On5VVz|-n^}{X%`H&k(dDqRk z^l9LI6(l03gKPI(=T7hm=Vy)<9AFEAH~k^l{~gx<60Na6mDxaL{m=TpGWs9n|GkE( zg5aJDVOg{r^32L&#{q(+_Mq9lWA`r7`M}yB|KAY*f5g;9<;~+|Ak7do3?1!mqtQUN zY1CV6VK(MzVF>;0`IFAK8;h>nWX;hKGuwsy9l!LlEd#3@WsJF+fFk)xW(w&&NyoZJ z8H3=#|KO_r3H%)q30uY%o|lgi2}hV>Q~=NhUz(7@$i$$ zs$;WG{pJ7QcXItt#bktGrp$$W{GZ{Q3bpRT0Xb_Py&@k|v!7$*qcPIC8&jW0ZXbqf82#>UnD7?>@7TAl zH8*?twwQYt%h+Hd$3#~H#9vG1Czbp|{O|po|0j4moAsg1glUQ(^(!Mv9GMeLYb;lc z9Mq}1XRfhM_h!2l7LoWa@_+6NR)f9!_k08VXY9Xw2cP}xkhSvC(GyE^3&rTFwUyPz z{QPukSG#IZJ8M@jC$JoGKVH8ewX1{Ri}_k?UtI1Lm}q3IAtC*@OqYPrJy#OaNohF8lLn}z5}U}%5LE;O z&&IZtG&4l|7y^n+`u}~&;PgJ5+6=BtG6LJ{wL9B!0zz*#wg~Xie1aEg3?m1&E2L3P z3e7JdS;YTjuIrLdCjgCPmFs_+GaWIl2N~sC)rm=S{m+@G|9Rl6ic0-n zbXi@F8URcBdlZ~fW0l3Dr^p6Ui7YyrW`yo#wIE#%!)O*HS*1akT!wMxXDMeGr@~aq zE5jQ*yW79s>9*h9?1Pb6Ve3-r6}*V)<_-BqL^aU=FC_Lqp%y%-l-f$CJ*6c|T){Q& zD(aSn_aki_4Mp)qbWH~i7@dBB{v^~uALaW0T>rm5_5WYw^M3{ih(x@ISnJ>`6n7*Z zXGCz>_pD$h%6o;q{^f343sG7uC8Z3ks2jh5F_$1}2?pBkhV|9;S&EE+{{L$2>}O5s zXPaj-?Ua*{lyQm2l7T^S;T?=_z+(=tOS{`>(9=T6?F9|BB0EpD-I%8?9eG>#G)H}# zt`3mKE3mQTFv$PcLAMQanaVKHF2il(EA3{55ta^n_&7N=*Ak}(PVyKDHeQ2kI(tQO zNJt-D%cpVUYg9vN!w@<24Xz95;O|{Q-*$r$1ov(zFMRMYM=(5suNK;qbQ3(-t;2o*}Q$sYQIx@qdp0 z*CzfS1ZDBGN`#jH4hB^a0FBI(4%lP; zU*$YMZJzZXN>(%J|F1V}T_lqn;-L}+(4YujNwvuJKS5b(B4qv~IuT8Iy~;Za{V!Cv zfdOS@^Xl}Ja@cT|V$IB&Sz5|TWgaanuK*n#uMx-9!Y|v~f z?Iz9R(r(fv1nnkGv(j$5zUk_188_d!4o!6hO_m)~R>pC<#xj}h_`|W-V$sFIr(E6i zz+V2~5Xk?BHKfTw@295^=l@bWv=H-Vgb68ZdpC~xXbQ)u+o9d%{9i@50*rveApgG~ z+5f@?kTytifxsj@GOp`OzCnkC+Yh<^M}ZRob2-)7-QC&gbo=4@OeBk!x&Ft2Zz-s> zSi-yvD^r#=E-NH>u>ia)q|x*$G6z@z{r`=c(k-mgAj3hSmRx$SSz|b0IOuG~HE%)w zzsXYnH^xd8@&KSKl@{k+h6$YJZ^aj))jW-^OzQxQiR`kACd+AmOly~+SpPFP2twwgS{W# z(+hr6pg}$UKK3Oqya6g`fArMJ#ks{|YFa}b@`d@vXm!Y;*!rvQ9eCmOqD1;zp=&40 z)3xmlt&#=>62L#TNNmLH(Y=$7gHfqSoi{wX12jg!X<#L$c3 zM!VM+2LtqW5CT#BL59rGC3?+TONmwvS#qM)Ceuuv$>~30 zUO5{uKJpsm{}qE4$b{qwk42dy!0cBrd5ZV{3;8EOPV$q$K9Y#K?f*ac9Woct!pagS zmF*K@r%o(8occ9o%EmL#)LPiu?Y8@O&TY1#?%hmmG?7DI14AzCR(QygH*$?^P)-^y zB58S?{}+iX!8eacSeE?d8x9PWj|`EsY>kqRQ=Nj0JN4pqD<9*g5cAC|EQ66 z2HdX_){JVc`dwOkR=Z1f97d9cT9$dq@leU#1zOryYk85T!)bSoggEW4``smHuiPVQ zG-xGb?ZaknrFPrhw!2@;&JQor?P}V0mz;Oqy*lNbhsL~tF7+Yo7Uh z5eC}sR+)W0%4N0LzkaE?5ydODxwO3p*TBOC`TxGFVOJCbbQN_md;sJhxK3=~4I2Y< zVA63x+l*r~p^ACST&yATkckaLeiGvo&ABy|A8G)dO}EUv(rMRuAp}TEjm6=lT)oon zwV`wQ(N~^sN1Ti27~_p{s>hF zv&YtfYwBWOVbXdny^NmkcDAZMJE=S~-p*se?$lbbUfX#_KFSN^{|7{(fkTediyR;4 zMQsR=a?KWE9AQEVJI>3&FNKWR)96a8y)8#lg2!<5>WE`{B#41}l`5$aC>!W5Jx5bLqC=5W?T{-0s`Yw~2(QH4mZ z^-I%nGvxT>!bpU09yFUyPt(f*XBpK#%jm+bmF*-dgF^H&2_s>aB*_T${|^i1mVXF0 zt>P#JqeS*VGN^bAE=^E_fK959058_sdBLyP$`0aU4KvThT9E%AIi|E6ktHeZ>VX_6 zNWS5aS6;Big!hwPPFE$tS!UdDNeDIRR5tu9Fe-k5{Qqc#l|IEkYQy<7njR}8`_w&Q z3(r$=Wg%kq3G7A#Jq2(i`3C)hHejySkj#wXwPQl1PVWHu|1o`|A*Fu~m@~o*^S1B; z=r8R8rC269sk|jTXQ9neU_t&rqS%56>XiA0SMc?T&OvAknbATTC9FtM5h=SFU%?-5 z^&aH^A8ZX@`=VrrsaD(fTnWR*CMNV=X)D<)zd1ekmA=Aztb5{#R0D*GoPcRRWn|!l zVKMn+qV=C3|Nm%Uo#;2ji!K*~%fifdzKL~ps75H`VgGEyCn81#3>h_(TC9cq|Nqq^ z=$u-WEwyU6RTZIf1g=;i8%V7lQyyA$&69{AS=ZAzVMh5D{uW|LPOE|~a#c*L!t)t% zk7mFJ!GrHYv&(17)`w%3K)TWw|A<&p+5akYZ{CO`Tubt{K_aWYgFNz zM#&|7(RAYM7D1CHTV^K@F-qwzJKuGGcWE)n`;IYE>y>-Fr<~vQmb!D!L*uw}5{b}4r*%`rxIpeZOuN+! z;d;ASdI5}QYc!KqBLcFPAK!X%x1aC`)sU@Wx%t<9{FuO!_$xp&iXuLCN0F1u>F9>Ls8H;~) zFojCTaB*Pqul@GlO!oi5pBY$F2s*i>6wri%%0)v#S z!x4)YqbU#OKOqqR|2YeRop6y#`7*ko0mdc25pty{>W{J8) zPegBF?*ZP@aocvm_!jz7&GVjK1OETsJ-uM>N8n%lHwg;dJNW$D_8)rYrME6D&oxe* ze)RU%=HZ)RSCrK~bEGjhf8=nu-Ri8viDPGuT)uSv;pHQbK63x*$C~}!EfH(O9zOp6 zx_qpx!r3|(!`@C34%XlF%ah)A^nAL-Jy*^51-jILB8IMe`T_KlTcm=c3?RO?<&4&?tAwPAN} zwp-!s7{6<yL*;UE9=r$n|3S9@OIrc?sav;1279>O zZ?~G2K6%+=B(VKIHT(a2!BkJLJ$OU9AQv$lb98nJZJbQA?OVtgN)Ia*flqmu#?=GzcE}L9qXSNlXU(A>`-$UqKJTpX4Vo z0TA`LAT1v!EBJ?Sh$dkcNRw|k7Rcly8XkDEAmVNeYZT=FpCHy<<0B%%TOY z2=n1N=J+4bs~X}t(!^fMu-8Q7|L)oI9Rd8qf90gWv+sQFjr$I~@7Tip+ZrIyy-odl8u!D4sRJ_>r#myIxW?kb z8y9^h97hCpe@?Kxo}wMir-Bp<&7vnF- zjp?NS^g;e#X8BhfKxEU#B1k^1#*xW;q*3~lAPj1s<)7uBa7T_1C72uJ{~ofIdHIi* z|D@#u?14DL497`q#7-cAHu;Fc*Blxp-*A{uYn=X1sYB@x^8af)ssKP5bjeY_afLS; zy_&Mb6qntNApi!c0)|H5Uc1|9&^kEeHa!tUzik`yRuaRIyjIVtf4Uw!ZeMOuhE~w1(OSYgw6GeMld9AV2<+f zlgUk#S9CQ%yIPhTOdg^8c>}I^U2?Ld!xXsE|fU#~riI=l@1fPNanV9FDhf z*_4?mB~st>e}4lX*rX!97sFPkyFNRWfM#f<;nTZeuMb6lG`ESuBtWy`2CF&eRlie4 zcP{vejVbGVg8u(aPyw35PeZEsrs1mNn?^WQyGaAN+D&>&tag*eS+$#d{`Z-q%QOIj zC`1Cy)HX`3>n#XiK@1d>aZITzLDqEus1XR7sVPc<(Vku9Z?pR(m314(r+|9KkZ|F;tRpE3us z|JWN4C|3wq7SbpM&EYCa7|HAnq3StXJP9V9)1E8{8-Pouo;iQWJDyZ`rt{r_*IBse6H z2qYCpB#eAA@4%Uu0%m2ipyl*q>kv&SpUgF-(mWF>%O~ppMGQ+tx_Av+2)CA~(e#+f zrTJ!{G~dd0vL=tR7G-K{!YoN;z9Dd&jlq-VW96iT9rXV%^ZDOWWtSE7hECsLI*~6l z$axe8xrE&c@67R7B{_@1P&(E<0TAT>{~CfcE1hx1+sky0f7obbyDzllT*!B(q^h-DBf2*PwyOml4%e*@(IkFodI zz1ePsvy=R?7WR7W&UReKqE}&e8PBPO6%kl*8XVB45V#~vIQ+z;1R z)+ghbjnFl@3HJQ%cI)i=dUY3CLH_^!*6;)XiyBN<;mLJ8>e5nzQ4#Xs>SI%_WTouI z^sG?&3Qq$PM|h(o8{Pt^bWgQJak zTJjgjuk8GWQS?{4eTtg%+TF&yOmU74(a0i6-FBnl>=~(T3m?{un{i-%cGf_-0HC4n zfss6`0I^kAGJh&V0YI_;$509W;lmTrTbKZT>633Mb>#n&`5jZnjR910_OiLygc{Ua zL6qPHfEic-7a<5I-6m0Tbypx@9u`V-n!P@?B&~H z?p-WngBmCxLkEHr*OK``E}9G;C+{WoG436F_VxP@JoD1g6OFm$Vt8w9Wp&~9?TcY= zC+V8bm5~YIv<7v)^;zm@;3pl&Q=;%qBUKCEHr->L4#C&39+!^0J2S@Hn@Tn?=M<-kDx z{~R&BC>zTKfUw`_#0X1*lSCD*4c)Pjk7&TGfG1m{=@Fa@07X_n{U$a`0U(h7{~VD+ z(|x={OjrlH)Y6~ChD0D*uN`7Ls$#5Q6g1AFfok^T~{WYY%nyF+*| zTcf1o)Y3yLj4MP$Q?F~85y*FYr`?^6bb|BU&Q{ff{mPO{L;~dhzn?j35wqlp2pl3V zQ8DOcJ&_26SlwIHHyCL5mK@1R&e-aS;R#Q!4L+{EkTFoECn7%zyWR3qh;;mlF`^dqtUcVF)lA=AVTchhF7v5yW)sv33-O=zS z-&AxBfRHX4J&QV8|KGbWfPeUJMk#Rj_OovU@!taRZ?O0yQ`Uv=6Bd7cyGefX5AnZG zw73NWqaQ)b#jw@suFp_aoX&24HauId|Km;su{d}#YNcEPxT1TE@)6BD8h4S`(`csp zKZjn&D?9_Z!;4$Vv4@o}@ocar4ecP5Pez@4b{Ccd=#e8%pxx#2BZ_cz-hfbJ0}8l* z|4eW{nh+zw2s>sd(h)wr8}|B_yKQaZtpFu7WtkR%j%ueX zcnFxu|Nq2)inyNh|JTEA&BcK8|6{BtcB6*=C5rh`6NYpf32(;y|Nj<|1M5Cc{};9Z zaWlxz;nTqB|6wjBIH&(p9`vaHET9GU|9NOug=2Ypxqw3|{KKW)LUfDetmx}XQ>kQH zoaUgX8)w#Zocz|~Gt8&LwDinT`t-lUApaj1>3?tRqyX@VB#lf3e1^mS(TqrfE5<-~`FX;s5-(cd~N|@-HgwD%@uMAE8oeYoGOhQa(=OBbS}S`dXlyQ@_$_Z@66FUl>gfV{r{>2z%7oeVtNJuMGFQ127r110LcGioc|*& zATXYkkXtN!X~2eGKO|{b~@dDxL(7;J%d?7_G*^&pDx({f7xt`6M!r> zQR*cDP5|NrAi+OXSQ`ZS|KwQyIRW69@&qa|chS5R(9`tJ;5#@0pbA26QD(B+Apfss z_diBJpo4OS*!^eszy9t&)c-wnJmG!`3i5&`51saEv)kMXp-P{&LB?k2Xp&?N)ylVU z&=0QZHn!-8so!#IoP3S`B-B9Iz{`KU{8x|VKUn{N@UwaSKL$Jo015mE>#nqWZHS;f z5%yQR;cB;Y6MlELLk56)008L!ze3fyN(RoFsF`2g)Zt3lVph-)MtXrR|3-~SH0b~> z7L#c&Az`-AOj=mj5F>PxkErm7-vsmalzfAB8+Dp%G>N&V^wKS57x|nqnyCKoo(}}@ z5C4^l0oUmeuc9`rcFMlZ5ih3Fid%53*|WYLrTsn!*Uq9$v_wy9@14U z{prxG&HnY7kZe9qE#|mtM9EB!9?rtmI!;Y2dF_$|z+kj04>m^_kl=wm65p4mV~JF! zr|F>;&W7!SA#v%>&TJfOxOyR6Z#V0b*rCm{{zJ*?<6BSe_7hVcIr{P#dBThG59zorNOFVzt}iR=-wds zv=0CuAgow6<9+CEWBz0UFp}-j?Nc=KKx_Jh83;u0Hs%*xO*br2LiD!#%Z+&nfwI$D z$2@JDHBq&|Fv`7fl3XqY72CS^^8u@+N-A2P) z+CeWj8cuy-TYJK9yEQ^hwT)+34Y#7B^C9wo_Xa;2+}DPGRpjs2UbVLWfoHz^<4?{l za9%8yMORL!ac(mbq-AP&p?j_zT_XEb6{NOuEIOR(5e-!gL_+<|x@E;!V@7Qf18?MU z2EkiD`ttRQz_c%3I5~HsEKC~&pL!Mk_oT3S6rg)R*8@NEr(8C?$4IxN8laAyayISt z9-Mwl!vmZ1Dr;J3NAZVx=AlW$^J%xkMG;&7w8u5^IW}&$$UQCtQ8b$PzTBXgqrcr) zcJYzV3-xe{(^tzjhZauF%@<=l zwmRF_+8eOR|5m4a16Ht+@;!aE)7cE0+lL_uxZm9kbG>z~x!KFN#oW7C#s)Q5KmY)1 zyw{TXK?bUf2_)~~^}k1WpGLo1y&Ook(bz@<3XEwI2>pLwa5&hzZ_f?*kMVc!_0P}2 zF7%fgpnE0}ZR_nM_+^d^A)Uq4vDjNGs^JP5outc>2ssz1AByi$Hxu0>t}`sNJo<9` z`GUccQ{{7&5OlI^2}2F24(;<1E!tk zpZe)EN;*zyf%$d7I~)nhh} zSXlr+$p70}|0hJjDxiu%L78L8$A3msO2L6Z$8fBWbeskK|1dHD`TRd}x&bwbYGB&7 zcP@9^GqK5fjnDt{@h|BAh3c(+as3ZzvH0e={J(+qe|(NzZ#I-7 z>;K66CB}dC4ZE!8|IV@hFSV(6$s$&_lMaScHN`JW$fzvUq$ z5LGOFjO7Eyt4Dv03*^{M}Rg7yCZ0g;Ha{_YdTlieIs7~S7~68 zO)yyhKgs^Tw1C+EugH2qHULU*;my$cKiB^S=_i~47iy>exc={UUDkIrZbe4xgoj;YzkmRfkCqp6PwAz{NhvH~^6~MX zRmV(_|K+mye3TCfZ4u*f{$GUILUsv};0iM5%Cm*R(^Jm>n_B)K`~Rj2^l)po=u;t$ zrpHY7|7-96XFLC=0gRd2UX*oj;MIVk&iv+W6x*c*mJ1=@lj+j z^8P>G|0i7w07%3c<#8p_D=UuwdHqB1|4+pejwYK+OPVf0damR0-(3D%@J}ToGa&z; zyU7WF1D%I3kP`qa!M~&UuABg9CIEu`e`dt|y#9AgQKuT%E#|F&o~E~S;^Xy;1jA)zImV=zG(>Dbe`SqU+;9=?{4FO3}k!-S9L6ZHS50QVyW#STE^DNe-zsH9@VOojN!W$0ubCp!RngKT{M-^0P) zAK%jt9`+n~b??x7-nReHGcO%&EY2M-=p@>;mDR@b{Kaq@2LZa+>*OLWsib^**CBz% zL4dFR+It7z^H&8K-wI@GoGRwTt$LF&2wwd&K*gg86_<;n;(Q62(Zz7Cdpa`)!JEDm z^#2!OyN(k8IRQ|5L$QT8JkBZ2`SM!)oB-%sAQl>bcSl74;dg(CkfE3REp~L}VDsikrkQD6yFOK9t@4&(|8>I|QtPV6q3;+xO$oi$? zj5wvH34kE~k6X|FrlbI5Qvt7KM>5aiso{aLrH13)iQ)H_UH2A-zvt=;83Vn2RCcRE`>k8AX9Dw z`TsoE3XkMy%%5;gXGw(*SULMUld^I0HTsiSAQ;L9r{SI3Y=_(ZnP3!IxSkIH6ii7O zb#&Ib5_a3y?$nocK>nZ5B&K__-3n(%g{+0W9_-EF0^mYe2$K2%oN5z8;0kGU1S#I# z+3AR#sr40LB)nM;00#O0YkdAsq$?tQp#loojP+?VJfHuIEmevXy4gzc4vCU9qw22y zPlNo!7UJy<&8?73>>#Cl1RMOAezvS3uePAmMf4GBp9_FX$f8UP6H`hI^Dqn-0H00) zaFPE<#4L>-l(UHu03tCHMWN!x%E0BfHBc;VK{cB0AAdcCZmkqGGNV~;ia zyIYUk5BmSZtp9Q8F9XB!hpc28VkJ&hID*8dZru_~$Pm43x0;oXbxVyg#9(CoKP~-# z=;CDbbb6-eecD(^V0JtPy%a5vF(w}?q;WdCI*K|FPI}tBMx*A1lFQEm@f(-{$b{G? zU+@*^|1Wf{|7C7?tVT)aDLt@23<6%Y57ZzG;60kWM^lD>#)XD>|Nr4&@4h`Zg2N&j zp#R-_{WHh+A9&^^DA6~!P}nBxi{VDQ*AKhX+4g_Zk_m;foCPCP*q{1XHXf;as6-P_O1?>q3q7WC_QG5ufrBc$W~{{?XGWJLnx{|bCjZQJDXpEi*gE(4ZS01Hzn z`nvqoN^XnAZV=)l*EqBKy7>1hM8mH2%f1Jt$8qsPUwv~eXzl)Fm6f6dRXmV#~ z2b9RRC}e9X&{LNsxIpYEjpSB@h~L2YKpLe#$rtdH!a&>ID(@He5KsWprRGMINR+Gs z3^<#RCE<3E{~NsjCnl1P0NL2lGey}NP0!;pn})alMpH@&r{fVtBZL)_jx_&edGbd?<4n#?-$+Gr`mccGk384&-VYB zqjjI2WML?C@b_t*k9Sc)~Rsm84u4E4SuU2| z0ZGze&+l%x&aSU_t2)b||1WU--$X!;{}bl-E8Vi&jJ&OsxI4m#0{Q=#Mc0wZw;>;I z0I-m=T1zP&{mvTzz{9Kg27q|~-!ZZOuNxfG_x@Ra-Ft0g{{wJx?LvW@0au%?8(|+U zV7k_6%#9%QX<%{{|8QlcO=KJ3L$7+dH4h|w@!Udzn*h_35cdE5+1)$G_C4^z(+frI z{=57Ru`jK?vDx+t4Ir*&Vx_KZ&L#2Z;Z*c>SO2e`1qDnvXcXsdG*K1>?E?=hW8!Lp--^0I&hT z20+HVu0nt_y}6U^{GTAuu|JLBCkN^YFp#dxw&acUaE9XYGAB5B5!L_a_+Ny0dWgOdSuLc|WJ+VL z%>Xdl0FWX6_a!msc({}6e<+;g{eQgwuQvPtSpT#B2MSQb0j?;(E0GtK-rku>2Oxv~ zzm4XZ!+#w9ljdOc5rEhKys$3ve>na}GxX}H4mtg&_US(tZe@u79okF)e{72{y>V7t zW-DG@06BK#{%dy|mMTT)WwR`@{N7D{C8sgU%vn_SGM+s zfAUY{Eo7-6OJ(b7m0}nj!1FmU9prxp+5Nn-%`4kAS=r{QR$qlBE0F)E?;kt} z|1pgKxQ5mT&2k&!UDJ1fYr27|9wYI&d>S{tW)1`mgA3c#zpzch)J{&A`K&gO|F0CX zX_4X4WU3ImFI%IemC1MYT$1E_C6W#xfVaX;ekmZqh?Qw41adx^|PUerY%9!WzEm z>MdCoqXZ%%K}w{!=R;99VG2cGR|PUY|MSez#Z#n&6q-=u92j)3@cC4G-6*dNXO8mk zJ_7mgrsj1%*`80f7b=c0eC3p049f__lXBiOSJW2de>d4NmCf9)BSY}X_Vp8TKGZ^B zH&ON=|2H?2P^k~eElk0dE%u&V7W@(|QHreBx6rM8_gz1OuiZIt<{xT68dYdxl0D zKD`_E`ml9E^Fb&t)L=?spw(Wl^jJ|D(j>+CKYR9kIDminuR;`f<-zCPvj4y{A9`qE zes1aXqqn!g2pjY_^mohzG5Rz-uVO~aj#XjTO5l=X!Ppgpam87d=_xO$ zpRT@;F;MF>wXX^- zEYCF-3KJ$cgy>?}+bKqnT+HBFHeXmq{SihGVtUs-{Vb;-_=KfDIriLZfQrBKl%V2? z!l<~ieX|_|_usj9=($&mNjoY&cf7FA)p*hlL+tNg2El>;N47? z|IAST>%ei2|HmGXW}$KXpO_LFbu6(exF5YS=_O?9r;%{vo{ZA++ z9zayHPPJ{a;hOFv+b$U2@_lJKOeM#c>n5y18YMKRdK{6L9e~<902gj$sQ-O!aA49n zf^K7NxaJ9X$hWY{fNLHUA@>~|zc#3Kl~1XZ2soz$N23p!%cRBArSsD0bi5LF+t=>Y zap!MDpTn>Q@GOX&T9M`bzk)C$Fv^H4-mZl@=gPHXqqA$}y71itnu(n| z?I#^O!3!U!Qc~%eqZ0dnpNo-lD$bj<05m4@SPfnkoPK^d|JMd~L}wD04H*baqEBl!kp z6r@3T|DQ#S{DLHBO_}T#Gbg%a$Y^ejlS!6cQkD-N}?f*OUUg$}B<#z6Rv%3L^ zF>{qtl7f=9snjO3DuGnnKoIzFmDCxik_!6&eF6!^A5}yeQ_p;*R3sT(C7r9J*Q821 z$p6u_b$n7%i~+(0s@Cew0J~79`IJP5rIj8l zW#(Aj(|=Bb{r?`$|CjQQ#Gmv3D`FI<7i!M`$Ey#qvIF`5Ag})^x)5$E#1A0faQNoD z{$~kF`>ixNYuFTkYt+S)kEz)gdI0GFtD7g^@-%LIjZU-nrD?AJwV@|EX=qmwNoMz? z1YZ9m9BH>;HHoOD_X{RxftK`aeQ@Y9aZZm$GAjR{j6KC7!L5CUy3L zV*Q_9J#YdbCjizX0Z`Qc-W$9**z;xZFZlSi$Pgx)T;wt$%TGc(L$h$GP2PPd~-k)WK&< zXvCtjimgH5DyCj|4FVhxMKwDz)>;UHSKkEA{M(%WJMjNe=xBCApkh^=kN??GNic#L z5GPnbM@DcRp$7SgCb7uTHmk-x1?YjlsMCD9AMvYhSzpu>KnWgW$nW z?N%>{#RmWjEhYX;D5|9H;sb!EQvg7?{9ON^+CSA1tMrB&Z~vKr?LQgn{~!8BR{zRN zBl1)T5Rh+B4UY6T=l@#l8<-Q1BQ0kQyV7t?_i^pUQ*MnLU!&8keQBEczweLiNS`Um z%YTaLc=?Z)|LU>)w+Zq8Z#JNjLKVVW4*yw!QUh~q#2B84f`--6NgV#GfB5fykpBsaqBoL2SRfMS^2-8U&qTE%#-tjaF^8c;u|0{wP zPjM4jhC>Pa|Lp%0?hwk_2P6_FQrMat{}%+M%3cys;ewy&9-xiBV$7v)CcTXkyo#S! z-A3(m{Ga3h3Ada+_E@vOyY+~$|6e=|evZW;p}Yhlz^Rp(27HWFgq_s^%j)zr5!9H% zR1^`ck9mX@$p2S!{?9R_F?F}U5SB?lyX*k417H}9z>{h%%A&ZHsp)qBK>oiCw-#~% zkgm4Lg+i~N`0*Q<^hDmLj48YUI8v(ho7gNHfIa1K&NgpN)( z0zE#)k`gBe@=tkAc?k=np<|jf z|88IuEc^>Z`0>qoiVXN>o*E=06|vXuPEVP<(meR+jyLf0X$D zRB<7e=kq_Kd8(m1%=LdNGpQa8lCl2Jhx)};jB{DEOUn*x*HLNC)uzi5CYGfJqCi>Q zHFiLuMf=mIp}BMxeQx zYs1~}L>na?r{ak0m@(6(l2J+8D6bH%=nx_wsTKKd@3gz&Ow>s~-|cMGf1nWm`z9pP zoc zx}vYW?V*X0Pocf+8MSw|Jj13L8Tz;9ot)wx*D}onAx%5K?3qkY=32uuXy>RFoSfhp zm9JytFnGhrbI~a3oDI2aU z+Xy;2|EKo(KaX!^$^ZGqNCF1`LJTvGf(OPVN<5OXLaYbdx6m*+i@p9??8&mM$#sYm zxP-NmKUu;$2tN5kr4LfZ*o0=1kN=UF?PPc>g2!)^EN_92|C!QOGw}bvpXFb6I7{usH(>(vqgN5I*v>naZ;ghe zBTRqT+U>Uccg}6LtDWXE`jFQE$ir@hS4t#rV2;u`H-ptWIvuZs-S)LR6{e$a$RPhe z!u$UQDi1N(#m;VjHuBtg|DRV$W`LSP@XOO^#{GXkDh)nrNx|oo2It_ZqJ<2eJ`whB zb-FiJ)+?+aJUn%!-D~&5br|VtH(c#@Zo==*cF5=d)#UuY*FXZmeZkAYecO8{Y|K--3frKxf zJ27{%1SAZC2Y&(V|4(B7Us^!e;IT-qga{n4AP$y%WXgUk`~T6DlF6YzNkkr_{2+8R z1O9&y5HbkLVN&E5x+_FDX1vk#Jk1G!GmrqdvYpta$h?vJ8WLtf=YIvk?#^Zs0*o~w zi@(K4SN?w`O#>GH84&+0`M-aIvnL0rr{{1`2tc670YDA_)*}E2{{KhHvb>R4Cj)UL zehHF4&i{=`R2$!i^M9w5|10AEd-m=N;2-{*Q3~9>Gq>-77oJ|2YZMcdzWfgGJ+8Gk zcDqp>{KP>u(F;Mm#mAxs8N9C+PF&Ib=~r33+UabD&25oq*YECzm;~u=U2AUk)N7ii zL_`yGPTEGqarys;egZkRod3)DztXe-@j{$oivq_2S>n|YuK#DjOl?xZ{{OKg_(vZ` z^IxHQ6b^pWaMP)NIRB4$U)4tgk?2_M;>9M%YO|6t|L_0g_5VcWA;hy7ppyO$gprT% z`v2Bd2Va%ma+sa<|3g11xu2?k4O}??SJ_P*{^#(2J;MK+VE_LV+y4UuMB1P2f42Wi zXTNxi%Z&E_&#?ZFD3Crl!1|x{e|_}-&jPHZ&wM#|z1iJ>jDag*tKX^d4)c{(dwoi4 zvL(sKW*#w}K+H(7oXjgoIrfkG_KrvXP( zPfQ!~bGS0#^ZzJs`JuXGA_4mU=b_UokJ3Cv1m84H8p1b?^QyF)^w<>brlWd=c`BLq zCOwo1-*ol1@YCb5d4M|Q%2Ra~>TnDc73zqv9M5MN$2t9c+~JsJ(PLC()9aVByZ!5( zZu{L)-g7BEL6HAn;xbmr4oGPSVd3>-x_qldwtadYL-`3k2FYoUoXD1d9$bwX-!!zCkAmwa;ZNEs+C6pKSCmWKuniW?9B|EY-`eRT7-n ziY{Rd^8f2X{)wPTqD@Jd<*>PoRgBHVBPTx{#_X)5u_EQgTi8a~!WQlS-Shqc{^7rp zP~er*?^)P?;F%Bg8cTD_#cauiDy9qbjf-J#C)qA)LcZI2ptcyiucAn;ER)g6e-C`W5#7l~gg(P0FWG@ zP$NgaDYS7i&9-l$spbs;_1^#xum61@*zt74TxX z(eCxbE~HNtvl3X+0}TaY1N^BKOV{CwWDEpF=}$*Gh8ZHGnpW$RYZcX%E55XZ=8}wa zSsnNo1c(0_#Q#1Tkpe!f3?JSAESQ7XMC9l2XM8*eIa9@1k!<*QUgKAsI+q#b(P#0hr=L<4_xDP8LuuH zOm(B9QjL^Xq%g(&hYjh{ZvX`O|1Ap#OAJzDHnfC%M4Nu)LS$<+J!RK;89P$lg!f=p z#+`#HPwb^CmrP2}za=@s4&?v4c=OZ%xT`Nbym2aYsI2tTDd~76?6$Ansd2It$p2dg zW^<%T9MmgBFBH;f`gvymKQbbSvqOFo69X9-?Eh28uxcs<|9=5u zsKR%=ThgWx9T+pAHQmyN#kBa3;v-l1&ovfT_}H}rxbQk>N&`|*8O|J~5C0to`TuQO z_+P4KJi8iB81t*$U0x&^2-@AoJS}FY-9AOr7qq*^R&VWYV}8N?Wm;)ad)xix#=Ja7 z`G2zaE?{ycS$SYe)8f(0gQ4keNdse9Fci>qbzP~XDj8MxXw;*gVy)>Ky?Ou}NM&6~ ziK;TIGqa=?HsF2??f$S0#)Da4?O{wC23Q-vuo>2@ZFc?b+IX3E?_i#bd3qNxV8AvQ z8?z_w&A4&mL}bLxoA>5@wJCPam(8MTpskiMO zb>QRHEF$a?QaUcs|6hRNqmi@f#^QiT;!#~w_@BCN zIY@6IdPa0vbsO~m=irNI78}sn2fk@caq&%KQl#BZ{$Pb3lC4)m!4U zQvwl{m<%Bnh*H#zkQM%gI%UL7(7jrw#bM_ejm0%ij{l7X!y+lO8ow#wqt!a{zoe`G zWf64wEj-Q2tVqem;@Y3724qPMAIYfsJT(j?Kthiq*ksQjeB|8_?2fMG(>P(X>=GUb z8b&3zQ;W@}RUuF|gz-?l>5UQ@q!tCq9~S^xfC509y=3_dIb+g;PJ{*5|9O63R#1t> z$YIwD(YmC2v3ul@<%(oayH-ve#7jR;j{kG~zc}*@O3e0uj5WH)UI@Gu(r9`tVf)Ya zUrIT)|G&ic|1mXXBl=Xb&a(Yy`(L>Icjf<=GZ836>k4U1h=TE~b|guAC4}`6yI_dGM?Xcy+a83zG!^K>vS} z_y5N+0Qh&^ML=#_>u47NZc4WHc)ha)%?ESb6rb4g{P{>~B9IN$FM!W!3s@Ni|T zJ-T(JeRHclXzyygw7nPe6YT%*x#EBFO}v^7*L1(iE-vv0a%h}(zA`^)JGE?BkKk>z{fa7|;_mfYoEwA!%J$TELb6XRw z!hy0@UDdu_WrDb}d*qONZF;Nq&_4M8Kc7thqt{fFE8FT8!B>YbabeKkt?^_m{Xn^% zf^eFMJd&T2XK`Flp}=|yp#Q&(G(H^M>2|`!iG5uThr@2a7jI-AE(93y^1m>14GeE) zS^gh@5AY3~|I7Km`+I5?s0`)Uyd6cYLpX{wW#l@Cz_M+ia1GhR8H$S$f5-MM^raH( zfBnY@54CZ#!zwHU@leT6c36v^A94XODuW&n$-oe(|8bnR|EdT$QTqG|ZUL6bNW$BH zEPlFXsjMO|xmKUGma@$M23DFbLTS|cW2Ig;TMaiz)RQOb>9Q8JhHmHQcP-5r{BBLz4_j7bhkga4SDh?27mT? zzrPc zE^%7(h-lMG!Haj#$D9wC^N73ooi{i$h8D&7R_pL{NOZXV2iN~dwuAep9o33u#ptX} z#P;|0`h!upy%3pQSrUL?{{QWr23i(O6j;sZT|1Hj_ zCwr)3kO}(#8zdryLby|Tx0B^$q8G2eOu&ZH6$xGCL#nYEDu>Si$%G9#fOLA^FrL;8 zPeK3xT_mtb!wTCrPh#2#XgtSPyKlP>sP-H-?l~KqtSW&v>DJM9p-c^wyyF63u~h5a zBFv*$Y0-hE@BbI^zx!J6Y`vj-@YsP@;6JAPd;REp4n6SvtHJ8>>0&}hmp8XAg*UrH zNDRLe4)>DirfKOg_sqO)%4>Mvfj{V;EBv>*j`|ZpziQKUkDS8ZYCZ7#uibhI2>IcQ ztIMb6Ku9gXPw*autNgR#4MUsgdXfRDQeG9d;qCG+r>ZL**a7Fh@~nlRNPDcS1({SoK?f@)KJ(N)x;J{I+)Pebc!UQk4eg3A{r5sXTVlk)h&D3q%e z5cdmD`gs5UELy<@s|qYwl`dG7P4g%YPPQA#E|?4Zz0SGq?Ll1=j6nYnT4X)N$ghQ+ zQNOn1jxf&&-kY87_F~th;r&0&-~R*p|Auss%JF~Y*m3-y)|M3h6Pk|Pv z2C6s~htL1f>L0=sT!DSIxkMqecu%95;{S&a)vS_Y`dOMxhU4>p)Y77J&Ql*z&(_oF zMW^Zcf8hUr0>(Nn08R?f){6p&m+H}|DVY9zq$T5*Z-Dt zK(FgBop8KV4%hTWQ`-d+REI~@B%`bXpd#Jh=$F>teXwZ8v4Rs5Wl>heDC3b~k&;jue!0CM(z^ z@11?@$@XY}_woC|{(myh{}b%TkX#|;Nca|a)S=`uppb|0K)7emAfj=Zq>fasRM5^ZcJ;9APTh|4-rhKhOVp{-5}O7(dK?IIe z$Mt{T+&cJ)tv9z?FWz|{)PcQyiYowvW~wcFt`Z>AZLgcT4y;yzdy*JrC;)tCD`q?w z0LF~ZZ(n6q8871hy6+b`I4Y!QwMx>Gari&+8ZAztrk=`gWb?lx&JwT+mg!j&BGRA4 z^+UFBA;bSq?~kUA|G$aP|5PeTk)*&*-efaIFTJjur}b8~BaIzcLH z`Y+D^d<_|UPXFWdKjhLN$*@Jjyw=*LVaP-m?E-N6p9Ma3`a}HxE&a*L7$s}LRTI5Pw>8dk`42*!YO1Ob zK&qiyPcxMNxDNXN>9J&c8t3v~Don!VzqtHYGs=JMfc}3P+y5~FVyoESA1%f;-3FL?z@c4dMUvv$8hjiwh` z-v7t@|D+K^^?yF&h@q!6%7}C{K|c2XG2j3RRd~<}ITEHkh$$Z{q;Y~3wr`Zdp z{{K<-|D`5iSWR{ij)4K) zTnQXEgHx`XCtNq3&C2S9ad${>UEg%|cDjB0gqLnkS~#yr=sNzlmdD~^PX)=5YnG{LQ|3)m3v%*LajKJq) zUE$+@3y|LVss!l&;fU?5|F{Ssk$K?Bte{i~TMKD)3iy0(uRBeO-Pr`~MqDF8@Eja$Fhs*;N0Z*Z(XEUx;BXq|u4U zK6d7n-@@yEy#6O=dT9Oc@G-9cja`39qF8@Q)>$q9W(g1hPZX*(WU;lZ0$||(f1Zlq zT0B<|rM+Q;^!AC@&3N4mK(_!HETqvX1pEB0_TVNIlc-?MjL84v`oA>hU5LOG(r9`q zWcR=E?*GNRS?d2Dm-ausEb+RTC1x-M`8aM)0&swhvpSk3!)s0V%z*#@+2cr&icz~_ zu_HFlB64FE!PK{88?q~#yj~f1e0=Y zG(P|5J6i`2wZ2o#1uFRW`iU3bbLhe6U;Xl6efi|sC!X7da>e0b*zNZ=jt9#t$B%`* zPJbJwR~yH#Ub*n-`tc_ozyIv`cw?PbI>2Bs+T6Mn-s}!X;Q+S7qXabl4QS12rRdY} zyi#leoZ3AX;I27xBb|V75{-j^%(}|)1OxDn7w^9C)O`=Wd>aUSq8I{q`n?<7n^$2! zUt#nu!a(Gga9Gvze}w)YICx(R{^7p`rNE2Ny>J24e;3rBkN?7uou7Y*)c;0%XBZ-A zK8x;Yr@MiLm~>0?x{*zS7|)HQX=Hn327U5gvi=w8|AD{Rf`9n0suXzXnHS!D--E9_ z0t&iPqKu| z->teTfc}30j6zLQIsZ4pR2}o^#NG{B^l6R0u4$@sI`7ysholfl5IG$a zCs3f0GrP6<`>y%7SVfmtQy-)((>t%PfBF-L9(exMcbr;2Rm`;L^5)i7yK_5Khw7RZ zAC17`z*2BXZ3|90!ndpINX8>`rSSfgzCNdY@1%aO)q2A(f&G6pvKetl70AJhx(zf( z4p%(RdpV7gj#Cz(PIDfE&DqiU?jj%OG1NVe0rdZ|vCpVAzuy$ zut%cCL-vTeRam_MG`;9t3kTgB_i9W>-;lxo|18)#L!xzFN|wx?Yu$E(d7>s7T>i&0 zDb=Q>Rv?hliG2~cMuW`qu?oam$}0ae0{vf8@+Qniw-YXo^LrT%>VuS_xRCX5Au#1~ zckk+;yBI^=-`nep69gAxv{$m6H3|BEdOZ6T|7RM03vLo1r9Vkb8F{B1H{-ZjL*iyl ziJ7%p5C4Hh>#0ubu9GXs!f`W>n@x@h90lXqLEHQ(|Ud|JQl` zucU1r;z+*XKvSOo^ZcK<(~*~sX6z$N^==8GDdHbu&kr?N@OnNUAc8KtrL@ierCG7P z5Q9;nMhS@>SOVK?Mz9QW<=)<6oY=EMyIJagexY^k zk4h4#s!IQ@Xf3OVl(?U+x>{rm8ckuasb@SEFmTe&wE?)68)G#%S2E%nXDv56D{Gow zI4Tc6;QwD)GT5OjJKcG%-&LjLV)fJRk{ySU^P)s#-MNWi)%o4iYh=w*`|dj3J*nMw zzq{t_m3u@%K&$m>A2y3CXt&*MyZg27{P1bIV^sU@n)9x^S7)4j2v(fL^xZbjqSm_Y z-J{|Zpujk;T5H@rY9F6h^qsau?%i$ARU1M7-#0d!MtVAdIUtWQ7x7ILynam~jgpSj zZlg}~2H;3EiL*m~60T$N@djW*9FS+_k6TW9(ow+NSr>g9IO^rNdk=BrEs{1+?Iq3F#>x;hdvE*qFgDL zx9uup=_)1Rx~H44R_k-W<+mPt`4&*|=bjN%EUr%TX75fHjMfvcKm77d!L%juxq_+| zL-~&eGwoQb_12#PQvL}}k=WZw)^j6!I4j!D6~ayMs6l!pHg0Yp)9>l@IvGh?k%+=>NI<$0#_LKt#!|F$eqvv#C6%#=dx?#6qOgUl{av zn?F#{|98RWU#|E!i&k*OKd$&Eab&V*+Q+p7i+~xlcW6 z6iZp03Q?kJXgC}}$s{eBMri~3r#$R=`wV!}OnFE+Os3{%LH{3D9p@6M#QjpFvGNqS zo+fG`A1kEsDH)DN#N|=j+vJSux~R2HqA~#x=>Milex<`lOH?SG?77=C97d`0dU253h`BSTywK<7{#csM7?1Ia0`;% z4*LI4GXE#!&_sh*P?T_JD=55r63dSXESmf@Z~i382G%}7Q0)IbaNxUJ@DKl0mjW+c zd-}cyUU}ry@=7t=lRN$1jqXiYBfZ-n+$Ot0uJ`*pVY??5iAIC{5QV|c&V1`eduNz$ zi@A5PiVbRh403p(#@mgAKWITfrUNDKoqg=d_Go|iaXA0)= z@nY?8ct~V&umLg2$(8wwbX07D4%d{0vWmKV3o{t5>A-EfK*U-5 zQfVji;dKkcLgzMq(EsP-)&*pF2EqV|i^AGOpa#)X0)maSdrZV;FoyR_TR zblxd4E+w^b#>zl`7gSx{L0H6usApJ>n1W}JC06YN@ z@D#nOCTn&g4r;<8u zVQ~UYp#PVk(`r+jS-$|^G#piY)2LgZ-K6fdc9ZUH)NWGmSG!5ic)&MZy(MmOW*x9# zu0<#meT`WN>aelh5ZyC28{&I(Zi4Prah$HPkSdLuY`O}W7d}oknV_BK z!8Jp2jSF)ZWo!3ijmoYc6>5~woMHuHB%k=%t9^d%_*@E&>4?Qo?QZs_OZX%D2>$=o zNdKej^HvaTSQ27XEC3CZ*A)eq#2;07xKh2alE0_yaa6+N5cZ!yLL_7!k&nqc6w*HOnqmYFW}XLJ2?x8)FE;>Wa(TziCqQ}^h3hR8R;^mh|L2owtiS@h zAwGbKb!6U?Opk6_p|G5urdJ|f4QTvoz{R^y?~kTi4gmlE{bT#j_DHkG)H)-iVtZ7W zJ&LS^KKZg6j-q_i^nlu!`ag$S?`R$T=)o^K@G}Q?;6Kg3*B}161BV`d{?(<`Q_Ck# z6jOob^5zyCL2xM??j-@1%wFsa zxD`zyGIq>C-6(LI7mRQDzEqA|Z9)%R@x(&P=_w&G#X!_)o&Yp{0x*3#5cvOJHh^+I z)W}78inW`_Ss@BSzTuE%P6vu{x)3&$(I}?_m6Hwx`hOevt$bQu|BJjE-IH-3QJ(V< z-v6_)#QT4CUG@0$b}~W#zf_u%**)C!2E4ePHF$MFLpCDD|3x#|Vk$whd^3&om~xp5+eW@iO=2wR8GEJQlzlu>-VxR+WG!P-3;KUO z(tocWnqAMqEToqKd6ti;P#!k8?r`BCxgZDIU}FX%)9r+db9UY3a462WkISsEX{AC2Vb+8iP|M$n966!gh{{=LmdO);Q&;R1{zl8h{34tq~nRE#@81(;X zssFlw7cu~C~wh4Ys||34szu7MMqe?bo& z4(ZRyYRu-J&A*TzA|aZFRc2}c`v0s&*h$}!UEVr>t39|06$7q?ol(ERiTInH?siF= zvMN%Lk(WuDzf1!9ziXENkm!Yj*@i_lE~Gb+ax+gpIShbbwhoi-$VVou31&lN@(qgl z2sh=BdH+((uB_gbq~o=4(7kc5i79yzeYDAJf%}(0|3}ICKNVk485OZu_@z=r3r>^b zG^u8!NrC?F5i1}0{`eX(awQv5Glyvmm}JhPfmb%`UiL`CXZOS5=<1-W<-9sky0!zY z_eKJbq*OP58T5aEbzSIEEMWRo0|Vq^*qw%J%3rWbqI}EKIQbg=Ni-dOlnpZ*=4Ke? zo%!T1!})(dHK$Jzoo6>gL1zIbJw0afHmRD#>XmI)lB1d23~mP4|1U@OQ$(k@R0>9_ z0#s8vK@+%Wb(~C}j4C(@s7>~fxJ+6!VQd~_v!oe-{=cH)f4U46BBzBkN_Anf@N>p* zWJPpFPeDG;_$9KX8Q^TtU8YKa{_nf$4a>e^lL*&z`LR1De#)e5oP3S`Bn;8Kna=*8 zJG#fqjLOxhi`kR1p?dC@r#zjc1u2sV`u|mY{>NiV$_ToYEQZCENymUbk1=})$pyg6 z$u$H0{}#6Y(S$Ib6?zshye7sY=h-|&qM+1y#GJeeIgl! zXmKHpl8!r|f%pIO{(lLFXCHgAJ=))W{C=?ie_k^m9RD9QJllrj|FLU8;zoeZHTV58 z#{ch(LRbPuLhrC47Wb7t4RlmRpk0NY*BmEnub)Q!5$sCYrmH|SDF#jrr-a6_KR~3z zEgMc6xC&t}O2O}}<8+;Z%>}<>QJu-H1p7bSIR^WjESfDFu3D&wH|7nxH=Dm5LyDh@ z&B7IBqOXL5-GwK@%mfhg|B7rktq%fKsHfD6ne4Xk^uO`b|EG4J-XA57Gjf?%#upQ5 z!SnyGG57z*{_MQ%e$qRy3tq-aiPG7^HYghqq#q|Q|5;LVH7~%*0qHql0fuY(3{UXW zoVVrHxbZdfTgaI?f4iLJKXLx=*D9Zi(|@-^4*%tcbT$n`Qg2mWuk9h4MfD1|zrVNF zAB@87g(wq{CHyyF|38v;B2$IPZ6S@4jysfr{r|@M{}=CO@&Er^e{uj&%4~%^sq_*r zOT}>duL_}2fB*&~_it30R8T2+s^>ZMbb8Tgdiu{<@c&#bI z0FrVLfDazriLnYp+H??;%~>Gdpn!=x%?kjOI)tfU|6jVd>)HWW4v#&ysc6A@H`lpn z-29(UwGrMW@$^Cef2lG-U)nh$f(Y0-0Z2>>#GeP>E5ln)PkH};ISD|Z|9=^#IgE`$ zl?XPHpOevuDUP5McEGl*Km(?>OwAUNS@))!(2tfF?fpZxpqss zcF?(YJyvm?uCb6^ni{uPsYD~%6+TWC<)C(AvSB#4Kf2W)bib-S>h`OdeFXad7h>dy zMxh1?gxBpKTp$C5D>aV~aW&A$Xy}Y4e5YJTJm)A0B~I;B0`&hc# )m1hG$5~>D7 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 lS**~J6GB?F$;=cr!o_1-^36= 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

iKY^y;gYx zIF@!^GS}9v|4>5miJhnR28j`j%xY=BCNC!E?^!IRwdg@_*^r zny}yvK!s?|2j&gHW^4e8^MCj4`??nV!+#Zlzz0sfcoYr_es_QI1t`iy1wa}Es2Bq%?Qx_`vl3C z9fOz=R{@BU1d28L$`W6fZ{RqZAFZmyLmQuu|EO~|sD^g^hcZjg-x%BffcXEvlTyeV z*B#GGlGLlhyT}_ZF0!sZC)R}|tFiH>-3@u60!4z&{Yzag0Y6eBquTc&W$P$b3$<6G6FO}Rd7OjL8G1m=|a z(WKb{XuJdP#7>6u|9)3DlQ~=>v}k&^vRE~g31K)DjxyX3bZ=Jj|FW)=i&6dih2yEN zIR5`~Yv0Sl65zioLg0nZc3hXU3e0=M`PavF|7 z$v3Fyq3Z_DKU{0X@y;635sI_z|NSY4N>hbOB^OT~PS@}!nOub$5k`yKCUwXZb4GAQ z88_Jkm1j`i04!$%5bXayi3q#u>PvQH=98^sbm==Q=_QJUW8*tpBZ0+LZ6mANfdBs! z5EP0PaQt5|*cc3DR>n~)T!U{B@&8ie;>vI-e4VBCIZzf;dg7>j`4i*--yJEGyf+rg z95g+Cxc`q$*b&=;M17Gf!2N$Lq8=F@rfL8Y8G%y?6GPX?M>M%Q>7b)n0`&jaxbpAi zWbk|~GnS9xIm0#2tmRvt!Rg#nlc%(G&u+J&^0tB9n_?lW!I{th#?&-1=``I<0{;IC ztg0~s``EWylFZ}>=8>Fh~^f_g$v`h@g&j7r5vcSO!nr+`gx`2=WZvOG#_W=L@=a@bb z=DGd9;6ox4$e2#&l$Yj{-4sIM_^}3%mDuX|C0V+w(;RwK2f|v2Pe#G`xaUT zYqlBCY_V4JP{Pb7tpor6O$4cOf_WbFWRYkvWNKB-+kXQ06kh4U$H)H?GZ293(U#@# z8AWk2ZQ%d^3X@jlshs{}V~GS_k*xF}+4SHMd|l~3wLBI>+Xql|$vt~O z)c@YqI@sEO_r7iTkNJ1!ffw$EW|S`n#}?)ni>W?^W|SAgt#*G9_8QxfvekOc8((R^ zZ~#F0j`IM@V^aX7R>nI@g0)(Qo_zks3wIs3@1<)nucO7xD=sj;+!q*5HLdZ_q$)z- z%NA6}Do36v)cqk!p9j z|E~fZ<&@$XoXda9DgPY+|Nrf+9ajZFObm{6t3qUVA%mtDPh8kCeHl=+%HgaQVY?Ay zAL{>FBMywP;KM=`4*iOB@2o_&UF%$;=OZKd7^fqndt;yLGA=%qY^T&g41HuVSH7?{ zHfm>6d0kIm?FRb)e@Ocuq1VFuQX?yBF{FunL|Kw>Wzw)&dYa_^{}CoFLV8jhl#E#J z{~zYcQV5-(|Mw%RsW5YMVXFfX=(xb|5ZbXBZ0>l074J6p-20kJG7Cu~9)j=&E=?@D`ZCc60)w@d2qCCZ>&-v29Y|8MR?ExK+r z>&LI@j zVN%%t|MQrz1#M3npGdDki}P&p4hAgAk)Nd9<@{d-II0G6pbQv-_>|h9?EjbK|HtS5 zuC(^8n5DmbWef;>@KrB74#mCi`LJV)^UK8)(Q0+l1y#{5AElvSB|uM{9DQ#oaNIjK z`kpKCad~m{d#<^VHBhCb2OFqZa_d0)w5CF;U4cx*FRT-6|G$L)DffR;_3sh#*$gR) zK64#O`9gd5a<4rT8v_^jc6YnILAWs!tL6N^BJ=bJsUljfgP(|(%c+vhrw%rg1fx?K z30G=v|7J0h!2Z8C7JJQu2M4xmL*yQI%n;aim9)#RVS@^;>H5_!Bm7b#<>2IN^ryqi z%{%}1BaqzVjcwl8ZpOwoZ)(SCT@zRrx_g6A^9Ne3*B?P<51apN{!6;iC?{L&R_a2v zwV1=8W2j1wlKQNA*#G~JNdI4C0l)%)1;F82io1;d|3|Z{)F6uIZ4&I&Q(HlI@u_mu z6yf?_uRXZc^fn0)|GQ68KLv+ot8x0ja+5ep!cmfjL`i`E?@y8or~p9nkkkKTDM>-3 z$;et-jl4@T%ey4N{~wto0NTPeegc^i>86(89+P)+8{GJs`7I>O`20^k|FgS2 z2SAv4s}}hGH8Cix%1bhBg?O8=I%Rak<`;9_DUI}h{51>>G93x9vLfE>{yUIEaFv2| zn(qFe0{(xsuBjbR;l@_n*ve|hVWC^cgxT3`Y6JX#PzAPl`)`A{{~|*twssI@)RC>Z zO3LDM>#|x@xRP8$fqMNRvq7LVbFr}n*K|w5cER|T?@Q%a+;V-nn(>7UN?`7=-uM8} z#vcIs#Lh}5shLKtFBXOu6Jj}atMlA=N$yclaELG zLm$>rSsnz=VdeDWLCI`g-*nBk@MCo}*`eTDw<__Zy4th=sIbv6Q^YzK9UTY?$EVVD z2^$TmoG3M<(kg#U67c^4G+*A?=AG?^>}>O{_E23S_O|8!KlDB<#gvc(VQ!f7M9{$_ zHTMu7ALFPrJ|=ZYC<^C%Osd5MQsA*}sg>i<5?)TG4f_AJJ=4Fh)+9|q#s>flVd4$& zR0X%7D_q)x8vvHm01){9^;n5>{SR*dNYPS%^Nu$F+*0@A0QmoDuK#He#d89X!-XAX z1)Bz@%pGfb0ub>3p{kgO>9ND+zm!-`qq;)=C!7CHOr5<}j`{V@J#5lpUAyP%%+6inPaiH~U;Ma4aAFoHTot}Ao*~a+$#o)tBca1}B0%Bm zRDMOmMni2$v>Fn+HQ4`u!^h!Os72cJIaw$?Qmf65A$Ooj^ZuWJ38iPzvn&g>wGy5RW>|15Y$g*0BRH0}eoj{NFe7{{IoBsfaEt zL=cc~P*H;vY;ngVR?N`j{r_?TfDr$Gi1+_u8$kRU@m?*Xd~)APRC0#B8XK%73tkDw z8QA}OWJvvp^q=ew+MBoD+}*g9L=z+CsEJKnGVO4i1a6ZcR7oAU1@!;_ig*8z5U}V! z%aTx_*-^t+%Yd(P3ILgtuXAZh6Q6z~Tby(T|6tf6K+yH!NBoHd9Kk;(|@Y+Z;kC@DGOe*OAPe5GG4FI_TAZ`a= zbG^>>e?HL${Qq~cVyoD;uq6g5WuRlG=?%YeLM0p~84`*T3LGY(7IWRqLE!&~dH+8q zZ1Hbw3)w24VthMfj}%YZ=7Hjvq6M1Vx90u-2&YsNqz-jSIL^TS|B=JN0&V#TRIE0< z%%-2(?UQt0OS>B^(ApGoo9-Iww~c0`+HJBm2KRIX8yCoZD!mc+o2}AfAwge(PfW_) zFhu@Ag)vqdKD!t82bX(oZGWx#~wtt#edHUwYYEgZjU@4`=&-$hSfe)?ArOyOr(# z2&a@&b@Py#I2ifEK1wrS{~zW3Kgs`y0NDP|-zV{yuSLg3#6~CE|B}{YT?g^MW66dO zm4})-ocW_tk#OK+68M;eW*n0M{J)q;1gE19!azB9LEw(+1t+vvlK298d+e|syghYo zw6fmbD5oaVSgIz6ty)q7NcpG{$aQlU9x^T%-$GK3k4bO-G3mhn$A`>?X@?LB{Yj_> z(ah?Zen0FD!i|-U=@g%iF}1VLto62_+3C5x&ia{+jXbMkaSRODObJRO+Na$O0(vMK zxjo6gj2VvA2RA~w`t1ft_zbjhC0rkLXNWR@|4$6{|MXR?Rh7ll$VC`6v}cpVmkL#K zX^Sv0b>oKqbm^@1^|0T6G90XQHoMbNTQFTRA-JLtnvF9u40yUoC+c|wGm|r+F7k1XW8(=q`K6LrgxrdhzJ^IK! zr-sMJ>J+DwG$QBqZfCQ-br~!}h`}MxP=CS40rY8j-eG8=ds(*|^E+HLNsm!GsvvVlKsKS7L)m z2uc-bu*&Cb#DbYF&?0i_BK_jFoI%s$hU+yVMXKx8F~Dc^YZfLipZ{T6E6rmaZvQ(2 z?SHeJ|8a}+e`1ZQsYlNLA?B6_9gD#Q_oFwI$pu$*MI|4>yCul*$~GwZ1{K_Be9r&D zfRFLnYJI|A3)fsnlmm#f+bSjTC~agML$hX?)V75ne&H}l^TQ&!19hX^;s zL?iL3m_2>8tnz!wy#E*Jeu7btoVAdMd_xflT+xH7@)3<+Jn2udBykK%zCk4qqHEs& zOPOyN1t)v3tSw8-=$fQvl5yLf)NS1G5 zp$yjyS#Mk*CWrQ=v)4*0HHG;9Co}&e<{Jxb*$e?fD-NB_{LlPvhz(6}SSc{2h!T$h z|DQzy4^EA3uZOb}`??5qUr^{0_p$EJgiUd=y$h{AXJe^*ySrUcj6M^qy_BVN5%~Xc zN0@UANiwZ0;`G{6_QE^6-3~j0nVS$qs%5TG2SN^LCpRgff_X@>2;tHA#YJ6FS=*y!{&_42gpclP``=I(T} zaFT=|VP$A9$$i9tr`wowXz$qvv{kh>F(1elj=7fQfl1)`v=iPz;K9~Jt%cl&I=I)h z?4bnbyidB3IpLyZoqR0oBlc26xadTOXH~w5O+w(F^EsT@0RDeMu9m8QO}KFSp9+(3 z`X8tNH6#6R8~FcIA~{Fn-oX6DMINamrhlA%n3y;-;mFs>-@?|YW*ixrPTJj?D$K)6 z6PYh=J?}QFJbK0^c-xM&p}Cyh^)C%_i+8jrnLdX;enLNrN)@rfat33<4@MQhOv8WoFS+ z3ciL>j3(?l{?An!uuNllXv`|E)3p{p{%^BqL}EvEcgOPw#O7 zpi+Seh=gPjf0Uy%9hptKkZ;g0AfDv{Knwi+7?4=2kFix&0WjGA7ZAOPx)Ck_#AHL6 z(@%Wy8`>E9Zi1vvC3JEaG`&pW0>Gl=ddY~*QUD12e=!D!a{Ocw8Q0Az4y}tAD47H$ z>EvEFr!W!OWRCq*fPlK|tAcQsodgSXcbN?CtiT{Uukfm&28;`aD~@&ZAd8_+K1%5r z`2SL#L0jHN%O8a$^E4luL4*&|ls1->=)xADh56-Ug$z!)UKcb-2mt?Ij`V;0FVl9l z%slnr)Ue>X8LpdYNZm|RYUY9eKMUI!?EiK0if=v+9 z0wC(%X15>-!pG+DzWEI7o5$v|j~BY_lG=KvZpH=r|1%W(BgbI4K*ZTa?{#tBT!>vp zB6jIdqP-BFIB(7pX(QkQ#`SpdUOhMlLe4(3*4u(j_ABA~pxdid{W|df=Vl2jdL&=b zvVt3cr&2)K&`=0&J%g^4)c`xSrj!7O|C+J^uIV8*+Xa^lDslh+Go}6~OQ6O8l9*gK zE2x3OOQ!%A__%D|#S0aZS`@`(+K44;S~COs|E;3;pV5s4ZKAqLGM5~cyUub}+87Ug z&sEOqnhRM2#a(Llw9p@AW?+7`$?PiWotaYCkw8;E4MoUkW~%(LS+Ox-+5u#VKqh37 zaAi`*BiBKJ|F630jpfG_7A=}Dx@0WWztoh26QI(c$J-Ee*Owz=Y5Ldtb zSZV;3%jJ$wI=Lq@VMZd;DFiv>8&n=~{m)R8>()Ubs3>Gm4}Os}VIB$ z0yqF!v)lm4V&PD+iP&nS;VYF+G+a7w!R0Y6(bka&XUh(6ilm`Zc_ArcC$-jMw5?h#Zc{!Fq)dX5hOP@KVu%$&&Fj6`PO|8>OV zT>rbl`MI975IOH^M6nVG$AfY z<0DMuq6wJ$e^`uCLc$jEl~}`)39ePx*D5dnhx>m;nvT+jM{Zh(E`9@(oI!8}3`)L1 zzkq~2$Nw82|37~tL;tVGkUhZVe{BA<`F}W@StqTIl5E8+<$pb}|6hs`UXJ=I8D^Zw zY%zY)n-q_8BD1ksgDkEZh!Nobk0M6`VDTl{6I-<K_0yk@;tC z@!JT1U_d^iK2p^|$;2rvFeHYVqfJl$I|cl|)s$W)!%z{HRTSg8m+v3|?qgPS#WwU} z5KnU-Gc2KpGWuRf0N%I%eJ%Kh{}=-Gfxw;nZ-4sT_doaY;l-o#!SPd%-rU)qyB_xX z?QZAvpb=F~Z1>0!;H}n29RU4*J=FoId>$YUlVC}T zR7?#VKD%BF`-989wnkMJ%B`fQKutViw;=4W0f5OimRzmYL!W!v7Vos6UkM;mX{!k} zSA{ND3!gsh%8Pg9zPsS+QWk~h#bcsMsoXgKUy5NOt$gML+>hRH__*>B4J{)jcdK>i zCprE%#KzR2k4*{(O4F-28S)f)oME*(O`#ksNurJ=%SX~taba+5eEcu={|~hGgD1d$ zvk8IcZ@&1t1NXhOv$#AT6yr#*cRQQyt;_we2R1nJGN_S>jCG4EMV|&4p-j?hn^jl4 z-R*F#BRcI2dV3)TLAqO;YukPGnx+sC&>+QYGZ`BJ$94W+t5uN}Xcml1Eii3GA-|ie z_9^!wM7?=Ma z`YVqAN&6qck~aX$c1^QzhEoD^{159h02M?9g#EvN|AVc&w%}j<#}Ggexbwj6XYao6 zxtD{*GW+Wmp>49eJMJ1$M*L`dWVKo!{l~EX_eH~{YgUE0X7RU1#u4K&at=NM~a}fXAcMbky{M~urg{?>j96K?;*i;>GH1U~+5+|h&aHMD$sTTMAi&xq&Y(_c& zKzVEmpiHR)=B_<|^Mz2v|6pE6i+Uph+a$LCA8ze`|Gs|fVZ;2_FWh z7>tnn`^yXms%rGmyg@NiAHLn9?Z?3U=7CtR3vaPl?!lYAH%Ofnme3xL(ePhHGn zNgHbBaK%GUUK@6N(rJ1EAn<>`sFbV|$43kM6OL~7OZs~hX}av8^z5b)`ZUm#iuF}H zh0G!5ax6Q`T7lp)oyH55WmuXjjgebI#zE$#g6*lSVB(Q!1Gv*E9>oz)wSN*P6%nEG{itWzG&&#;ITCBmY>7RGyoP2RNUYM zJ#tDT>}EchtNAB$P3KfD;QucnEF@{KLhL}e!(q4a$y|IgS2IrLN|lx{aaS(j|DPcI zUyjaC&*EH}XP6<_ajj#Vjw|!9p$7_hY8I<-c@1*PZ32X;rDcH^>sx9$(x^T&B_MW~ zMtuHH&QYvYp2u0$JjCZm+X`W@Dqy-R&~0`bxMy=+=47K6%GM z-ClcZ>QW#0|I3s)PUzBuvTO~z$Tu8fzo|7Bk+p?=ydny_;*Zd6pF%KN$e`)Tgqu1{ z(9{9=|GC4JZ7r>~AkvcqCw3~R0cYw7FeS4p*IPzTwT=^lB8NgOpr{-8|5LgDKVXGo zf#8V5NRi8Av4SWHVRV&_Qbd(OsoD3+d`!Jg?*A{%GeTDYK~KajrmfsWJn;WN8_vZN z07R3Sx@R&HLVg&*6A@f7l;E1q(#8dHpE5Cm1;?Wbi$@8p6GTLp3_gL!Je&eg6iWqb zgJ-4_B$F%AB&}!l=GqBZDYZDmn#K-x4z$B+(Z z*4M*+|H*K$(%J0R*hI7mUnB)Bkq`L>mg*F6x*O)QHF-0dz)pe}Ys1M90{s7W3#~g; zA3FdxEWkA-KCO%)-@>c`*K}@}uCFVnG=iMi0cgGh0Q~=TZ2!j=5aC6aX1dbuw;@Xk zRQ!!@@7lDIr9Av<6+7NIkY`Y}($!wL+Us72m3KQK+y9NR|Gyk4Ky6QPwREI|b+zme z1s0~GPiydXZU5DBTTC+^6dk$NnYGDSsmGivyDhz*sD3UA=>M;dwBMw9!omkqvna^H z6`iroz=lO^`l$9F<%jUkOx_#0) zbgvhSVzg7UokVPOV=uzeBA186T8D!y&`D z{C@_@|DW0$B$62g^`ziRsO8j=$JPdWJCEE0{{L6DJ6p+1g8L;)Ro8F7(q60awt9jE z3~VJ7kw|>{#tjid3Oj@L`r4q*p0=bZwM@98yo{A=v)$0~Y+36E{=YpWLxl}a{}D2f zgu%#9M}`Ea|2Q-U1*;2=+>1gdI*$;|Vn9dzzxN-2^S^~Bz<;v{0XYAAV|e~|P)xh= znx6li-+p6-&;LI7W@VEhi)`Y~qBV0VxT`49#F~AcMYRaClEx!)7&N^B!CgfaXGh3T z7JhZd*?9D-3a+=^Wa#v+LW?c5m$l z?)`2LOak{_x_i|@;N1E3SWZ5>%Wbu}*R|})0hnms?z9RIHhq-hoY|riTg&w9GL62y z$Z{uicqn0_9Dq@Y55WKbc#`wK#xb?m_j>KYt)`!-j%+4z2xogetVL*ns0O7Fj6{Bo zX%eR zega(}FpUl`xIh*OS1bV<4L8vn3To3CluVpX8%>(aDI$YcNAwurE1{eM`2QO<5}T9+ z(=WHFB^43>V_xQT3gHH3Cl?E>L*ctqJ1e7qNco7*WX zg5Yk7<#khu^8fa|s|Ek?Uu7Zi!j}XGm7b$NkVu{QL)4>1@~aUb4W$R=SSV*x*=fN~f-z9BLrTaChH!bGR=V~MO1?qA zfJj&*8PzD83i$u)sY5^BV(Z-j%0n$eAYEG9ii%Sc!)g@i`iWP54U;ciqwy5^m=q+# z4=Mx1O2qOl&*0>1^e5pRMA;X^IDzBrb{h(kXCr}lxMY#Y5jOJhW#IoGh{+4cM4(v7tikq@q4gCM@F+>X#MoQ5cT$NqIIR;ISN6uIi$fxkq zRUK79NYWK>Ahl9lWL70pN<*{NfdAiN-TbFm2kluwGq~|Jikok38Om!oY4VR+Ax&M!(DMV4VDB8!Aotcblma#%zCc19oJzJ|3?ca`dh$qI4XBr3U32oqYjeG4t4`S$;J=MYY? z0THgLSkffaKoCZMju!Zwu@oA=}S?Z_{_ln-vbn& zQv1w~()gy)gBag58eMBQX`zUA(~%cwwlvk=q$MKwrfasOz=HxPH4j+io`onBd>fY* zr~C(vj$G@^n&x<1_OVEe9|TuDMKphWD%D8GPM9g47ILSHs@76-F{C$KAoGDMqvLSE z|KDd!o6CPD(TZID!{tAMe#T+Lhy~*}^5g9^g988mm?1;x)RFw)^j|A#oiaAUgCq!y zUIXyrNecYv+Gqhj&fr9G*}jEP&FO#5Pyf3I`2S@|LW;=P01%8wd;s#3hMZ#p< zBzX__|NKEQ0rc?Faxz3THFB4h_iFEwsG3az7&3xTEWD!@lub+~%Z%qwSs9Jb8vp`C z6ka-tT;MC=#G3qcpJnBQ77?X1xBmZ!VlKgK$M(O4Hd1p1+y89;3;H3#BnQQo|DfRi z|FDJD$<&b?h|59p+_8QrB#3F` z*Ud3dvDzO`4Hq2);rd^T$%Q0fHu!tQY9WJW=vEK>|5IH57qfO`156rwEClaFU^v9I zEO~5h$9hNaE3c#-AC5Cn|My-={gkXU)yC(4DapX?f4Ke6>BCJh|Hb)V@8<)nh7u4N zecb-1k$w)h|B=dmsN8}7|7m3Rs!9r@X*N8n?iwcpX?J=5Uu{nlV-w)iIF{l9z`ElU z_&;=bRFY_M^a`$(xoJf{P7#1~xb%hjz&a$9Y9fOq;i;L!73G0t3!jZoI!$-~Pl^2B z$RwbAlmoa6!C`#{O;2r{ncJ!H2C9Z<{f81*<7ehZRykF)PA<(5{=eF49r~A+9x;;3 zJbGVSExe;omrfSTZ$3+wJM-X&BDW}95%jqJhwFa?{nR1U3jF`Gh;$3|G=@@!^?xy>kzPDqWc@E_ zu@>wp=1B~9B2^IcUh0l-)B*qh+;m+xhd-Epsoeitkg)ix3mJQ6%Kg8~>i^CCeY6uq z*`Fo+-vj>t$+Q~X+>IE!{@!A|M%_trWX9ef0cs32TnZSx%b!h=LPlFa%t1G}+nAIs5r69%NC4?X!Q6GUTsRqSwxTS`6cUeEb3;6$6hB%K% zvXH4xdr$&niZ%q_yz7joz0&ODHh=Z|6fAp2ABVbJxvx;+o5jqeJCf8$;0J;5lotg*sS~i zzi!e<&H?3V8#{$)u=Lgm*Z*_$%{ZeHJn6Z& zsQ87C1Sf^dS$cKJ|!36iU%fD zw+%P}cm@)H$M65~G2d1h9YN%WLof0MpmbR%kg6)DJQ9`le_8r}?pL}0&ybmrhUfl2 zHL=vv>kQH8h|m9&dSj?3TCIco;8J=huAY5nt+xd!Ls!D}LATdnk957gQI1SDIM1)s zrFPBLAA73T-fI4_?-Fz)T)j(SZ>PaPfcW1BklN!0Alv{XIhe&ScB&roxX9;!c>F`) z|3B5024G!PVR7|`R10HRNN3j9!+!tCaIn(Z%+Qj(GT|7HX0%kZ$u}@XQNZajVoIJ! z7pbmPaJhiHc7n=Ti=D ze2rQ<+A_{wD=E|j_Wy6AeQmD);rbuJ1o27Y~?kZGeybN&wo{1BgD|Nk!YKlA_Ka<8o^e5yv7|1tNJBkMc@G~@YyzmG+B%n8W$ z3Icjohj;`(aFljxr4IzO1uT7F!85`lwKvHCq+e-tS2qf+m#FH{U!e?uG|B3fcE1f9 z)3C*VquaYSt^H{a`U}~WR4ZNWg{!^pby#_~6K=rAG;v{@8(i~fclnl1fdnrR?uc5C zuH`d0`5OI6K8#i**ljwA2@*`21oEujE1}|rg8u&lcaU&}^I$m-_VnR~=fNgPk5uey zLadI7z*uNRVpGLys`JZ`oO6k`^G*g^)?m+M+89~Vd+ zK|}`@nJLjVZT^?v#g6U7Gfht>&Fbz9{QrONZYRPt;_Q4Pi^-VOhCsOD60fO59>ySU zS=g3)cL&U^z`@9>GdF+GT`oXXfTN5AV4Rdy=S2SB{?;G1_FaU3HT3V5BhP&ZoTT~f zpLudV2ntKcTj^YH!*MFFe)9*u*+5K;Z`@bzh{)TS#8x~R{>!O1=MwQUx8SNssaZsT_3CyXXgrpWH0M9@I z@c8Hd%>BQWX*ipnmihdjBxGSoZ^ZHyl2cM+Xj@RqedY6i%4q-y_Wz$@g5d^$+yGFD z7QY!7TN~I2BqH3y_1WYT`G&*f;Rb*{I~Mr=PmE`fK;ZmeN?!Hninw*yo4XsgwEfz; zEVN{q(zyKJ|HS>jl~GD`OUbmx{l5*}B#aZJpR5*y#2PkC;2KT;l8-6u=Qz0WHK%wj zv;X&h2gm8 zpNRj{vM)d4rR2o)WTPnk%knKOZ>vdS^_i)TO+#BE@N)Qn2EzYY`hR?kD*vM@0Flpy zaJ}2xn4z|~-Mv9r`}S^WiZDfA+_29LKoeM{@dC;*eLQ+8Lj%yL|9|V5miVX0zu()q z-G-vLpFF#`IKNa_4c>)ttKA=jJs@cm+Hy!Wi&;yb2AHerh-KQ!6y0-Wt}i(X99&g# z%Z_#^u1@=|xsWwb3qrTqC^V2p7#DU~D<77s+Ac=3V-<~LU8k!m!iDS1l@G1fYri=@ z|Ko6LU(^Y(NC{Buu|N2Ux7XlMkN14);<5Q)u`u~{bYY>m6FppXd7P%QBe}NdI0?jc z@0deYa+R6QGbgDWMax>K{r%CH|KHi#_s&}LXR{~&!qc~}9k}o9Z(2M)Ur+xw>H+M4giGn3 zym#uzV{3!Gok#A0{r~?G1&HBa)YgM5Dga!^)`#PTCllbr@SxB@u;BcE&i`*r{{O+h zn*=@_B+ubLyHwC*q{SnaQWc9LB533znmefkZ?-|nH=LN|@EIT@{A2 zv3mddK|3#rv?lrE=|EBn-EPy%xYqw@w}<2L}$-^ft^^Iy6C=ZF#> zgr5o#1mqhIp5+8Ui&qLb@t8*vYaaC^A5+*DMqW;X6C~Tdg}zi)0${84z;BB+6TOUP zR$NOMjGghIRfwg)9Y46^#|(7*i2Yc}@(};~Z;071a{V9I|49n*tHM}qOk0iocic7jyk|NlPv_#Z(DCXV46b@b(9)3Bt-$6e?T*Y|qu!L75~?XWYLiDbTu!zBwr z9`_4-c!2qz`Cr+90v1TrU1|5* zgKz^<16OfF?!5dD9bWs8qmkNSR}!%djc6TQj4r=u8Lx3Y{=5y@?O7NdUKINwmeZJdp$-}b#N zi^imI)ZY$jaJm(xVj|Iyv@b5nt>Tmc`u|l9YDFG_t383M-2@-n=$Eg+T7)*?N*#Bg zvbnYC`II~Q3298>m0CNS-MoSS?;Z;Hx{x4UJ>eY0H|KiYo#v))poMZr?@73#SslH{ zJIxpPe`(17ZXLw+|4JY8_CIg`HDmh^&i_03p@RRBp&taaS)G1+f%bLMZW~>nw7Z5A zq1`py2<@)nNN9IS7c{u1TSc}D#BzW~6pwTGpTqyn5C7j2_y6p)TJTTtf4_e9_UA(z zz3)9O+UOnQHhMc(!=C7?#clKsn;XtZB@y9HL_7US#5xk{mhgnd>rEFAbG2=)N6S*s z{T~AV`>-Vc&oBg>;b*s|pAjn}J?&L6#O$&2PA0A75)Vz7YlZ`jVIr5%ybMrex~0Kdyo>pvN4^#g)ydf_L;Tb798hzZm+X`W@97I`d>O#kIR$Gmwo8)O?B>;BG_UWDZ6K@c&10{lBztfpjY=^3sa{uKy2nk@6Cb&9DDI zcrQKwukJixW;xW%!b#8WoZ(Op;*}OCwxT9xv-D&#I>Q0<|3~48aQ`pv|J5LCXm5A7 zD}1%-cxokc`K9jo%LM-a=*pBgrWa^e+H2#lwTA2D{=b&2G{2W784n5rHG{=W|s^i)3{eV8&*4$P3A#HMU* z)nl`24Dj9Dt#?D6^h<5%POHetHMEhR1*K-d;sUPeD$;hr_|^<*J_$4&Zk~Ag1m;wl zqVYNYSLaxVhG+eUvK^n;8Tb58k^jGc|AVc&w%}j<#}Ggexbwj6XP~6v^&I2fqPXUzArh#Ou zwfI)B|6hIj@VF2q6&4z_UDXUrwBih5$rXKHK8DsKyax2%GOdO}_gr%!YtTe0d_Xs4 zD19NdIxg&7I}p6na{90f1}`>Csg^-I<%#$eT(=d8EYt*ItT((S;GA&#%VEvzW&26joP+KTnDZ{atH<-e> zK$(W90VGew(Ihp_G)ccuJ|_v2ld?O2c0AT#EHyC!5~xcW&2>=n4Jx|Pr0Z}_5(W)` z%b|6Kcj5fcpT-EAHuy`%DewP9qMsN$Uc4OTfE+(Mzc_`&g@#&k zt=7kV{wwVlFGV>Z0LtQepO4ug6!w1~c>d;#7Z2R`(hkh)XfY^W?{+rZTbH44A_UPA z0tI0HS}p+ayn8=Tw4mRZ53B?5RudgXAOgCy4XH-wcFhe*E*uocF@}kF$mJ# z+FaZ2tJk!z=`wyZ89NpK1OD%?VP6dH{}I!f$wF{N`6(7Al5bQj(7SSNb*;Cy6AnoG zB{^LZ*!C<@zJ(VF*L0?gBA-M6Mc48f-1wSBe5o&$*Z<>Sv}UzaV8kE*aO$p+iKpFN zbehd4oc&7OBfH;Sk_L|C3T;+IR9gsPJX|@rijb*-o7)Qt_#EJLK_~{jBB>ycBNl|g zUlkeXKrR;KxiM=a1|`s-N(LDN8~~Vs06>=dpMCoefd6l}{(NCZAOQaVg`xi+u>X&Y zT_Z+}?h&JsiecT=sI>q8hQ#zDo`Cy&0k@wJEI8xb!GbeL?m0E$r1NF>w0&RpOzbEP zGijcN2PT2j0SW@A7vnu}%MEbPx7{aA_}1l|xDOwm6F?>cxbx*;l9Oyb)^{+`@nLRw z8QL9_fZliut#`XZ5BZ5A+e>R(Q6@!_ z1~iInV;Tefe+bdSMLz$FB%n~n$$>RJSS*^~FSd6t_u4a2jD3;M|MJi;@c)~*|4%F< zBlX@8$5jaOFwgV99U8b0c~;1v>1_qsI;#2oe>ndq;(O{FdgNveVzjk^lP%@4C?48-%kF z4-Wf%IPx}bTi2hBC3Cbtitp6K@Jw&cUFzmRzu^BLYj?J+yM@@eC-ahaxlA00K#bxD znJjto4TmYq<^PF?RTH}Q5Db_9m(>11n2gw+jOhw_jn>_0iA^ja;2OLCA%=(vkNlaH ze8V9#+5K<4`=6oz7xV!AG~jtkMmi@us7mgW=Dy#IEen{RYI|UmJ!p5ilZFBuMH>KW zQWFh^$SA|qv?5zEEk2i>rG?e(H{-6}GrRHX1njQFJn62M^i+8oErjR5{$Gp`GAU(H z2|~yOQ6A@;W@e&kTNfU7&ya7*xn{A2oeR%-&|@{-WBHvB67c_VC7KBn=P*93bG$*X zwEOKrxbb8-SnY+Yz3z4R-R*?jZ@L-%rn%Nc@;}yy$t+gv5CVtr6pGcj!iHB5&b_t8QFE5 z|IhjVi7>3a#n0ux-bgd>|0&M@nQjD>m<%KBv(tyU{f~u!hn{P_tX7XbQ&#(*fpGUY z|7R*zyoUtR?ADmZcY0aE`9GZhlTZt;|2w8h&*Lf&HTHl${4ZZ=-+nya1FF>d zzYjkG^}mk|>wo$DUz}<_6X*Xvcu#Wvk5lZgblc^KD3VDmxX`yvCyh7zdAYUkWt8~A|F=>Qc;Pc{zxlv@Z+{s2b1W2-JF?#GY__)`=UPZJsL#OJBU#R; z2bognYlGfiIQ|@)^OmL;kOqJl?`8rQWU0y|r{p~x|N9QCPNX)#S_rOD%_$!vuX=Qm ze9JR9`5OI6>;bfVnf<~C{wTaqD+X}j!BYGN#u34QM5FphRR<*#r?9|~n3V&65b{N` z55)i8!ZjI@XRrGev(prb>oF}!23Rx{;Z|ka?e$3B4E316|7Y3%kNH2nwqXCC>oJ>A zj|u$$m{5GWf$uPsR?j}O*4u)V!7JhVpxfXRCRWzl8x0S5deq5Nz4lh~qrM&>Tnc+T z4F&@6|KmgJ7nwXyb_eavTW{`e+)APe;vp&);0kglYGWp4v%SU;k!RM|q0uOW(^fj0 zxpZl)=GH**aP0TP9yEiP*8a*ED3)6A++Jt>%*IA-^&s&7xtRZFGVJsC^{_Lj@g7bg zGC4gP#Eq0|48QbCJ=g2*G;pE7|4#_buKKYBMw2jn)96lyZwALTbAb$d)O9m(-IUuG zv7jQuy1wa}?a5=>Cn+VQc8Dxm&|)Vk_!|8S5d@d?IcY0hTGHmL-CK6NSH*QMJCJsQ zcDO_E$uA+tv592bu~aouS{XgqnZ3a?-Cp|(*9OqUs*2)6?EfEVEl2%7_B{{(C*|Lr z2X3E^^8$nU6%fE$PC)f#U;r0ggXO;{e$1Q?(9`TMi;Y)D(h=&O=m5bCJ~n_SqPH+rz%|`ywp}p3<@=KP9rG)* zJSc$%B})WeEi1s>}jFPUq2)_*9uGyeI1p#MLW>;Jg^kL&*u8xV<1OKd07j`{1p zvKoK@|9=`@FgF0>24D#%c+Ehs){=H&uBpPB_A|eL$(auTrv@RwOW6w-q5sdpr|<>l zf98MY|HD?rUv+7h(yV%_CMSIZ2u=x5356SFR)?uf877$;nx25@9Vc7_H6#$ zdG+m&y8Hg;UVh`T<@unvt*WC73ngv%IT8(A8$Pak`esn8HTS@s`)_}wfZ|~R#p3qW zg5{E+=xU2{{Dc-n2V+zvMx=-09PC+t6AhcBOjCsGd%gDHR?`mv;r;)Z z_X(kxQDqW0t)VjH{eRy7m+}wy|G8L0TIT-W(qy4Jtg3R#BT>2kZ#lK*VEwh*^P7uMs0*bTaUom3iWM3|`@~2&Ar=e$Npd1Fj@!F%*zasCmG}QW`T_WVo%KKO z|MC8xG^o5mPie{In)_a2{@*368#w;Y@&AMqysS|5j2Mppr-=Vw;QpVI;*lhr9T$lE zfBKlDG6u3VJw~KcXY2p@8QlMK=wr+1=)m6d<={D+y*CTwtWjNgZqD8KYh6Q{XakZw5{C1Byp6gx$NkSV4(vZ?(KQI;GS#7qSMz8uTY&c*G?ZW_QBQ)&DDNUo2P3Z58`}IdSdi4d%ji z;p!l8IAxM3d(JpAqVHM2`W! zo4f5^I1^im&F%mBSrPjKud2FW?*Ao_CnB_AG#du&rVLO=O~Boc?zW~k~+2{h=m5qLTM zcLvgbpV}KF-Z1jlWnF7REhztY?#CqyIk+r&F=7rQ{)NblGjn4QNucH@s!NhfoS9or zX0D+s{VGV(9A;#=X4nwu0{H)51cZfT1^53Kj7EUw(5n^$i9W5t*A@SB#l@P`|KGJv zR}7Tne?!%aIh>Fx5St-7kbWlQ3jF^x*Z)SUHTu_RNX5^@u+0tpDF-DerU=H9=K5a; za>j>a^Xq>Pel8s5nK%t8335CklXB4X*kLCl25BK^C}U7|GD>nXxc+}AoRCixU7j7lhY#^md3QZ_ig0~sq8rIKZH1mRMSFWt~AL9ICs38BEgd1K`LXQf4CQZ zcDoH4bSA1)`1tP-lPaYZT}itn$B=ZIzWsly)q353v+_O#4zRd7s)f|fYWG|tLh7R8=uAD8Z6`u*!!YLI1ZyskSN4BdA;m z*So!q8ET5v-K({~ot{Lw{g>BBu1bK+W@aNE&CveqD)0XZWie*7#_B3jB{7{r)AKo} z|1>`RC)57l!AFn?5ywVx|9@rac_eNv1;It`{~w8b;sOAwJ@KllOZY5%;9&o6aQrW_ z0V1NPISFw5kK=!uT=Ut7!2jDZ^`r1!5YS_qK{%@DABnWs3|&3YT80)aW=B~@N~FNR zP@%mIBYC2r76iTr7EWprEE6pYv^Adb2@`K_%vo?}zoZe>aAqD^DY1^NDa+u5LgiZ+ z(nv8Evr&#eMqp}$YsvkZqZRnS!|}hEps@isLy^w#*}bqofFr>)=|f||z?U9=uey0G z0-g2lR_Kw9+2Vf(hvq*YmDW6x=XBwrWX~Mp*DV9Lxrgos0qu|tyo+r?+O%4~yRAe)G-mH_vCy#1e^kJyi7|TdUZ!W`O^nwa-X*;T;o{ zF{j4oN+J7~w@J88I%XU3Z^W&2+Yti(@9$g8YQ8zsAU`ca}BXo~p$hl|cj(ruU2qKFoz`{k`% z%6O6Is+eTTtb%Tf>cK@sB=17f^EueAH^LAdc`I9Tn4tG(`Z_}%SzTabNwC0rkLdo`}$@=*55dV8ZB?F#%q z&?1v=>&%lGFpujM&-^Oj)d8~Zr#5|_9B^?1-!@*<* zt?zB;#67mQ51CFY-?uK$#1|$T-1)X=T?48Ltl{w^F*cCSb9}Q&iU2cODG|MSr zszA%&?bsREj=dKO0PouObZh^Q?|%sX!+-fe;8#EH#ry8Q|GDq@#KoogAUO5t%^lD{ zVNb-)P9F;97Y@yZo%QYpxVEPcUA}bg;pIb*K61~g$JPdWJAxarfWiM?mjo-T7s9P} ze-QRSvmw_>e?xy~RB^i|1LFOSR%`CF|J~=m__45#Up*<-u~67L78imGVShLM8bED* z>7Dyt{FuA%d+y~o!rV?)XKLgy4T=mvhuS_el8e#3-t9Vf8egy0B`!c=gjBluVqW0O>eB|2slGG5^R;+Yn%Ll+0fRHrHHo^>%np@b#hc9v7KP{keKGI<#U&8D z|7VflE`goRIQ~A{l;0*sid-&h}>h{3y{rLKhd!tVkS`B^KS&F=Ua62Sj|-x{${LLmKQETlrEJK!K) z_+w^{h#m>FEEuSKzsXqFl%r<~;s5m9QOQ^n@c(m4@RP+90x-{@oN%h=JEQoBsP7(M z!dJ$-Bg92D16n9Io5f;Mu_v&OiVIluhGZ?JIpB&BlhZ6n;Q!~v$0i<_e8-7hZaAUg zAQ$*c+!snMWTsgfPH?k10mSHUVxG$Z=dISEZ9ESyY~{jMNuN1rg&ZgpWRGb4V{S@UtiSsbyfpBExvh^Wl{?vis>dX`Ou95k}0c)?SD;Hj-N~N6M?Fv_iZ&WKUN<9vkQX9%$`<-~PAkJCINEYu!e<^Xj)0$c;T!lunk~hC#Ep5aSDL*ijBA;r}@N2z|DT>X8^} z1yH6c2ZxD$3E=t5hxR7YX`GWiiAAtFVNP~s;xW=G9O1KCEFbxX!(~ZtS#doUwMr#; z^Fs*m|JPb*eYCmDHCX~&1U^E7BJpWu4EYvj4Y;Pe9nnC=4Q_nRTnJhQ*JC%o9vk@o zXP^s>R(fTl)bS|C$^hPA7WoFHO+=X-{uhEm{81pml}V$gWem#U|8m;@4ul6?6@8OU zYLr2)6`E;!p?S938HAm|rCYnU_asj+({F4cvv(#uTt|2s`FdNiaX^F5RQ|Br{N1dYS{ z|3U)jB7y!SQBwpx-v19B(SmW{*zbouIDK?wV>*mG#?<7=gy;4;>t{AL@~nJ!z%GBa z1or<;IB+8VbLu?q$*e+y#r9-IfjwOW<&XXd?@qLHKek5qV*~#GMnrE!sR6+$qR+PJ zHHJ*(v^j_99|w-CHm4vr$3TcQ7Akm*G4TK210~Rm#T-$ROsYx;N6AODmz20G?@VSx z2>ZpbTnk<34G4~n~D6tuagWw$c37Ph%&frRv69{UOIERz{h2?F1eG< z(3B!jQgehMCC;-AN>NOvjaZ_lAv4hbUoW~+Ejzk%op78exD+J$Mgrh~1Xbzktn#GY z*U)>*v`ZPf=b8&y1I1lx_Oy@+WoB)ijjQNYRs@CNX!;)sv@C-)C26k^nUw3G!2e%? zge15B<@Ud^9FJr;P&6tF3L_8K%v)kN! zx4AJ}X06uizFG==i;=4o0B`>(Sn&4W2AKQQ@gu%L8UsSw2Ojw=AH!w@TvG_KI3LmH zqbYd?CngL1NmhkE+KA(rK>z;}$^Y=*SOgRXF}0a|quaYSt+WogEKEKKk5=L_0YM1E zGpJhWYA;;vb+5NYnL)^WbNX;2_$HLZM3p8YtU4TH2K@g{3)d53r$0vv#o4JGx)Aa) zW`qv>I(bsDT8ONkCir#sD8DGUQLaz%=;} zItr&?|9@*F4&h&j%ZL96->GUG^|8gKFy=IVbY<~Z*Lr-(RFO&gQfR-s+Byhj4NV4Z|K9r2u zEb%_t4+`}Ex3Ktn_m(A#{D-i%&75LH=5Oa#z->+&&lVs+yB9&=-o99H z?q&xIbnA!=euCscYq!b%5!};7vhBjuaR>bWT^b*7{*Rv6&hdcCxdw!fD26aObN_D& z9gsRW#0~uaZWn?= zu1PT>C5LD{ z;7w2eIVH~j(Hoo#p2kdMYy2cpJ|5@Fx2jJl^_gjUX~^dP44D5 z&pH1G*)blQr7nt#H!>rfQt_x8uGAR9YHw&eHr)UK`~Q1l>PO-t2x_pg>Cw@}1eCGq zBEW`#W|SwA`?jrUZGgbC8BHEAx1;q3EO^r%Ft()OuFewCq%D_-mlZwc5tT5uv5RE+ zo-qN+mGF-G(%EZ8#K~tDt$hBcAY~g_8WfMH&>GG#seL@s&Ne9d24x;JX?6f+zyVn4 zjBEcNd~eJEhO8!(CB-?Gm592sQEwrGl8HN5g6n@RvTqFVar=+DYYDLb|0yt`>JJbE zj?*`S1)5H&y-Cee?WW^^5z{o*-jvacNKOe|jc4onrfasu6sAP4o4^hcVv&3FX>G=a zn}AkR%PuCGK2Vr(t#jFdG}i$yi!@so!LD$8s#rIr6(R$WQY@-li<%42mQJd0fy@W4 zDF2C)EAapKZi@qe_^gES09T^XL@-YAjj+vWl8Me3hba(lv2=6GaqVtx`XT}UzlY2J zhE#$$hx-_3WSIO^6XHV0py`F7sB>)h!W!4Jd31Y*^1rLV|38>YMsoh2GNL&DkMsYU zlmGWa3I8ka&9)bXoUJAlMtX!PAOFqgn9aaBW}yFncq`d5h$TVnP&#Zb59`nvLpnpQ zkU`U1hpT7${jfI(H>Pze(HK)Z`^;KztKHc;x7S%ev$2t9e}c^ZEe!+%`esUfWI*4Q zaDC9N81jJsf6Su)T@l(+duC&LMFhvuX3$mDk2aU62})KkRo!U@{{N97|Cgio)5}rr zHccb_K+`HHQA?}q$?l-NdF##Hja!-xT9<{EEL2v{tgnat{*&QgrL&pg@E@r50{(wr z%>Rg#7%Ko0DwyGQopSt-6k z8=@pWaquU%!Lw7r+TfWQClkc$2L1mNoc}YVVWj>!|A*LsetwJ1DJ*jdYuVTsf!r#} zy@Qf(P@4{o&-p(V`3e00lidGD>M-m8WFyCtXhR8V+y;g@tWB;LDLo zV~CIQ;YNF{DK!z=y7eClPfzS*(f|J(aE(g0xc`?$`H$987PH;LOA5ZON+s_9b^0*( z|Jrf&WyEf1AtSkP-(Qp@wRV^a7FN(KU~*NI5tqnbe9{W^wWXph{sB zz|s

LYN)gZg+Hn5qbt3mKGrgTew&dUnqLI;}066M%bK<{qVy29S1p_j0dY`^vR6 zRcqYT-nX#>`u`o ze;{)8Xs97Q{YWdj@wHOOq~$uPkj6PLI)>kwtWlHG8X_fzW@mM|CjEOg3KgqL=AiZh|>Rj00PQ{mDS3RPq=?|LW05IVHU*Y{f$^T#wD+y2`yc4^fQWl={aNmj>0L45= z{95vpxN#OZHa(~X{Qq0pvU&fH16zqW#FSC9z!o2B9b=K|3ZmkG|9_G7e?suA|Etmr z#uJ;&W}J<0N6mo#e}(;j$^S^-vHwquW1=|V?3ikFDM-)Ly#H_A|Gzaf6qM)7`TqbC zN>`~}M?U{2bma9?uo5YQBruo%P#P@2CIb8a14I6gFyX*l0bdti_Bbe6^h|mh;{xCa z1w^)ypQBln3xErt-l?(#@c-|`{EuB*3b^_wVb&f82j}Uj4RPci;cq%WpioFdr

(?5xNxf1^)kV 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℘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 $;8Td5Q%qT#O?K-oWrDjnc1VJ%BOH2lc7M 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

~`LfRL2K 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%0Aq|WtAMc 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 aOoM*AWZ)Fsw*TIhS6sW=-QKwB;{P8pZAo|l diff --git a/model/ims.xmi b/model/ims.xmi deleted file mode 100644 index 471d0ec..0000000 --- a/model/ims.xmi +++ /dev/null @@ -1,1261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/ims_main.cqa b/model/ims_main.cqa deleted file mode 100644 index 2f7d153..0000000 --- a/model/ims_main.cqa +++ /dev/null @@ -1,35 +0,0 @@ -system { - Inbound ConfIn : configSystemReq; - Outbound ConfOut : configSystemResp; - - Inbound GmIn : SIPPacket; - Outbound GmOut : SIPPacket; - - Inbound MwIn : SIPPacket; - Outbound MwOut : SIPPacket; - - Inbound Ic1In : SIPPacket; - Outbound Ic1Out : SIPPacket; - - Outbound Ic2Out : SIPPacket; - - Inbound IscIn : SIPPacket; - Outbound IscOut: SIPPacket; - - Inbound Isc1In : SIPPacket; - Outbound Isc1Out: SIPPacket; - - Inbound Isc2In : SIPPacket; - Outbound Isc2Out: SIPPacket; -} - - -void main() { - - Connection ue1 = new Connection(); - Connection ue2 = new Connection(); - - Ims ims = new Ims({ue1, ue2}); - - ims.start(); -} diff --git a/model/ims_records.cqa b/model/ims_records.cqa deleted file mode 100644 index 1cbb0ed..0000000 --- a/model/ims_records.cqa +++ /dev/null @@ -1,396 +0,0 @@ - -// general SIPPacket that contains all used fields -record SIPPacket { - String method; - String sender; - String recipient; - String message_body; - - AuthenticationChallengeResponseParameter auth_challenge_resp_param; - AuthorizationHeader authorization_header; - CSeqHeader cseq; - CallIdHeader callid_header; // MW_SUB_01 - ContactHeader contact_header; - ContactUri contact_uri; - ContentTypeHeader content_type_header; - EncryptedSDPAnswer encryptedSDPAnswer; - EncryptedSDPOffer encryptedSDPOffer; - EventHeader event_header; - ExpireHeader expire_header; - FromHeader from; - MinExpireHeader min_expire_header; - MinSEHeader min_se_header; - NotifyBody notify_body; - PAccessNetInfoHeader p_access_network_info_header; - PAssertedIdHeader p_asserted_identity_header; - PAssertedServiceHeader p_asserted_service_header; - PAssociatedURIHeader p_associated_uri_header; - PChargingFuncAddrHeader p_charging_function_addresses_header; - PChargingVectorHeader p_charging_vector_header; - PMediaAuthorizationHeader p_media_authorization_header; - PPreferredIndentityHeader p_preferred_identity_header; - PVisitedNetworkIdHeader p_visited_network_id_header; - PathHeader path_header; - ReasonHeader reason; - RecordRouteHeader record_route_header; - RequestUri request_uri; - RequireHeader require_header; - RouteHeader route_header; - SDPAnswer sdpAnswer; - SDPOffer sdpOffer; - SecondPAssertedIDHeader second_p_asserted_id_header; - SecurityClientHeader security_client_header; - SecurityServerHeader security_server_header; - SecurityVerifyHeader security_verify_header; - ServiceRouteHeader service_route_header; - SessionExpiresHeader session_expires_header; - SipUriHeader sip_uri; - String callid_parameter; // MW_REG_22 & MW_REG_23 - SupportedHeader supported_header; - ToHeader to; - TopmostRouteHeader topmost_route_header; - TopmostPathHeader topmost_path_header; - ViaHeader topmost_via_header; - ViaHeader via_header; - WwwAuthenticateHeader www_authenticate_header; - EncryptedSIPUri encrypted_sip_uri; - AnyHeader any_header; - SecondRouteHeader second_route_header; -} - -// additional typedefs for sip messages -record SIPInvite extends SIPPacket{} -record SIPInviteReq extends SIPPacket{} - -//record SIPBye extends SIPPacket{} -record SIPByeResp extends SIPPacket{} -record SIPByeReq extends SIPPacket{} - -record SIPAckReq extends SIPPacket{} -record SIPAckResp extends SIPPacket{} - -record SIPNotifyResp extends SIPPacket{} - -record SIPRegisterReq extends SIPPacket{} - -record SIPSubscribeReq extends SIPPacket{} - -record SIPMessage extends SIPPacket{} -record SIPMessageReq extends SIPPacket{} - -record SIP100Resp extends SIPPacket{} -record SIP180Resp extends SIPPacket{} -record SIP200Resp extends SIPPacket{} -record SIP380Resp extends SIPPacket{} -record SIP3xxResp extends SIPPacket{} -record SIP4xxResp extends SIPPacket{} -record SIP400Resp extends SIPPacket{} -record SIP401Resp extends SIPPacket{} -record SIP402Resp extends SIPPacket{} -record SIP403Resp extends SIPPacket{} -record SIP404Resp extends SIPPacket{} -record SIP408Resp extends SIPPacket{} -record SIP422Resp extends SIPPacket{} -record SIP423Resp extends SIPPacket{} -record SIP480Resp extends SIPPacket{} -record SIP481Resp extends SIPPacket{} -record SIP488Resp extends SIPPacket{} -record SIP5xxResp extends SIPPacket{} -record SIP500Resp extends SIPPacket{} -record SIP504Resp extends SIPPacket{} - -record SIPUpdateReq extends SIPPacket{} - -record HeaderInfo { - String present; - String value; - - public boolean isPresent() { - return present == PRESENT; - } - - public boolean isOmit() { - return present == OMIT; - } -} - -record SecondRouteHeader extends HeaderInfo {} -record AnyHeader extends HeaderInfo {} -record EncryptedSIPUri extends HeaderInfo {} -record CallIdHeader extends HeaderInfo {} -record CSeqHeader extends HeaderInfo{} -record PPreferredIndentityHeader extends HeaderInfo { - EmergencyPublicUID emergency_public_user_identity; - RegisteredPubUserIdentity registered_public_user_identity; - String tel; -} - -record EmergencyPublicUID extends HeaderInfo {} -record TopmostRouteHeader extends HeaderInfo { - OrigIOParam orig_io_param; -} -record OrigIOParam extends HeaderInfo {} -record ReasonHeader extends HeaderInfo {} -record MinSEHeader extends HeaderInfo {} -record SDPOffer extends HeaderInfo {} -record EncryptedSDPOffer extends HeaderInfo {} -record EncryptedSDPAnswer extends HeaderInfo {} -record SDPAnswer extends HeaderInfo {} -record PAssertedIdHeader extends HeaderInfo { - String sip_uri; - StoredDisplayName stored_display_name; - StoredPublicUID stored_public_uid; - EmergencyPublicUID emergency_public_user_identity; - RegisteredPubUserIdentity registered_public_user_identity; -} - -record SecondPAssertedIDHeader extends HeaderInfo { - String tel; -} -record StoredPublicUID extends HeaderInfo {} -record PAssertedServiceHeader extends HeaderInfo{} -record StoredDisplayName extends HeaderInfo {} -record EventHeader extends HeaderInfo { - String reg_parameter; -} -record RequireHeader extends HeaderInfo { - PathTagParam path_tag_parameter; -} -record PChargingVectorHeader extends HeaderInfo { - IcidParameter icid_parameter; - OrigIoiParameter orig_ioi_parameter; - TermIoiParameter term_ioi_parameter; - IoiParameter ioi_parameter; - Update update_access_network_charging_info_parameter; - AccessNetChargingInfoParam access_net_charging_info_param; -} -record AccessNetChargingInfoParam extends HeaderInfo {} -record Update extends HeaderInfo {} -record PVisitedNetworkIdHeader extends HeaderInfo { - VisitedNetPreProvisionedStr visited_network_pre_provisioned_string; -} -record NotifyBody extends HeaderInfo { - RegisteredPubUserIdentity registered_public_user_identity; -} -record RegisteredPubUserIdentity extends HeaderInfo {} -record AuthorizationHeader extends HeaderInfo { - String integrity_protected_parameter; - String private_user_identity; - String algorithm_parameter; - String response_parameter; - String AUTS_parameter; -} -record ContactHeader extends HeaderInfo { - String registered_public_user_identities; - String contact_uri; - String address_of_public_user_identity; -} - -record PAssociatedURIHeader extends HeaderInfo { - RegisteredPubUserIdentity registered_public_user_identity; -} -record ContactUri extends HeaderInfo {} -record SecurityServerHeader extends HeaderInfo { - String pcscf; -} -record WwwAuthenticateHeader extends HeaderInfo { - IkParameter ik_parameter; - CkParameter ck_parameter; - String realm_parameter; - String RAND; - String AUTN; - String algorithm_parameter; -} -record AuthenticationChallengeResponseParameter extends HeaderInfo {} -record PAccessNetInfoHeader extends HeaderInfo { - String network_provide_parameter; -} - -record ContentTypeHeader extends HeaderInfo {} -record PMediaAuthorizationHeader extends HeaderInfo {} -record RouteHeader extends HeaderInfo { - Topmost topmost; -} - -record Topmost extends HeaderInfo {} -record CkParameter extends HeaderInfo {} -record ExpireHeader extends HeaderInfo {} -record FromHeader extends HeaderInfo {} -record IcidParameter extends HeaderInfo {} -record IkParameter extends HeaderInfo {} -record IoiParameter extends HeaderInfo {} -record OrigIoiParameter extends HeaderInfo {} -record PChargingFuncAddrHeader extends HeaderInfo {} -record PathHeader extends HeaderInfo {} -record TopmostPathHeader extends HeaderInfo {} -record PathTagParam extends HeaderInfo {} -record RecordRouteHeader extends HeaderInfo { - String SIP_URI_of_IUT_P_CSCF; - CompParam comp_parameter; -} - -record CompParam extends HeaderInfo {} -record RequestUri extends HeaderInfo { - BarredPublicUserId barred_public_user_id; - EmergencyServiceURN emergency_service_urn; - GruuParam GRUU_parameter; - GruuParam invalid_GRUU_parameter; -} - -record EmergencyServiceURN extends HeaderInfo {} -record GruuParam extends HeaderInfo {} -record BarredPublicUserId extends HeaderInfo {} -record SecurityClientHeader extends HeaderInfo {} -record SecurityVerifyHeader extends HeaderInfo {} -record ServiceRouteHeader extends HeaderInfo { - String sip_uri; -} -record SessionExpiresHeader extends HeaderInfo { - RefreshParam refresh_parameter; - DurationParam duration_parameter; -} - -record DurationParam extends HeaderInfo {} -record RefreshParam extends HeaderInfo {} -record SipUriHeader extends HeaderInfo {} -record SupportedHeader extends HeaderInfo {} -record TermIoiParameter extends HeaderInfo {} -record ToHeader extends SipUriHeader {} -record ViaHeader extends HeaderInfo{ - PortNumber port_number; - FQDNAddress fqdn_address; - IPAddress ip_address; - Topmost topmost; -} -record IPAddress extends HeaderInfo {} -record FQDNAddress extends HeaderInfo {} -record PortNumber extends HeaderInfo {} -record ViaRecord extends HeaderInfo {} -record VisitedNetPreProvisionedStr extends HeaderInfo {} -record MinExpireHeader extends HeaderInfo{} - - -// CONFIGURATION MESSAGES FOR UEs and IUT - -record configSystemReq { - configNetworkReq net; - configUserReq ue1; - configUserReq ue2; -} -record configSystemResp {} - -record configNetworkReq { // was IUTConfiguration - boolean security_association; - - boolean forward_message; // TP_IMST2_GM_STA_01 - boolean topology_hiding; - boolean configured_entry_point_to_ims; - boolean configured_for_emergency_sessions; - boolean same_trust_domain; - - boolean forward_ini02; // defines the behavior of the IMS for - // TP_IMST2_GM_INI_02 - boolean forward_ini06; - boolean forward_sta01; - boolean forward_sub02; - boolean forward_sub03; - boolean forward_sub08; - boolean forward_sub09; - boolean forward_tar11; - boolean forward_tar02; - boolean response_reg09; - boolean encrypted_sdp_offer; - boolean respond_401_mwreg24; - boolean forward_mwini03; - boolean stored_display_name; - boolean forward_mwini10; - boolean stored_via_header; - boolean forward_mwini11; - boolean stored_record_route_header; - boolean forward_mwini12; - boolean forward_mwini13; - boolean forward_mwini14; - boolean requiring_periodic_refresh; - boolean forward_mwsta01; - boolean stored_service_route_header; - boolean forward_mwsta06; - boolean forward_mwsub02; - boolean forward_mwsub05; - boolean forward_mwsub08; - boolean forward_mwtar02; - boolean forward_mwtar06; - boolean forward_mwtar08; - boolean configured_entry_point_to_home_net; - boolean conf_two_entry_points_to_home_net; - boolean send_408_icreg04; - boolean send_408_icreg05; - boolean send_408_icreg06; - boolean contact_as1_for_message; - boolean contact_as1_for_invite; - boolean contact_as2_for_invite; - boolean iut_and_as1_in_same_trust_domain; - boolean as1_indicated_iut_handles_dialog; - boolean as1_and_iut_in_same_net; - boolean ifc_session_continued; - boolean forward_iscsta05; - boolean forward_iscsta06; - boolean as1_indicated_handling_whole_dialog; - boolean forward_message_to_as1; -} - -record configUserReq { // was UEConfiguration - String sender; - boolean init_emergency_registered; - boolean ue_is_home_net; - boolean init_temporary_security_association; - boolean init_registered_user_id; -} - - -// constants -final String UE1 = "[UE1]"; -final String UE2 = "[UE2]"; -final String IUT = "[IUT]"; -final String IMS = "[IMS]"; -final String AS1 = "[AS1]"; -final String AS2 = "[AS2]"; -final String OMIT = "[omit]"; -final String PRESENT = "[present]"; -final String INVALID_USER_ID = "[invalid private user identity]"; -final String INVITE = "INVITE"; -final String ACK = "ACK"; -final String REGISTER = "REGISTER"; -final String SUBSCRIBE = "SUBSCRIBE"; -final String NOTIFY = "NOTIFY"; -final String BYE = "BYE"; -final String MESSAGE = "MESSAGE"; -final String UPDATE = "UPDATE"; -final String STORED_VIA_HEADER = "[stored Via header]"; -final String NOT_MATCHING_STORED_ROUTE_HEADER = "[Route Header not matching stored Record-Route header]"; -final String ROUTE_HEADER_NOT_MATCHING = "[Route header not matching stored Service-Route header]"; -final String PCSCF_OR_FQDN_ADDRESS = "[address of IUT P-CSCF or FQDN address of IUT P-CSCF]"; -final String NOT_MATCHING_VIA_HEADER = "[Via header not matching stored Via header]"; -final String TIMER_OPTION_TAG = "[timer option tag]"; -final String WRONG_EXPIRATION = "[||acceptable expiration]"; -final String ACCEPTABLE_EXPIRATION = "[acceptable expiration]"; -final String TYPE1 = "[type1]"; -final String TYPE2 = "[type2]"; -final String TYPE3 = "[type3]"; -final String YES = "[YES]"; -final String NO = "[NO]"; -final String SECURITY_LIST_PARAMETERS = "[P-CSCF security list the parameters needed for the security association setup]"; -final String LARGE_BODY = "[Message Body greater than 1300 bytes]"; -final String EMERGENCY_SERVICE_ID = "[emergency service identifier]"; -final String RESPONSE_503_OR_488 = "[503 response code OR 488 response code]"; -final String UNACCEPTABLE_MEDIA_PARAM = "[unacceptable media parameter]"; -final String AKAV1_MD5 = "[AKAv1-MD5]"; -final float UE1RegistrationTimeout = 1.0; -final String REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID = "[Request-URI matching an emergency service identifier]"; -final String TEL_URI_OF_EMERGENCY_PUB_USER_ID = "[tel URI of emergency public user identity]"; -final String TEL_URI_OF_PUB_UID = "[tel URI of public user identity]"; -final String TOKENIZED_BY_PARAMETER = "[-> tokenized-by parameter]"; -final String SIP_URI_OF_IUT_IBCF = "-> SIP URI of IUT IBCF"; -final String SIP_URI_OF_IMS = "-> SIP URI of IMS"; -final String SIP_URI_OF_IUT_SCSCF = "-> SIP URI of IUT S-CSCF"; -final float timeout_iscini05 = 1.0; -final float timeout_iscsta04 = 1.0; diff --git a/tp/tplan/IMS_CTS_1Gm.tplan b/tp/tplan/IMS_CTS_1Gm.tplan deleted file mode 100644 index ad43c54..0000000 --- a/tp/tplan/IMS_CTS_1Gm.tplan +++ /dev/null @@ -1,1443 +0,0 @@ -TSS : NGN-IMS -Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' -Version : 1.0.1 -Date : 27.08.2008 -Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- If not mentioned differently in the "with" statement of a test purpose --- both UE1 and UE2 are in their home network - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1 'Gm focused behaviour' -Group 1.1 'General Capabilities' - -TP id : TP_IMST2_GM_GEN_01 -summary : 'All IMS CN components shall support SIP messages which are greater than 1300 bytes in length' -clause ref: '4.2A paragraph 1 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_4002 -role : IMS -- General -config ref: CF_2Gm - -with { - UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - containing Message_Body greater than 1300 bytes - } - then { - IUT sends MESSAGE to UE2 - } -} - -End group 1.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.2 'Registration Procedures' - -TP id : TP_IMST2_GM_REG_01 -summary : 'When a P-CSCF receives a REGISTER request from the UE and the REGISTER request was received without protection, - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 5)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_02 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE - and the Security-Verify header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 6)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { IUT receives protected REGISTER - not containing Security-Verify_header - } - then { IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_03 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -TP type : conformance -clause ref: '5.2.2 first numbered list 6)a' -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_04 -summary : 'When a P-CSCF receives a unprotected REGISTER request from the UE - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 6)b' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_05 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE and the private user identity conveyed in the - Authorization header of the request are different from the ones previously challenged or authenticated, the - P-CSCF shall reject the REGISTER request by returning a SIP 403 (Forbidden) response.' -clause ref: '5.2.2 first numbered list 6)c' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - containing Authorization_header indicating invalid private_user_identity - } - then { - IUT sends 403_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_06 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE and the private user identity conveyed in the - Authorization header of the request are different from the ones previously challenged or authenticated, the - P-CSCF shall reject the REGISTER request by returning a SIP 403 (Forbidden) response.' -clause ref: '5.2.2 first numbered list 6)c' -TP type : conformance -RQ ref : RQ_003_5011 - role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - containing Authorization_header indicating invalid private_user_identity - } - then { - IUT sends 403_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_07 -summary : 'When a P-CSCF receives a unprotected REGISTER request from a non-registered UE it accepts it and returns a SIP 401 response' -clause ref: '5.2.2 second numbered list' -TP type : conformance -RQ ref : RQ_003_5023 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - } - then { - IUT sends 401_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_08 -summary : 'When a P-CSCF receives a SIP 200 (OK) response to a REGISTER request and the value of the Expires header - field and/or the Expires parameter in the Contact header in the 200 (OK) response is not set to zero - it passes the 200 (OK) to the UE.' -clause ref: '5.2.2 third numbered list' -TP type : conformance -RQ ref : RQ_003_5028 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - } - then { - IUT sends 200_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_09 -summary : 'If local policy requires the application of IBCF capabilities in the visited network and a P-CSCF fails to forward - a REGISTER request from a UE to any IBCF, it shall return a SIP 408 (Request Timeout) response or SIP 504 - (Server Time-out) response to the UE' -clause ref: '5.2.2A first numbered list 6)' -TP type : conformance -RQ ref : RQ_003_5223 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 is visiting IUT and - IUT not configured_for_establishing_security_association and - IUT configured_for_topology_hiding and - IUT not configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER - } - then { - IUT sends 408_response or 504_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_10 -summary : 'When a P-CSCF receives a REGISTER request from a non-registered UE and no security association - is set-up it accepts it and returns a SIP 200 response' -clause ref: '5.2.2A' -TP type : conformance -RQ ref : None -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 not registered in IUT and - IUT not configured_for_establishing_security_association -} -ensure that { - when { - IUT receives REGISTER - } - then { - IUT sends 200_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_11 -summary : 'When a P-CSCF receives a REGISTER request from a registered UE and the value of the Expires header - field and/or the Expires parameter in the Contact header is set to zero it sends a 200 (OK) to the UE.' -clause ref: '5.2.5.1' -TP type : conformance -RQ ref : None -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 registered in IUT -} -ensure that { - when { - IUT receives REGISTER - containing Expires_header indicating 0 - } - then { - IUT sends 200_response - containing Expires_header indicating 0 - } -} - -End group 1.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.3 'initial requests' - -TP id : TP_IMST2_GM_INI_01 -summary : 'When a P-CSCF receives an initial request for a dialogue from a UE then it forwards the request to destination UE and returns a SIP 100 (Trying) response to the originating UE.' -clause ref: '5.2.6.3 first numbered list, 5.2.6.4 first numbered list' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5054, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Record-Route_header indicating address of IUT_P-CSCF or FQDN_address of IUT_P-CSCF - and containing Via_header indicating address of IUT_P-CSCF or FQDN_address of IUT_P-CSCF - and not containing P-Charging-Vector_header including icid_parameter - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_02 -summary : 'When a P-CSCF receives an initial request for a dialogue from a UE but with preloaded Route not matching the stored Service-Route header then it either returns a SIP 400 response to the UE or forwards the request to destination UE with an updated Route header and returns a SIP 100 (Trying) response to the originating UE.' -clause ref: '5.2.6.3 first numbered list 1), 5.2.6.4 first numbered list' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5054, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 for UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Route_header matching stored Service-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_03 -summary : 'When a P-CSCF receives any valid SIP 1xx response as a result of a forwarded request for an initial dialogue it forwards the response to originating UE' -clause ref: '5.2.6.3 second numbered list, 5.2.6.4 second numbered list' -TP type : conformance -RQ ref : RQ_003_5047, RQ_003_5055 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - } - then { - IUT sends 180_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_04 -summary : 'When a P-CSCF receives any valid SIP 2xx response as a result of a forwarded request for an initial dialogue, - it forwards the response to the originating UE' -clause ref: '5.2.6.3 second numbered list, 5.2.6.4 second numbered list' -TP type : conformance -RQ ref : RQ_003_5047, RQ_003_5055 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_05 -summary : 'When a P-CSCF receives any other response other than a SIP 1xx or a 2xx to an initial request to a UE for a dialog it forwards it to the originating UE' -clause ref: '5.2.6.4 third numbered list' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_06 -summary : 'WWhen a P-CSCF receives any other response other than a SIP 1xx or a 2xx to an initial request to a UE for a dialog and if the list of Via headers does not match the saved list of Via headers received in the request corresponding to the same dialog, it either sends no message or forwards it to the originating UE' -clause ref: '5.2.6.4 third numbered list' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 4xx_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_07 -summary : 'If a P-CSCF requires periodic refreshment of a session established after receiving a SIP INVITE request from a UE - and the Session-Expires header indicates a too low refresh frequence, it shall reject the INVITE.' -clause ref: '5.2.7.2, RFC4028' -TP type : conformance -RQ ref : RQ_003_5064 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Supported_header indicating timer_option_tag - and containing Session-Expires_header not indicating acceptable_expiration - } - then { - IUT sends 422_response - containing Min-SE_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_08 -summary : 'When a P-CSCF requires periodic refreshment of a session established after receiving a SIP INVITE request from a UE - and the Session-Expires header of the INVITE request indicates acceptable refresh frequence then it forwards the request to the destination UE and returns a 100 (Trying) to the originating UE.' -clause ref: '5.2.7.2, 5.2.8.3, RFC4028' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5068, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Supported_header indicating timer_option_tag - and containing Session-Expires_header indicating acceptable_expiration - } - then { - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Session-Expires_header - } -} - -End group 1.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.4 'Standalone Requests' - -TP id : TP_IMST2_GM_STA_01 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE with preloaded Route not matching the stored Service-Route header then it either returns a SIP 400 response to the UE or forwards the request to destination UE with an updated Route header and returns a SIP 100 (Trying) response to the originating UE' -clause ref: '5.2.6.3 fifth numbered list 1)' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends MESSAGE to UE2 - containing Route_header matching stored Service-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_02 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE with preloaded Route matching the stored Service-Route header then it forwards the request to destination UE without a P-Charging-Vector header and returns a SIP 100 (Trying) response to the originating UE' -clause ref: '5.2.6.3 fifth numbered list, 5.2.6.4 seventh numbered list' -TP type : conformance -RQ ref : RQ_003_5050, RQ_003_5060 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends MESSAGE to UE2 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_03 -summary : 'When a P-CSCF receives a SIP 200 response to a forwarded request for a standalone transaction then it forwards the request to the originating UE.' -clause ref: '5.2.6.3 sixth numbered list, 5.2.6.4 eigth numbered list' -TP type : conformance -RQ ref : RQ_003_5051, RQ_003_5061 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_MESSAGE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_04 -summary : 'When a P-CSCF receives any 4xx response to a forwarded request for a standalone transaction then it forwards the request to the originating UE.' -clause ref: '5.2.6.3 sixth numbered list, 5.2.6.4 eigth numbered list' -TP type : conformance -RQ ref : RQ_003_5051, RQ_003_5061 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_MESSAGE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - -End group 1.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.5 'Subsequent Requests' - -TP id : TP_IMST2_GM_SUB_01 -summary : 'When the P-CSCF receives a subsequent request for non-existing dialog it rejects it with a SIP 403 response and does not forward it any further' -clause ref: '5.2.6.3 seventh numbered list 1) a)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends 403_response to UE1 - and IUT sends no message to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_02 -summary : 'When the P-CSCF receives a subsequent request with unknown URI in Route header from the originating UE it either rejects it with a SIP 400 response or forwards it with an updated Route header' -clause ref: '5.2.6.3 seventh numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends BYE to UE2 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_03 -summary : 'When the P-CSCF receives a subsequent request with unknown URI in Route header from the terminating UE it either rejects it with a SIP 400 response or forwards it with an updated Route header' -clause ref: '5.2.6.3 seventh numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE2 for UE1 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE2 - and IUT sends no message to UE1 - or - IUT sends BYE to UE1 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_04 -summary : 'When the P-CSCF receives a subsequent request for existing dialog from the originating UE it forwards it to the destination UE without a P-Charging-Vector header' -clause ref: '5.2.6.3 seventh numbered list, 5.2.6.4 ninth numbered list' -TP type : conformance -RQ ref : RQ_003_5052, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends BYE to UE2 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_05 -summary : 'When the P-CSCF receives a subsequent request for existing dialog from the terminating UE it forwards it to the destination UE without a P-Charging-Vector header' -clause ref: '5.2.6.3 seventh numbered list, 5.2.6.4 ninth numbered list' -TP type : conformance -RQ ref : RQ_003_5052, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE2 for UE1 - } - then { - IUT sends BYE to UE1 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_06 -summary : 'When the P-CSCF receives a SIP 200 to subsequent request from the originating UE it forwards it to the terminating UE' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE1 for UE2 and - IUT has_sent_BYE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_07 -summary : 'When the P-CSCF receives a SIP 200 to subsequent request from the terminating UE it forwards it to the originating UE' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 for UE1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - } - then { - IUT sends 200_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_08 -summary : 'When the P-CSCF receives a SIP 200 with unknown Via header to a subsequent request from the terminating UE it either does not forward it or updates the Via heading prior to forwarding it' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE1 for UE2 and - IUT has_sent_BYE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 200_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_09 -summary : 'When the P-CSCF receives a SIP 200 with unknown Via header to a subsequent request from the originating UE it either does not forward it or updates the Via heading prior to forwarding it' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 for UE1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE2 - or - IUT sends 200_response to UE2 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_10 -summary : 'Upon receipt of a request on a dialog for which the P-CSCF has already initiated session release, the P-CSCF shall return 481 (Call/Transaction Does Not Exist) response' -clause ref: '5.2.8.1.3' -TP type : conformance -RQ ref : RQ_003_5241 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends 481 to UE1 - and IUT sends 200 to UE2 - } -} - -End group 1.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.6 'Target refresh Requests' - -TP id : TP_IMST2_GM_TAR_01 -summary : 'When the P-CSCF receives a SIP refresh request for non-existing dialog it shall reject it with a SIP 403 response' -clause ref: '5.2.6.3 third numbered list 1) a)' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh UPDATE from UE1 for UE2 - } - then { - IUT sends 403_response to UE1 - and IUT sends no message to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_02 -summary : 'HWhen the P-CSCF receives a refresh request with unknown URI in Route header it shall either reject it or forward it with an updated Route header.' -clause ref: '5.2.6.3 third numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 for UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_03 -summary : 'When the P-CSCF receives a refresh request for existing dialog from originating UE it shall return a SIP 100 and forward the request' -clause ref: '5.2.6.3 third numbered list, 5.2.6.4 fourth numbered list' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5058, RQ_003_5079 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends target_refresh INVITE to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_04 -summary : 'When the P-CSCF receives a refresh request for existing dialog from terminating UE it shall return a SIP 100 and forward the request' -clause ref: '5.2.6.3 third numbered list, 5.2.6.4 fourth numbered list' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5058, RQ_003_5081 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE2 for UE1 - } - then { - IUT sends 100_response to UE2 - and IUT sends target_refresh INVITE to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_05 -summary : 'When the P-CSCF receives a valid 180 response to refresh request from terminating UE it forwards the response to the originating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - } - then { - IUT sends 180_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_06 -summary : 'When the P-CSCF receives a valid 180 response to refresh request from originating UE it forwards the response to the terminating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 180_response from UE1 for UE2 - } - then { - IUT sends 180_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_07 -summary : 'When the P-CSCF receives a valid 200 response to refresh request from terminating UE, it returns a SIP ACK and forwards the response to the originating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends ACK to UE2 - and IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_08 -summary : 'When the P-CSCF receives a valid SIP 200 response to refresh request from originating UE, it returns a SIP ACK and forwards the response to the terminating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - } - then { - IUT sends ACK to UE1 - and IUT sends 200_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_09 -summary : 'When the P-CSCF receives a valid 4xx response to refresh request from terminating UE it forwards the response to the originating UE' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_10 -summary : 'When the P-CSCF receives a valid SIP 4xx response to refresh request from originating UE it forwards the response to the terminating UE' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 for UE2 - } - then { - IUT sends 4xx_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_11 -summary : 'When the P-CSCF receives a 4xx with unknown Via header to refresh request from the terminating UE it either does not forward the message or forwards it with an updated Via header' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 4xx_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_12 -summary : 'When the P-CSCF receives a 4xx with unknown Via header to refresh request from the originating UE it either does not forward the message or forwards it with an updated Via header' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 for UE2 - containing Via_header not matching stored Via_header -} - then { - IUT sends no message to UE2 - or - IUT sends 4xx_response to UE2 - containing Via_header indicating stored Via_header - } -} - -End group 1.6 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.7 'Emergency' - --- Note: It may not be possible to test the following test purposes, --- as it is not advisable to call emergency numbers for test purposes --- unless the emergency service can be simulated within the IUT. - -TP id : TP_IMST2_GM_EME_01 -summary : 'Rejection of INVITE to emergency service with 380 when emergency calls have to use the CS domain' -clause ref: '5.2.10.1' -TP type : conformance -RQ ref : RQ_003_5083, RQ_003_5259 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { IUT not configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 380_response - containing Content-Type_header indicating '3GPP IMX XML body' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_02 -summary : 'P-CSCF accepts INVITE to emergency service from unregistered user and returns SIP 100 (Trying) response' -clause ref: '5.2.10.2' -TP type : conformance -RQ ref : RQ_003_5250 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 not registered in IUT and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_03 -summary : 'P-CSCF rejects INVITE to non-emergency service from user with emergency registration with SIP 403 response' -clause ref: '5.2.10.3' -TP type : conformance -RQ ref : RQ_003_5252 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 emergency registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI not indicating emergency_service_identifier - } - then { - IUT sends 403_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_04 -summary : 'P-CSCF accepts INVITE to emergency service from user with emergency registration and returns SIP 100 response' -clause ref: '5.2.10.3' -TP type : conformance -RQ ref : RQ_003_5253 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 emergency registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_05 -summary : 'P-CSCF accepts INVITE to emergency service from user with normal registration and returns SIP 100 response' -clause ref: '5.2.10.4' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - -End group 1.7 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.8 'Unavailable resources' - -TP id : TP_IMST2_GM_EXC_01 -summary : 'P-CSCF-initiated call release due to unacceptable SDP offer in 200' -clause ref: '5.2.8.1.2, 6.2' -TP type : conformance -RQ ref : RQ_003_5073, RQ_003_5074, RQ_003_6004 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing unacceptable SDP_offer - } - then { - IUT sends 200_response to UE1 - } - when { - IUT receives ACK from UE1 - containing SDP_answer - } - then { - IUT sends BYE to UE1 - containing Reason_header indicating 503_response_code or 488_response_code - and - IUT sends ACK to UE2 - and IUT sends BYE to UE2 - containing Reason_header indicating 503_response_code or 488_response_code - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EXC_02 -summary : 'OPTIONAL: P-CSCF initiates call release due to encrypted SDP offer in SIP 200 response' -clause ref: '5.2.8.1.2, 6.2' -TP type : conformance -RQ ref : RQ_003_5073, RQ_003_5074, RQ_003_6005 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT configured_to_reject_encrypted_SDP_offers -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing encrypted SDP_offer - } - then { - IUT sends 200_response to UE1 - } - when { - IUT receives ACK from UE1 - containing SDP_answer - } - then { - IUT sends BYE to UE1 - containing Reason_header including 503_response_code or 488_response_code - and - IUT sends ACK to UE2 - and IUT sends BYE to UE2 - containing Reason_header including 503_response_code or 488_response_code - } -} - -End group 1.8 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.9 'SDP' - -TP id : TP_IMST2_GM_SDP_01 -summary : 'P-CSCF rejects INVITE with SDP offer with unacceptable media parameter with SIP 488 response' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6000 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing SDP_offer indicating unacceptable media_parameter - } - then { - IUT sends 488_response to UE1 - containing SDP_offer - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SDP_02 -summary : 'OPTIONAL: P-CSCF rejects INVITE with encrypted SDP offer' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6001 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT and - IUT configured_to_reject_encrypted_SDP_offers -} -ensure that { - when { - IUT receives INVITE from UE1 - containing encrypted SDP_offer - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SDP_03 -summary : 'P-CSCF forwards SIP response with unacceptable SDP media parameter offer in SIP 180 response to originating UE' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6002 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - containing SDP_offer indicating unacceptable media_parameter - } - then { - IUT sends 180_response to UE1 - } -} - -End group 1.9 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.10 'NAT Traversal' - --- This section only covers requirements that are specific to UE managed NAT traversal (Annex K of ES 283 003) --- Test purposes covered in sections 1.2 - 1.6 (clause 5.2 and 6.2 of ES 283 003) are not repeated - -TP id : TP_IMST2_GM_NAT_01 -summary : 'P-CSCF does not respond to unprotected REGISTER from UE if Security-Client header that does not specify UDP tunneling support support' -clause ref: 'Annex K.2.2.2 first numbered list 5)a)' -TP type : conformance -RQ ref : RQ_003_7000 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - containing Security-Client_header not indicating 'UDP-enc-tun support' - and containing topmost Via_header including IP_address different from 'IP source address' - } - then { - IUT sends no message - } -} - -End group 1.10 - -End group 1 diff --git a/tp/tplan/IMS_CTS_1Mw1Gm.tplan b/tp/tplan/IMS_CTS_1Mw1Gm.tplan deleted file mode 100644 index 838d36d..0000000 --- a/tp/tplan/IMS_CTS_1Mw1Gm.tplan +++ /dev/null @@ -1,3518 +0,0 @@ -TSS : NGN-IMS -Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' -Version : 1.0.0 -Date : 03.06.2008 -Author : 'STF346' - -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - -Group 2 'Mw focused behaviour' -Group 2.1 'General Capabilities' - -TP id : TP_IMST2_MW_GEN_01 -summary : 'All IMS CN components shall support SIP messages which are greater than 1300 bytes in length on Mw interface' -clause ref: '4.2A paragraph 1 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_4002 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing Message_Body greater than 1300 bytes - } - then { - IUT sends MESSAGE via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_02 -summary : 'A functional entity at the boundary of a trust domain shall remove the P-Access-Network-Info header - from any SIP message sent out of the trust domain' -clause ref: '4.4.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_4202 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding and - IMS not configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - not containing P-Access-Network-Info_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_03 -summary : 'P-CSCF generates the ICID and includes it in the icid parameter of the P-Charging-Vector header' -clause ref: '4.5.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_4084 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_04 -summary : 'REGISTER requests exchanged between a P-CSCF in the visited network and the S-CSCF in - the home network shall include the type 1 inter operator identifier (IOI)' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4204 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_05 -summary : 'REGISTER responses exchanged between a P-CSCF in the visited network and the S-CSCF - in the home network shall include the type 1 inter operator identifier (IOI)' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4204 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IMS and -} -ensure that { - when { - IUT receives REGISTER via Mw - } - then { - IUT sends response via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_06 -summary : 'SIP ACK requests that are exchanged between a S-CSCF of the home originating network and a S-CSCF of the home terminating network shall include a type 2 inter operator identifier (IOI).' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4205 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_sent_INVITE_and_has_received_200_response -} -ensure that { - when { - IUT receives ACK via Gm from UE1 addressed to UE2 - } - then { - IUT sends ACK addressed to UE2 via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_07 -summary : 'SIP 200 responses that are exchanged between a S-CSCF of the terminating originating network and a S-CSCF of the home network shall include a type 2 inter operator identifier (IOI) and forward the orig-ioi parameter from the P-Charging-Vector header in the initial request.' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4205 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE1 via Mw and - IUT has_sent_INVITE to UE1 via Gm -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - } - then { - IUT sends 200_response addressed to UE2 via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type2 - and including orig-ioi_parameter of initial INVITE - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_08 -summary : 'A S-CSCF shall not pass any CDF or OCF addresses within the P-Charging-Function-Addresses - header of SIP requests or responses sent to a visited network or UE' -clause ref: '4.5.5 paragraph 3' -TP type : conformance -RQ ref : RQ_003_4208 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_sent_INVITE_and_has_received_200_response -} -ensure that { - when { - IUT receives ACK via Gm from UE1 addressed to UE2 - } - then { - IUT sends ACK addressed to UE2 via Mw - not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_09 -summary : 'When the P-CSCF sends a SIP MESSAGE request to the UE, it shall remove the P-Charging-Function-Addresses and P-Charging-Vector headers before sending the message, if present.' -clause ref: '5.2.1 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5006 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Mw addressed to UE1 - containing P-Charging-Vector_headers - and containing P-Charging-Function-Addresses_header - } - then { - IUT sends MESSAGE to UE1 via Gm - not containing P-Charging-Vector_headers - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_10 -summary : 'When the P-CSCF sends a SIP 200 response to the UE, it shall remove the P-Charging-Function-Addresses and P-Charging-Vector headers before sending the message, if present.' -clause ref: '5.2.1 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5006 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Gm from UE1 addressed to UE2 and - IUT has_sent_MESSAGE via Mw addressed to UE2 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response originated by UE2 via Mw - containing P-Charging-Vector_headers - and containing P-Charging-Function-Addresses_header - } - then { - IUT sends 200_response to UE1 via Gm - not containing P-Charging-Vector_headers - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_11 -summary : 'Before forwarding a SIP MESSAGE request received from a UE, a P-CSCF shall remove any P-Charging-Function-Addresses and P-Charging-Vector headers received' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Charging-Vector_headers of UE1 - and containing P-Charging-Function-Addresses_header of UE1 - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Charging-Vector_headers of UE1 - and not containing P-Charging-Function-Addresses_header of UE1 - } -} --- Note: The MESSAGE request may contain P-Charging-Vector_headers and P-Charging-Function-Addresses_header --- populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_12 -summary : 'Before forwarding a SIP 200 response received from a UE, a P-CSCF shall remove any P-Charging-Function-Addresses and P-Charging-Vector headers received' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE originated by UE2 addressed to UE1 via Mw and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Charging-Vector_headers of UE1 - and containing P-Charging-Function-Addresses_header of UE1 - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Charging-Vector_headers of UE1 - and not containing P-Charging-Function-Addresses_header of UE1 - } -} --- Note: The 200 respone may contain P-Charging-Vector_headers and P-Charging-Function-Addresses_header --- populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_13 -summary : 'Before forwarding a SIP MESSAGE request received from a UE, a P-CSCF shall remove P-Access-Network-Info header if such header contains a "network-provided" parameter' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Access-Network-Info_header including network_provider_parameter - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Access-Network-Info_header - } -} --- Note: The MESSAGE request may contain P-Access-Network-Info_header populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_14 -summary : 'Before forwarding a SIP 200 response received from a UE, a P-CSCF shall remove P-Access-Network-Info header if such header contains a "network-provided" parameter' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE addressed to UE1 originated by UE2 via Mw and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response addressed to UE2 from UE1 via Gm - containing P-Access-Network-Info_header including network_provider_parameter - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Access-Network-Info_header - } -} --- Note: The 200 response may contain P-Access-Network-Info_header populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_15 -summary : 'A P-CSCF shall remove the P-Media-Authorization header from a SIP MESSAGE request from the UE before forwarding the message' -clause ref: '5.2.1 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5212 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Media-Authorization_header - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Media-Authorization_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_16 -summary : 'A P-CSCF shall remove the P-Media-Authorization header from a SIP 200 response from the UE before forwarding the message' -clause ref: '5.2.1 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5212 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_received_MESSAGE originated by UE2 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Media-Authorization_header - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Media-Authorization_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_17 -summary : 'When a P-CSCF receives SIP Redirect response (3xx), other than a 305 (Use Proxy) - response, to a request forwarded from the UE, it shall not resend the original message - to any of the URIs specified in the Contact header field of the 3xx response.' -clause ref: '5.2.1 paragraph 14' -TP type : conformance -RQ ref : RQ_003_5213 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE addressed to UE2 via Gm and - IUT has_sent_MESSAGE addressed to UE2 via Mw and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 3xx_response different to 305_response via Mw - containing contact_header including Contact_URI - } - then { - IUT not resends MESSAGE to Contact_URI via Mw - } -} - -End group 2.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.2 'Registration Procedures' - -TP id : TP_IMST2_MW_REG_01 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert a correct Path header containing SIP URI identifying the P-CSCF, Require header with path option tag, P-Charging-Vector header with the icid parameter and a type 1 orig-ioi parameter identifying the sending network but not including term-ioi parameter, and insert a P-Visited-Network-ID header identifying the visited network at the home network' -clause ref: '5.2.2 paragraph 2 items 1), 2), 3) and 7)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_with_an_entry_point to IMS and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - } - then { - IUT sends unprotected REGISTER via Mw - containing Path_header including SIP_URI of IMS_P-CSCF - and containing Require_header including path_tag_parameter - and containing P-Charging-Vector_header - including icid_parameter - and including orig-ioi_parameter indicating type1 'of the sending network' - and not including term-ioi_parameter indicating type1 - and containing P-Visited-Network-ID_header including visited_network_pre-provisioned_string - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_02 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "yes" into the Authorization header field if the REGISTER request was received protected with the security association and includes an authentication challenge response' -clause ref: '5.2.2 paragraph 2 item 4)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - including authentication_challenge_response_parameter - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating yes - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_03 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "yes" into the Authorization header field if the REGISTER request was received on the security association created during the last successful authentication procedure' -clause ref: '5.2.2 paragraph 2 item 4)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating yes - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_04 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "no" into the Authorization header field if the REGISTER request was not received protected with the security association and remove the Security-Client header if the header is present' -clause ref: '5.2.2 paragraph 2 item 5) a) and 6)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 not has_established_a_security_association -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - containing Security-Client_header - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating no - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -TP id : TP_IMST2_MW_REG_05 -summary : 'When a P-CSCF receives REGISTER request from the UE without protection and without Security-Client header then the P-CSCF shall return a SIP 4xx response' -clause ref: '5.2.2 paragraph 2 item 5)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - not containing Security-Client_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_06 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received with a temporary security association but without a Security-Verify header, then the P-CSCF shall return a 4xx response.' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - not containing Security-Verify_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_07 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via a temporary security association and the content of the Security-Verify and the Security-Client header do not match previous information then the P-CSCF shall reject the request by sending a 4xx response.' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header different to Security-Server_header of 401_response - and containing Security-Client_header equal to Security-Client_header of unprotected REGISTER - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_08 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via a temporary security association and Security-Verify header and Security-Client headers match previous information, the P-CSCF shall remove the Security-Verify and the Security-Client header' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header equal to Security-Server_header of 401_response - and containing Security-Client_header equal to Security-Client_header of unprotected REGISTER - } - then { - IUT sends REGISTER via Mw - not containing Security-Verify_header - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_09 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association, then the P-CSCF shall remove the Security-Client and Security-Verify headers if it is present' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header - and containing Security-Client_header - } - then { - IUT sends REGISTER via Mw - not containing Security-Verify_header - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_10 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association and the Security-Client header, then the P-CSCF shall return a suitable 4xx response' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - not containing Security-Client_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_11 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association and private user identity in the Authorization header differs from the one in the unprotected REGISTER request, then the P-CSCF shall return a 403 response' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Authorization_header including private_user_identity different to private_user_identity of unprotected REGISTER - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 403_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_12 -summary : 'When a P-CSCF receives SIP 401 (Unauthorized) response to a REGISTER request it shall remove the CK and IK values contained in the 401 (Unauthorized) response insert a Security-Server header in the response' -clause ref: '5.2.2 paragraph 33) 2) and 3)' -TP type : conformance -RQ ref : RQ_003_5023 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_REGISTER -} -ensure that { - when { - IUT receives 401_response via Mw - } - then { - IUT sends 401_response via Gm to UE1 - containing WWW-Authenticate_header - not including CK_parameter and not including IK_parameter - and containing Security-Server_header including 'P-CSCF security list and the parameters needed for the security association setup' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_13 -summary : 'When a P-CSCF receives REGISTER request from the UE without a security association, it shall insert a Path header containing SIP URI identifying the P-CSCF, a Require header with a path option tag, a P-Charging-Vector header with a icid parameter, a type 1 orig-ioi parameter, a type 1 orig-ioi parameter identifying the sending network and no type 1 term-ioi parameter, as well as a P-Visited-Network-ID header identifying the visited network at the home network.' -clause ref: '5.2.2A paragraph 2 item 1) - 5)' -TP type : conformance -RQ ref : RQ_003_5221 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 not has_established_a_security_association -} -ensure that { - when { - IUT receives REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing Path_header including SIP_URI of IUT_P-CSCF - and containing Require_header including path_tag_parameter - and containing P-Charging-Vector_header including icid_parameter - and including orig-ioi_parameter indicating type1 'of the sending network' - and not including term-ioi_parameter indicating type1 - and containing P-Visited-Network-ID_header including visited_network_pre-provisioned_string - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_14 -summary : 'Upon receipt of a SIP 200 (OK) response to an initial SIP REGISTER request, - a P-CSCF located in the visited network shall send a SIP SUBSCRIBE request - to the entry point of the home network' -clause ref: '5.2.3 paragraph 2 item 1) and 2)' -TP type : conformance -RQ ref : RQ_003_5044 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT - UE1 has_sent_initial_REGISTER -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw - containing Request-URI - and containing From_header including SIP_URI of IUT_P-CSCF - and containing To_header including SIP_URI indicating public_user_identity - and containing Event_header including reg_parameter - and containing Expires_header including 'a value higher than the value in the 200_response' - and containing P-Asserted-Identity_header including SIP_URI of IUT_P-CSCF 'inserted into the Path header during the registration of UE1' - and containing P-Charging-Vector_header including icid_parameter - } -} - -TP id : TP_IMST2_MW_REG_15 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" - parameter of its Authorization header is set to the value "no", the Authorization header - specifies a private user identity which has previously been used to register one or more - public user identities which have not yet expired and authentication is successful, - it shall perform network-initiated deregistration of the unexpired public user identities - previously registered by the user' -clause ref: '5.4.1.2.1, 5.4.1.2.2, 5.4.1.5 ' -TP type : conformance -RQ ref : RQ_003_5088 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating no - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header - } - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - } - then { - IUT sends 200_response via Mw - and IUT sends NOTIFY via Mw - containing NOTIFY_body including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_16 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" parameter in the Authorization header is set to "no" and the To field contains an unregistered public user identity, the S-CSCF shall send a 401 (Unauthorized) response to the originating UE including WWW-Authenticate header with a realm, RAND, AUTN, algorithm, IK , and CK parameters.' -clause ref: '5.4.1.2.1 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5089 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating no - and containing To_header including a not registered public_user_identity - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header including realm_parameter indicating 'a globally unique name' of the IUT_S-CSCF - and including RAND_parameter - and including AUTN_parameter - and including algorithm_parameter indicating 'AKAv1-MD5' - and including ik_parameter - and including ck_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_17 -summary : 'When an S-CSCF receives SIP REGISTER request without the "integrity-protected" parameter in the Authorization header, the S-CSCF shall perform the procedure for receipt of a REGISTER request without the "integrity-protected" parameter for the received public user identity and perform network-initiated de-registration if applicable' -clause ref: '5.4.1.2A paragraph 1, 5.4.1.5' -TP type : conformance -RQ ref : RQ_003_5410, RQ_003_5411 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 registered_public_user_identity_with_another_contact_address in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header not including integrity_protected_parameter - and containing Contact_header not including registered_public_user_identities - } - then { - IUT sends 200_response via Mw - and IUT sends NOTIFY via Mw - containing NOTIFY_body including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_18 -summary : 'When S-CSCF receives SIP REGISTER request without the "integrity-protected" parameter in the Authorization header and for existing contact information, it shall process the REGISTER request as if the "integrity-protected" parameter in the Authorization header was set to “yes”' -clause ref: '5.4.1.2A paragraph 18' -TP type : conformance -RQ ref : RQ_003_5415 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 for registered public_user_identity - containing Authorization_header not including integrity-protected_parameter - } - then { - IUT sends 200_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_19 -summary : 'When S-CSCF receives SIP REGISTER request without an Authorization header and for existing contact information, it shall process the REGISTER request as the "integrity-protected" parameter in the Authorization header was set to “yes”' -clause ref: '5.4.1.2A paragraph 18' -TP type : conformance -RQ ref : RQ_003_5415 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 for registered public_user_identity - not containing Authorization_header - } - then { - IUT sends 200_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_20 -summary : 'If a S-CSCF receives SIP REGISTER request from a UE and the request contains an Expires header which is set to a value shorter than the minimum time that the S-CSCF is able to process, it shall return a SIP 423 (Interval Too Brief) response containing Min-Expires header' -clause ref: '5.4.1.2A.1 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5416 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Expires_header indicating duration smaller than minimum - - } - then { - IUT sends 423_response via Mw - containing Min-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_21 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" parameter in the Authorization header is set to "yes", To header contains an unregistered public user identity, the S-CSCF shall send a 401 (Unauthorized) response to the originating UE including WWW-Authenticate header with realm, a RAND and AUTN, algorithm, ik, and the CK (Cipher Key) parameters.' -clause ref: '5.4.1.2.2' -TP type : conformance -RQ ref : RQ_003_5090 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - IUT configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - and containing To_header including a not registered public_user_identity - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header including realm_parameter indicating 'globally unique name' - and including RAND_parameter - and including AUTN_parameter - and including algorithm_parameter indicating 'AKAv1-MD5' - and including ik_parameter - and including ck_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_22 -summary : 'When an S-CSCF receives SIP REGISTER request containing an authentication challenge response from the UE and the integrity-protected parameter in the Authorization header is set to the value "yes", the S-CSCF shall return a SIP 200 (OK) response to the UE' -clause ref: '5.4.1.2.2' -TP type : conformance -RQ ref : RQ_003_5092 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - and including algorithm_parameter indicating 'AKAv1-MD5' - and including username_parameter indicating private_user_identity - and including response_parameter indicating valid challenge_response - and containing initial CallID_parameter - } - then { - IUT sends 200_response via Mw - containing Path_header - and containing P-Associated-URI_header including registered_public_user_identities - and containing Service-Route_header including SIP_URI indicating IUT_S-CSCF - and containing P-Charging-Function-Addresses_header - and containing P-Charging-Vector_header - and containing Contact_header including address of public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_23 -summary : 'If a S-CSCF receives SIP REGISTER request containing an authentication challenge response from the UE and the request is not the expected REGISTER and the integrity-protected parameter in the Authorization header is set to the value "yes", the S-CSCF shall return a SIP 403 (Forbidden) response to the UE' -clause ref: '5.4.1.2.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5420, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity-protected_parameter indicating yes - and containing unknown CallID_parameter - } - then { - IUT sends 403_response via Mw - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_24 -summary : 'When an S-CSCF receives SIP REGISTER request from the UE containing an - Authentication Synchronization (AUTS) directive indicating that the - Sequence Number (SQN) was out of range, the S-CSCF shall - return a SIP 401 (Unauthorized) or 403 (Forbidden)' -clause ref: '5.4.1.2.3 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5421, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including AUTS_parameter indicating invalid SQN_parameter - - } - then { - IUT sends 401_response or 403_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_25 -summary : 'When an S-CSCF receives SIP REGISTER request with the "integrity-protected" parameter in the Authorization header set to "yes" and neither the user identity received in the To header nor the private user identity received in the Authorization header of the REGISTER request match any of the S-CSCFs registered users, it shall return a SIP 500 (Server Internal Error) response to the UE' -clause ref: '5.4.1.2.3 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5423, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity-protected_parameter indicating yes - and not including private_user_identity matching previous registered public_user_identity - and containing To_header indicating public_user_identity not matching previous registered public_user_identity - } - then { - IUT sends 500_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_26 -summary : 'When an S-CSCF receives SIP REGISTER request which was expected to - carry the response to an authentication challenge but the request contains - no authentication challenge response from the UE and no Authentication Synchronization (AUTS) - parameters indicating that the Message Authentication Code (MAC) parameter was invalid - in the challenge, the S-CSCF shall return a SIP 403 (Forbidden) response to the UE.' -clause ref: '5.4.1.2.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5425, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE2 visiting IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives subsequent REGISTER via Mw originated by UE2 - containing Authorization_header not including authentication_challenge_response_parameter - and not including AUTS_parameter indicating invalid MAC_parameter - } - then { - IUT sends 403_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -End group 2.2 - -Group 2.3 'Initial request Procedures' - -TP id : TP_IMST2_MW_INI_01 -summary : 'When a P-CSCF receives SIP 2xx response to a SUBSCRIBE request for a previously registered public user identity - and the response indicates that continued subscription is required, it shall automatically refresh the subscription - 600 seconds before the expiration time if the initial subscription was for greater than 1200 seconds' -clause ref: '5.2.3 paragraph 12' -TP type : conformance -RQ ref : RQ_003_5045 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_continuous_subscription and - UE1 visiting IUT and - UE1 registered in IMS via IUT - IUT has_sent_SUBSCRIBE containing Expires_header indicating duration_parameter 'greater than 1200 seconds' -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw '600 seconds before expiration of duration_parameter time' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_02 -summary : 'When a P-CSCF receives SIP 2xx response to a SUBSCRIBE request for a previously registered public user identity - and the response indicates that continued subscription is required, it shall automatically refresh the subscription - when half of the time has expired if the initial subscription was for 1200 seconds or less' -clause ref: '5.2.3 paragraph 12' -TP type : conformance -RQ ref : RQ_003_5045 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_continuous_subscription and - UE1 visiting IUT and - UE1 registered in IMS via IUT - IUT has_sent_SUBSCRIBE indicating duration_parameter 'equal or less than 1200 seconds' -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw 'after half of the duration_parameter time has elapsed' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_03 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header from the last successful registration - or re-registration, then the P-CSCF shall either return a SIP 400 (Bad Request) - response and not forward the request or replace the received Route header value in the - request with the value of the Service-Route header received during the - last SIP 200 (OK) response for a registration or reregistration' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing Route_header not matching stored Service-Route_header - - } - then { - IUT not sends INVITE via Mw - and - IUT sends 400_response via Gm to UE1 - or - IUT sends INVITE via Mw - containing Route_header from 200_response 'of last registration' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_04 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, - it shall add its own address to the Via header and a add a P-Charging-Vector header with the icid parameter, - when adding its own SIP URI to the Record-Route header, build the P-CSCF SIP URI in a format that contains - the port number of the P-CSCF where it awaits subsequent requests from the called party, and either the - P-CSCF FQDN that resolves to the IP address or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing topmost Route_header indicating IMS - } - then { - IUT sends INVITE via Mw - containing Via_header including address of IUT_P-CSCF - and containing topmost Route_header indicating IMS - and containing Record-Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or indicating IP_address of IUT_P-CSCF - and containing P-Charging-Vector_header including icid_parameter - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_05 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, - it shall remove the P-Preferred-Identity header, if present, - and insert a P-Asserted-Identity header with a value, including the display name if previously stored during - registration representing the initiator of the request' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - and containing topmost Route_header indicating IMS - } - then { - IUT sends INVITE addressed to UE2 via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_06 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded request - for an initial dialog, it shall replace in the response its own Record Route entry - with its own SIP URI with the protected server port number of the security - association and either the P-CSCF FQDN or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 18' -TP type : conformance -RQ ref : RQ_003_5047 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE2 via Gm and - IUT has_sent_INVITE addressed to UE2 via Mw -} -ensure that { - when { - IUT receives 180_response from IMS addressed to UE1 via Mw - } - then { - IUT sends 180_response to UE1 via Gm - containing Record_Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF for security_association - and indicating IP_address of IUT_P-CSCF or indicating FQDN_address of IUT_P-CSCF - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_07 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded request - for an initial dialog, it shall replace in the response its own Record Route entry - with its own SIP URI with the protected server port number of the security - association and either the P-CSCF FQDN or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 18' -TP type : conformance -RQ ref : RQ_003_5047 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE2 via Gm and - IUT has_sent_INVITE addressed to UE2 via Mw -} -ensure that { - when { - IUT receives 200_response from IMS addressed to UE1 via Mw - } - then { - IUT sends 200_response to UE1 via Gm - containing Record_Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF for security_association - and indicating IP_address of IUT_P-CSCF or indicating FQDN_address of IUT_P-CSCF - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_08 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, it shall remove the P-Preferred-Identity - header, if present, and insert a P-Asserted-Identity header with - the value saved from the P-Called-Party-ID header that was received in - the initial request and the registration display name if available' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT has_stored_P-Called-Party-ID_header of UE1 and - IUT has_stored_display_name of UE1 -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 180_response via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_09 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, it shall remove the P-Preferred-Identity - header, if present, and insert a P-Asserted-Identity header with - the value saved from the P-Called-Party-ID header that was received in - the initial request and the registration display name if available' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT has_stored_P-Called-Party-ID_header of UE1 and - IUT has_stored_display_name of UE1 -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 200_response via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_10 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, if Via headers do not match the saved list - of Via headers received in the initial request corresponding to the same - dialog, it either discards the response or replaces the Via header with the ones from the initial request' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 180_response via Mw - or - IUT sends 180_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_11 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, if Via headers do not match the saved list - of Via headers received in the initial request corresponding to the same - dialog, it either discards the response or replaces the Via header with the ones from the initial request' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_12 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, with a Record-Route header including a list of URIs - different to the one received in the Record-Route header of the initial request, - discards the response or replaces the Record-Route header values with those received in the - initial request. - If a security association exists, the P-CSCF adds to the Record-Route header the port number of its own - Record-Route entry with its own SIP URI and the port number where it - awaits subsequent requests from the calling party and with either the P-CSCF - FQDN that resolves to its IP address; or the P-CSCF IP address; and - remove the comp parameter if present' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing Record-Route_header not matching stored Record-Route_header - } - then { - IUT not sends 180_response via Mw or - IUT sends 180_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and indicating port_number of Record-Route_header of IUT_P-CSCF - and indicating SIP_URI and port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF - and not including comp_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_13 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, with a Record-Route header including a list of URIs - different to the one received in the Record-Route header of the initial request, - discards the response or replaces the Record-Route header values with those received in the - initial request. - If a security association exists, the P-CSCF adds to the Record-Route header the port number of its own - Record-Route entry with its own SIP URI and the port number where it - awaits subsequent requests from the calling party and with either the P-CSCF - FQDN that resolves to its IP address; or the P-CSCF IP address; and - remove the comp parameter if present' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing Record-Route_header not matching stored Record-Route_header - } - then { - IUT not sends 200_response via Mw or - IUT sends 200_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and indicating port_number of Record-Route_header of IUT_P-CSCF - and indicating SIP_URI and port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF - and not including comp_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_14 -summary : 'When a P-CSCF receives any other response other than a SIP 1xx or a 2xx - to an initial request to a UE for a dialog and if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, it shall either discard the response or - replace the Via header values with those received in the initial request' -clause ref: '5.2.6.4 paragraph 27' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 4xx_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 4xx_response via Mw - or - IUT sends 4xx_response via Mw - containing Via_header indicating stored Via_header - } -} - -TP id : TP_IMST2_MW_INI_15 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request from a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The proxy MUST NOT - include a refresher parameter in the header field value' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - not containing Session-Expires_header - } - then { - IUT sends INVITE via Mw - containing Session-Expires_header not including refresher_parameter - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_16 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request from a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The duration should not be lower - than the value in the Min-SE header field in the request, if it is present' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - not containing Session-Expires_header - and containing Min-SE_header - } - then { - IUT sends INVITE via Mw - containing Session-Expires_header including duration_parameter greater than Min-SE_header - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_18 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request destined for a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The proxy MUST NOT - include a refresher parameter in the header field value' -clause ref: 'RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5068, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw originated by UE2 addressed to UE1 - not containing Session-Expires_header - } - then { - IUT sends INVITE via Gm to UE1 - containing Session-Expires_header not including refresher_parameter - and - IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_19 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request destined for a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The duration should not be lower - than the value in the Min-SE header field in the request, if it is present' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw originated by UE2 addressed to UE1 - not containing Session-Expires_header - and containing Min-SE_header - } - then { - IUT sends INVITE via Gm to UE1 - containing Session-Expires_header including duration_parameter greater than Min-SE_header - and - IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_20 -summary : 'When a P-CSCF receives an initial SIP INVITE request destined for a - UE it shall respond with a SIP 100 (Trying) provisional response before - forwarding the INVITE to the UE' -clause ref: '5.2.7.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5070, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - } - then { - IUT sends 100_response via Mw - and IUT sends INVITE via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_21 -summary : 'When a S-CSCF receives a response to an initial request and the response contains term-ioi parameters - and is not destined for an AS, the S-CSCF shall remove all received ioi parameters from the P-Charging-Vector header - before forwarding the response' -clause ref: '§5.4.3.2 ¶58' -TP type : conformance -RQ ref : RQ_003_5104 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_sent_INVITE from UE1 to UE2 via Mw -} -ensure that { - when { - IUT receives 200_response via Mw from UE2 addressed to UE1 - containing P-Charging-Vector_header including ioi_parameter - } - then { - IUT sends 200_response via Gm to UE1 - not containing P-Charging-Vector_header including ioi_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_22 -summary : 'When the S-CSCF receives an initial request for a new dialog and the Request URI contains a barred public user identity, - the S-CSCF shall reject the request by sending a SIP 404 (Not Found) response' -clause ref: '§5.4.3.3 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing Request_URI including barred_public_user_identity - } - then { - IUT sends 404_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_23 -summary : 'When the S-CSCF receives an initial request and the Request URI contains an invalid GRUU, - the S-CSCF shall reject the request by sending a SIP 4xx response' -clause ref: '§5.4.3.3 first numbered list 3A)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing Request_URI including invalid GRUU_parameter - } - then { - IUT sends 4xx_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_24 -summary : 'When the S-CSCF receives an initial request and the P-Asserted-Service header indicates a service that is not - subscribed-to by the user, the S-CSCF shall reject the request by sending a SIP 403 (Forbidden) response' -clause ref: '§5.4.3.3 first numbered list 3C)' -optional : true -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_unsubscribed_service -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing P-Asserted-Service_header indicating unsubscribed service - } - then { - IUT sends 403_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_25 -summary : 'When the S-CSCF receives an initial request without P-Asserted-Service header and the SDP offer indicates a service - that is not subscribed-to by the user, the S-CSCF shall reject the request by sending a SIP 403 (Forbidden) response' -clause ref: '§5.4.3.3 first numbered list 3D)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_unsubscribed_service -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - not containing P-Asserted-Service_header - and containing SDP_offer indicating unsubscribed service - } - then { - IUT sends 403_response via Mw addressed to UE2 - } -} - -End group 2.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.4 'Standalone Procedures' - -TP id : TP_IMST2_MW_STA_01 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header from the last successful registration - or re-registration, then the P-CSCF shall either return a SIP 400 (Bad Request) - response and not forward the request or replace the received Route header value in the - request with the value of the Service-Route header received during the - last SIP 200 (OK) response for a registration or reregistration' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Service-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT not sends MESSAGE via Mw - and IUT sends 400_response via Gm - or - IUT sends MESSAGE via Mw - containing Route_header including stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_02 -summary : 'When a P-CSCF receives request for a standalone transaction from a UE, - it shall remove the P-Preferred-Identity header, if present, and insert a - P-Asserted-Identity header with a value representing the initiator of the - request and including display name if previously stored during registration' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_03 -summary : 'When a P-CSCF receives request for a standalone transaction from a UE - it shall add a P-Charging-Vector header with the icid parameter' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Service-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_04 -summary : 'When a P-CSCF receives any response to a forwarded request for a - standalone transaction, it shall forward the response to the UE' -clause ref: '5.2.6.3 paragraph 53' -TP type : conformance -RQ ref : RQ_003_5051 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE from UE1 via Gm addressed to UE2 and - IUT has_sent_MESSAGE via Mw -} -ensure that { - when { - IUT receives 200_response via Mw originated by UE2 addressed to UE1 - } - then { - IUT sends 200_response via Gm to UE1 - } -} - - -TP id : TP_IMST2_MW_STA_05 -summary : 'When a P-CSCF receives request for a standalone transaction or a request - for an unknown method (that does not relate to an existing dialog) destined - for a UE, it shall add its own address to the top of the received list of Via header - in a format that contains the protected server port number of the security - association, if established, between the UE and the P-CSCF and either the P-CSCF FQDN - that resolves to the IP address of the security association or the P-CSCF IP - address of the security association' -clause ref: '5.2.6.4 paragraph 80' -TP type : conformance -RQ ref : RQ_003_5060 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE via Mw originated by UE2 addressed to UE1 - } - then { - IUT sends MESSAGE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF for security_association - and not containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_06 -summary : 'When a P-CSCF receives any response to a request for a standalone - transaction destined for a UE, if the list of Via headers does - not match the saved list of Via headers received in the request, - either discard the response or replace the Via header values with - those received in the request' -clause ref: '5.2.6.4 paragraph 89' -TP type : conformance -RQ ref : RQ_003_5061 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_07 -summary : 'When a P-CSCF receives any response to a request for a standalone - transaction destined for a UE, remove the P-Preferred-Identity header, - if present, and insert a P-Asserted-Identity header with the saved public user - identity from the P-Called-Party-ID header of the request plus the display name if - previously stored during registration' -clause ref: '5.2.6.4 paragraph 89' -TP type : conformance -RQ ref : RQ_003_5061 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT has_stored_public_user_identity_from_P-Called-Party-ID_header -} -ensure that { - when { - IUT receives 200_response from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 200_response via Mw addressed to UE2 - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored public_user_identity - and including stored display_name_parameter - } -} - -End group 2.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.5 'Subsequent Request Procedures' - -TP id : TP_IMST2_MW_SUB_01 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, - that does not relate to an existing dialog in which the originator is involved - then the P-CSCF shall send a SIP 403 (Forbidden) response back to the - originator and not forward the request' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog with UE2 -} -ensure that { - when { - IUT receives BYE via Gm from UE1 - containing Call-ID_header not indicating 'existent dialog' - } - then { - IUT not sends BYE via Mw - and IUT sends 403_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_02 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header for the existing dialog - then the P-CSCF shall either return a SIP 400 (Bad Request) response and not forward the request or replace - the received Route header value in the request with the stored value of the Service-Route header for the same dialog' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Record-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog with UE2 -} -ensure that { - when { - IUT receives BYE via Gm from UE1 containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends BYE via Mw - and IUT sends 400_response via Gm - or - IUT sends BYE via Mw containing Route_header including stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_03 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, from a UE, - for dialogs that are not INVITE dialogs, it shall add a P-Charging-Vector header - with the icid parameter' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_a_SUBSCRIBE_dialog with UE1 -} -ensure that { - when { - IUT receives PUBLISH via Gm - } - then { - IUT sends PUBLISH via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_04 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE, - if the request does not relate to an existing dialog in which the originator is involved, - then the P-CSCF shall send a SIP 403 (Forbidden) response back to the originator and not forward the request' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - containing Call-ID_header not indicating 'existent dialog' - } - then { - IUT not sends BYE via Gm addressed to UE1 - and IUT sends 403_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_05 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE - containing a list list of Route headers different to the stored list of Record-Route - headers for the same dialog, then the P-CSCF shall either return a SIP 400 (Bad Request) response - and not forward the request or replace the Route header value in the request with the stored list - of Record-Route headers for the same dialog' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends BYE via Gm to UE1 - and IUT sends 400_response via Mw - or - IUT sends BYE via Gm to UE1 - containing stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_06 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE - for dialogs that are not INVITE dialogs, add a P-Charging-Vector header with the icid parameter' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_a_SUBSCRIBE_dialog with UE1 -} -ensure that { - when { - IUT receives PUBLISH via Mw addressed to UE1 - } - then { - IUT sends PUBLISH via Gm to UE1 - containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_07 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE, - it shall add its own address to the top of the received list of Via header in a format that - contains the protected server port number of the security association if one is established between the UE - to the P-CSCF and either the P-CSCF FQDN that resolves to the IP address of the security association or the - P-CSCF IP address of the security association, and no P-Charging-Vector header with icid parameter shall be sent' -clause ref: '5.2.6.4 paragraph 95' -TP type : conformance -RQ ref : RQ_003_5062 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_Dialog with UE1 -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 originated by UE2 - } - then { - IUT sends BYE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF for security_association - and not containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_08 -summary : 'When a P-CSCF receives a response to a subsequent request, other than a target refresh request, - if the list of Via headers does not match the saved list of Via headers received in the subsequent request, - the P-CSCF shall either discard the response or replace the Via header values with those received - in the subsequent request' -clause ref: '5.2.6.4 paragraph 103' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_Dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_BYE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_BYE via Gm to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_09 -summary : 'If a P-CSCF receives a subsequent request within a dialog for which it has - previously initiated session release, the P-CSCF shall terminate the request - and answer it with a SIP 481 (Call/Transaction Does Not Exist) response' -clause ref: '5.2.8.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5241 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog and - IUT has_received_BYE from UE1 and - IUT has_sent_BYE via Mw } - -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - } - then { - IUT sends 481_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_10 -summary : 'When the registration lifetime of the only public user identity currently registered of the calling user expires - while there is still an active dialog that include this user and where the session was initiated with the public - user identity currently registered, then the S-CSCF shall send a SIP BYE request destined for the called user and - shall send a SIP BYE request destined for the calling user' -clause ref: '§5.4.5.1.2A ¶1' -TP type : conformance -RQ ref : RQ_003_5140 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - registration of UE1 expires - } - then { - IUT sends BYE via Gm1 to UE1 - and - IUT sends BYE via Mw addressed to UE2 - containing Request-URI indicating stored Contact_header from initial INVITE - and containing To_header indicating To_header from 200_response - and containing From_header indicating From_header from initial INVITE - and containing Call-ID_header indicating From_header from initial INVITE - and containing CSeq_header as stored for direction_calling_to_called - and containing Route_header as stored for dialog - and containing Reason_header - } -} - -End group 2.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.6 'Target Refresh Procedures' - -TP id : TP_IMST2_MW_TAR_01 -summary : 'When a P-CSCF receives a target refresh request not ot relating to - an existing dialog from a UE, it shall answer the request by sending a - SIP 403 (Forbidden) response back to the originator and not forward the request' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh UPDATE from UE1 addressed to UE2 via Gm - } - then { - IUT not sends target_refresh UPDATE via Mw to IMS - and - IUT sends 403_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_02 -summary : 'When a P-CSCF receives a target refresh request from a UE, containing a list of URIs - in the Route header different to the stored values of the Record-Route headers for the same dialog, - then the P-CSCF shall either return a SIP 400 (Bad Request) response and not forward the request - or replace the received Route header value in the request with the stored list of Record-Route - headers for the same dialog' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5079 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Record-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 addressed to UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends INVITE via Mw - and IUT sends 400_response via Gm - or - IUT sends INVITE via Mw - containing Route_header including stored Record-Route_header - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_03 -summary : 'When a P-CSCF receives a target refresh request from a UE, it shall add its own address to the Via header - and to the Record-Route header, the P-CSCF SIP URI shall be built in a format that contains the port number - of the P-CSCF where it awaits responses (in Via header) and subsequent requests (in Record-Route header) - from the called party, and either the P-CSCF FQDN that resolves to the IP address or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5080, RQ_003_5079 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 addressed to UE2 - } - then { - IUT sends INVITE via Mw - containing Via_header including port_number of IUT_P-CSCF - and including IP_address of IUT_P-CSCF or including FQDN_address of IUT_P-CSCF - and containing Record-Route_header including SIP_URI of IUT_P-CSCF indicating port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF - or indicating IP_address of IUT_P-CSCF - and containing P-Charging-Vector_header including updated access-network-charging-info_parameter - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_04 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded target refresh request, - it shall replace the address and port number of its own Record Route - entry to the same value as for the response to the initial request for the dialog' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5049 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association in IUT - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE via Mw - -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends 200_response via Gm to UE1 - containing Record_Route_header of IUT_P-CSCF - indicating same address and same port_number of IUT_P-CSCF of response to initial INVITE - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_05 -summary : 'When a P-CSCF receives a target refresh request for a dialog destined for a UE - it shall add its own address to the top of the received list of Via header in a - format that if a security association exists between the UE and the - P-CSCF, contains the protected server port number of the security association and either - the P-CSCF FQDN that resolves to the IP address of the security association or - the P-CSCF IP address of the security association' -clause ref: '5.2.6.4 paragraph 32' -TP type : conformance -RQ ref : RQ_003_5057, RQ_003_5081 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT_P-CSCF and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 - IUT has_received_target_refresh_INVITE via Mw addressed to UE1 and - IUT has_sent_target_refresh_INVITE via Gm to UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE via Mw addressed to UE1 - } - then { - IUT sends target_refresh INVITE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including as topmost the IP_address of IUT_P-CSCF or the FQDN_address of IUT_P-CSCF - and containing Record-Route_header indicating as topmost the SIP_URI of IUT_P-CSCF - and IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_06 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, either discard the response or replace the Via header - values with those received in the request' -clause ref: '5.2.6.4 paragraph 67' -TP type : conformance -RQ ref : RQ_003_5058 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_07 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if a security association exists, - rewrite the address and port number of its own Record-Route entry to - the same value as for the response to the initial request for the - dialog and remove the comp parameter' -clause ref: '5.2.6.4 paragraph 67' -TP type : conformance -RQ ref : RQ_003_5058, RQ_003_5082 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Record-Route_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - } - then { - IUT sends 200_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and containing P-Charging-Vector_header including updated access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_08 -summary : 'When a P-CSCF receives any response other than the SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, either discard the response or replace the Via header - values with those received in the request' -clause ref: '5.2.6.4 paragraph 74' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 4xx_response via Mw - or - IUT sends 4xx_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_09 -summary : 'When a P-CSCF receives any response other than the SIP 1xx or 2xx response - to a target refresh request for a dialog destined for a UE, if a security - association exists, rewrite the address and port number of its own - Record-Route entry to the IP address and the port number where it awaits subsequent - requests from the calling party and remove the comp parameter' -clause ref: '5.2.6.4 paragraph 74' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 via Gm - } - then { - IUT sends 4xx_response via Mw - containing Record-Route_header indicating IP_address of IUT_P-CSCF - and indicating port_number of IUT_P-CSCF - and not including comp_parameter - } -} - -End group 2.6 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.7 'Emergency' - -TP id : TP_IMST2_MW_EME_01 -summary : 'When P-CSCF receives from an unregistered user an initial request other than a SIP REGISTER - for a dialog and the Request-URI contained in the request matches one of the emergency service - identifiers, it shall insert an emergency service URN into the Request-URI field and - select an E-CSCF and add the URI of the selected E-CSCF to the topmost Route header and - continue with normal initial SIP request process procedure' -clause ref: '5.2.10.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5250, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 not registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - containing Request_URI indicating emergency_service_URN - and containing Route_header including topmost SIP_URI of IUT_E-CSCF - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_02 -summary : 'When P-CSCF receives from an unregistered user an initial request other than a SIP REGISTER - for a dialog and the Request-URI contained in the request matches one of the emergency service - identifiers, it shall insert an emergency service URN into the Request-URI field and - select an E-CSCF and add the URI of the selected E-CSCF to the topmost Route header and - continue with normal initial SIP request process procedure but without removing the - P-Preferred-Identity header and inserting a P-Asserted-Identity header' -clause ref: '5.2.10.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5250, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 not registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - and containing P-Preferred-Identity_header - } - then { - IUT sends INVITE via Mw - containing P-Preferred-Identity_header - and not containing P-Asserted-Identity_header - and containing Request-URI indicating emergency_service_URN and - and containing Route_header including topmost SIP_URI of IUT_E-CSCF - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_03 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers, - the P-CSCF shall include an emergency service URN in the Request-URI' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_04 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers - the P-CSCF shall include an emergency service URN in the Request-URI and if the - P-Preferred-Identity header is present and carries the registered emergency public user identity, - remove that header and insert a P-Asserted-Identity header with the registered emergency public - user identity a second P-Asserted-Identity header with the tel-URI associated with the registered - emergency public user identity' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - and containing P-Preferred-Identity_header including emergency_public_user_identity - } - then { - IUT sends INVITE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including emergency_public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of emergency_public_user_identity - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_05 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers, - the P-CSCF shall include an emergency service URN in the Request-URI and if the - P-Preferred-Identity header is present and carries the tel-URI associated with the registered - emergency public user identity, remove that header and insert a P-Asserted-Identity header - with the tel-URI associated with the registered emergency public user identity and a second - P-Asserted-Identity header with the registered emergency public user identity' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - and containing P-Preferred-Identity_header including tel_URI of emergency_public_user_identity - } - then { - IUT sends INVITE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including emergency_public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of emergency_public_user_identity - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_06 -summary : 'When a P-CSCF receives target refresh request for an emergency dialog with - the Request-URI containing GRUU, it shall obtain the UE IP address and UE - protected server port related to the GRUU contained in the Request-URI and - rewrite the Request-URI with that UE IP address and UE protected server port' -clause ref: '5.2.10.3 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5255 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions and - UE1 has_established_an_emergency_session -} -ensure that { - when { - IUT receives target_refresh INVITE via Gm from UE1 - containing Request-URI including GRUU - } - then { - IUT sends INVITE via Mw - containing Request-URI including UE1 IP_address and protected_server_port_number - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_07 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, the P-CSCF shall - include an emergency service URN in the Request-URI field' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_08 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, - if the public user identity included in the P-Preferred-Identity header - matches one of the P-CSCFs registered public user identities remove the - P-Preferred-Identity header from the received request, insert a P-Asserted-Identity - header that includes the public user identity that was present in the - P-Preferred-Identity header and add a second P-Asserted identity header that - contains the tel URI associated with the public user identity' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 via Gm - containing Request-URI including emergency_service_URN - and containing P-Preferred-Identity_header including registered public_user_identity - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including registered public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_09 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, if the tel URI associated - with one of the registered public user identities is included in the - P-Preferred-Identity header remove the P-Preferred-Identity header, - insert a P-Asserted-Identity header that includes the tel URI that was present - in the P-Preferred-Identity header and add a second P-Asserted-Identity header - that contains a public user identity' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 via Gm - containing Request-URI including emergency_service_URN - and containing P-Preferred-Identity_header including tel_URI of public_user_identity - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including tel_URI of public_user_identity - and containing second P-Asserted-Identity_header including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_10 -summary : 'When a P-CSCF receives for a user registered for non-emergency services a target - refresh request for an emergency dialog with the Request-URI containing GRUU, it - shall obtain the UE IP address and UE protected server port related to the GRUU - contained in the Request-URI and rewrite the Request-URI with that UE IP address - and UE protected server port' -clause ref: '5.2.10.4 paragraph 10' -TP type : conformance -RQ ref : RQ_003_5258 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions and - UE1 has_established_an_emergency_session -} -ensure that { - when { - IUT receives target_refresh INVITE via Gm from UE1 - containing Request-URI including GRUU - } - then { - IUT sends INVITE via Mw - containing Request-URI including UE1 IP_address and protected_server_port_number - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_11 -summary : 'A P-CSCF shall respond to a SIP INVITE request for an emergency session with a SIP 380 - response if it is not capable of or not configured to handle the requested - emergency sessions' -clause ref: '5.2.10.5 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5259 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI including emergency_service_URN - } - then { - IUT sends 380_response to UE1 - } -} - -End group 2.7 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.8 'SDP' - -TP id : TP_IMST2_MW_SDP_01 -summary : 'When an S-CSCF receives a SIP request containing a SDP offer in which there are media parameters - which are not permitted by local policy or by user subscription, it shall send a SIP 488 (Not Acceptable Here) - response containing a SDP payload which contains all or an acceptable subset, of the media types, codecs - and other SDP parameters permitted by local policy or user subscription' -clause ref: '§6.3 ¶1' -TP type : conformance -RQ ref : RQ_003_6008 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT sends 488_response via Mw - containing SDP_offer - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_02 -summary : 'When an S-CSCF receives a SIP request containing an encrypted SDP offer, it may reject the request' -clause ref: '§6.3 ¶1' -TP type : conformance -RQ ref : RQ_003_6009 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_encrypted_SDP_offers } - -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - containing encrypted SDP_offer - } - then { - IUT sends 4xx_response via Mw - and IUT not sends INVITE via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_03 -summary : 'When an P-CSCF receives a SIP request containing a SDP answer to a SDP offer - which was contained in a previously forwarded SIP response, other than a SIP 200 (OK), - the P-CSCF shall not examine the media parameters in the received SDP offer' -clause ref: '§6.2 ¶2' -TP type : conformance -RQ ref : RQ_003_6002 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives 180_response via Mw addressed to UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT not sends 4xx_response via Mw - and IUT sends 180_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_04 -summary : 'When a P-CSCF receives a SIP ACK request containing an SDP answer in response to a SDP offer - which was previously forwarded in a SIP 200 (OK) response and which contained media parameters not - permitted by local policy, it shall terminate the session' -clause ref: '§6.2 ¶3' -TP type : conformance -RQ ref : RQ_003_6004 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT sends 200_response via Mw - } - when { - IUT receives ACK via Mw for UE1 - containing SDP_answer - } - then { - IUT sends BYE via Mw - and IUT sends BYE via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_05 -summary : 'When a P-CSCF receives a SIP ACK request containing an SDP answer in response to an - encrypted SDP offer which was previously forwarded in a SIP 200 (OK) response, it may - terminate the session' -clause ref: '§6.2 ¶3' -TP type : conformance -RQ ref : RQ_003_6005 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_encrypted_SDP_offers } - -ensure that { - when { - IUT receives 200_response via Gm from UE1 - containing encrypted SDP_offer - } - then { - IUT sends 200_response via Mw - } - when { - IUT receives ACK via Mw for UE1 - containing encrypted SDP_answer - } - then { - IUT sends BYE via Mw - and IUT sends BYE via Gm to UE1 - } -} - -End group 2.8 - -End group 2 diff --git a/tp/tplan/IMS_CTS_Defs.tplan b/tp/tplan/IMS_CTS_Defs.tplan deleted file mode 100644 index d17d597..0000000 --- a/tp/tplan/IMS_CTS_Defs.tplan +++ /dev/null @@ -1,483 +0,0 @@ --- --- headers --- -def header clause -def header type -def header optional - - --- --- entities --- - --- entities within IUT -def entity IUT_NASS -- entity within IUT -def entity IUT_I-CSCF -- entity within IUT -def entity IUT_P-CSCF -- entity within IUT -def entity IUT_S-CSCF -- entity within IUT -def entity IUT_IBCF -- SUT functional element -def entity IUT_E-CSCF - --- interfaces to IUT -def entity Gm -def entity Gm1 -def entity Gm2 -def entity Mw -def entity Mw1 -def entity Mw2 -def entity Ic1 -def entity Ic2 -def entity AS1 -def entity AS2 -def entity ISC -def entity ISC1 -def entity ISC2 - - --- IMS entities -def entity IMS -def entity IMS_P-CSCF - --- UE entities -def entity UE -- used in 1Gm -def entity UE1 -- user connected to IUT -def entity UE2 -- user connected to another IMS network (or IUT as second UE) - --- events -def event REGISTER { - Request_URI, - - -- all headers are postfixed by '_header' - Authorization_header, - Security-Client_header, - Security-Verify_header, - Path_header, - Require_header, - P-Visited-Network-ID_header, - Service-Route_header, - WWW-Authenticate_header, - Request-URI, - To_header, - From_header, - Contact_header, - Expires_header -} - -def event INVITE { - Request_URI, - - Via_header, - Record-Route_header, - Supported_header, - P-Charging-Vector_header, - P-Asserted-Identity_header, - P-Preferred-Identity_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header, - Route_header, - Session-Expires_header, - Min-SE_header, - Content-Type_header, - any_header -- used when all headers of the INVITE request are described -} - - -def event ACK { - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header, - P-Charging-Vector_header -} - -def event UPDATE { - Via_header, - Record-Route_header -} - -def event PUBLISH { - P-Preferred-Identity_header, - P-Asserted-Identity_header -} - -def event CANCEL { - P-Charging-Vector_header -} - -def event BYE { - Request_URI, - - P-Charging-Vector_header, - To_header, - From_header, - Call-ID_header, - CSeq_header, - Route_header, - Reason_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header -} - -def event MESSAGE { - P-Charging-Vector_header, - P-Charging-Vector_headers, - P-Charging-Function-Addresses_header, - P-Media-Authorization_header, - - Message_Body -} - -def event SUBSCRIBE { - From_header, - To_header, - Event_header, - Expires_header, - P-Asserted-Identity_header, - P-Charging-Vector_header -} - -def event INFO { - P-Charging-Vector_header, - - P-Preferred-Identity_header, - P-Asserted-Identity_header, - P-Asserted-Service_header, - Route_header -} - -def event PRACK { - P-Charging-Vector_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header -} - - -def event NOTIFY { - P-Charging-Vector_header -} - - -def event Unknown_Method { - P-Preferred-Identity_header, - P-Asserted-Identity_header -} - -def event DNS_Query - -def event DNS_Response { - NAPTR_Resource_Record -} - -def event 100_response -def event 1xx_response { - Record_Route_header -} -def event 180_response -def event 2xx_response { - Record_Route_header -} -def event 200_response { - SDP_offer, - Path_header, - P-Associated-URI_header, - Service_Route_header, - P-Charging-Function-Addresses_header, - P-Charging-Vector_header, - Contact_header - -} -def event 3xx_response { - Contact_header -} -def event 305_response -def event 380_response -def event 4xx_response -def event 401_response { - Security-Server_header -} -def event 400_response -def event 403_response -def event 404_response -def event 408_response -def event 422_response { - Min-SE_header -} -def event 423_response { - Min-Expires_header -} -def event 480_response -def event 481_response -def event 488_response { - SDP_offer -} -def event 5xx_response -def event 500_response -def event 504_response -def event 6xx_response -def event 604_response -def event response -- any xxx response - --- --- values and parameters --- - --- URIs -def value Tel_URI -def value Tel_URI_E.164_Number -def value SIP_URI -def value Contact_URI -def value GRUU -- global routable user agent URI - - --- SIP message parameters (which have an ABNF rule associated with them) --- postfixed by parameter -def value term-ioi_parameter -def value orig-ioi_parameter -def value ioi_parameter -- equals inter operator identifier -def value icid_parameter -- NOTE: correct values defined in 3GPP TS 32.260 !! -def value comp_parameter -def value sequence_number_parameter -def value reg_parameter -def value CK_parameter -def value IK_parameter -def value integrity-protected_parameter -def value network_provider_parameter -def value access-network-charging-info_parameter -def value security_association_parameters -def value user_part_parameter -- corresponds to userinfo rule in RFC ABNF -def value path_tag_parameter -def value display_name_parameter -def value authentication_challenge_response_parameter -def value duration_parameter -- corresponds to delta-seconds rule in RFC ABNF -def value refresher_parameter -def value RAND_parameter -def value AUTN_parameter -def value algorithm_parameter -def value integrity_protected_parameter -def value realm_parameter -def value dsl-location_parameter -def value SQN_parameter -def value AUTS_parameter -def value MAC_parameter -def value GRUU_parameter -def value media_parameter -def value CallID_parameter -def value tokenized-by_parameter -def value orig_parameter -def value username_parameter -def value response_parameter - --- identities -def value public_user_identity -def value private_user_identity -def value registered_public_user_identities -def value default_registered_public_user_identity -def value barred_public_user_identity -def value non_barred_public_user_identity -def value emergency_service_identifier -def value emergency_public_user_identity -def value unknown_user - --- addresses -def value address -def value contact_address -def value IP_address -def value FQDN_address -- FQDN equals "fully qualified domain name" -def value OCF_addresses -def value CDF_addresses - --- port numbers -def value port_number -def value via_port_number -- port number in accordance with procedures in RFC 3261 -def value unprotected_port_number -def value protected_server_port_number - --- values of parameters -def value type1 -def value type2 -def value type3 -def value yes -def value visited_network_pre-provisioned_string -def value ENUM_entry -def value SESSION_TERMINATED -def value SESSION_CONTINUED -def value security_association -def value emergency_service_URN -def value line-identifier -def value duration -def value service -def value 488_response_code -def value 503_response_code -def value SDP_offer -def value SDP_answer -def value NOTIFY_body -def value timer_option_tag -def value acceptable_expiration -def value challenge_response - --- initial filter criteria -def value iFC1 -def value iFC2 - --- --- conditions --- - --- conditions to express that an entity is configured to act in a given way -def condition configured_with_one_entry_point_to_home_network -- remote IMS has one entry point -def condition configured_with_two_entry_points_to_home_network -- remote IMS has two entry points -def condition configured_with_a_terminating_unregistered_filter_criterion -def condition configured_with_an_entry_point -def condition configured_for_IMS-ALG -def condition configured_for_SIP_screening -def condition configured_for_registration_with_security_association -def condition configured_for_topology_hiding -- SUT requires topology hiding -def condition configured_for_screening -- SUT applies screening policy -def condition configured_for_storing_the_display_name_at_registration -def condition configured_for_being_in_the_same_trust_domain -def condition configured_for_continuous_subscription -def condition configured_with_a_connection_to_a_NASS_which_supports -def condition configured_for_requiring_periodic_refreshment -def condition configured_with_Policy_and_Charging_Rules_Function -def condition configured_for_emergency_sessions -def condition configured_for_establishing_security_association -def condition configured_to_reject_encrypted_SDP_offers -- PICS item A.3/18.1.1 and 18.1.3 -def condition configured_to_reject_unsubscribed_service -def condition configured_for_IMS_AKA_authentication - -def condition configured_with_an_iFC_designed_to_contact -def condition configured_with_an_iFC1_designed_to_contact -def condition configured_with_an_iFC2_designed_to_contact - -def condition configured_for_being_within_same_IMS_network - --- some special conditions -def condition has_indicated_the_handling_of_the_whole_dialog - -- a proxy or an AS indicates that using the record routing mechanism (adding its SIP_URI to the Record-Route header) -def condition configured_for_forwarding_MESSAGE_directly_to_AS1 - -- see (24.229 - 5.3.2.1) - -- or The HSS maintains the address information of the AS hosting the PSI for the "PSI user". In this case, the AS address - -- information for the PSI is returned to the I-CSCF in the location query response, in which case the I-CSCF will - -- forward the request directly to the AS hosting the PSI (23.228 - 5.4.12.2) - --- conditions to express that something has been initiated -def condition has_initiated_security_association_establishment - --- conditions to express that something has been established -def condition has_established_a_security_association -def condition has_established_a_temporary_security_association -def condition has_established_an_emergency_session -def condition has_established_a_SUBSCRIBE_dialog -def condition has_established_an_INVITE_dialog --including ACK - --- conditions to express that something has been terminated -def condition has_terminated_dialog - --- conditions to express that an entity has stored something -def condition has_stored_Service-Route_header -def condition has_stored_P-Called-Party-ID_header -def condition has_stored_display_name -def condition has_stored_Record-Route_header -def condition has_stored_Via_header -def condition has_stored_Cseq_header -def condition has_stored_public_user_identity_from_P-Called-Party-ID_header - --- conditions to express that an entity has received a message -def condition has_received_REGISTER -def condition has_received_MESSAGE -def condition has_received_INVITE -def condition has_received_target_refresh_INVITE -def condition has_received_BYE -def condition has_received_non_final_response_with_SDPoffer -def condition has_received_200_response - - --- conditions to express that an entity has sent a message --- prefixed by has_sent -def condition has_sent_INVITE -def condition has_sent_target_refresh_INVITE -def condition has_sent_MESSAGE -def condition has_sent_REGISTER -def condition has_sent_initial_REGISTER -def condition has_sent_SUBSCRIBE -def condition has_sent_BYE -def condition has_sent_200_response - --- conditions to express that an entity has sent a message and received another one -def condition has_sent_unprotected_REGISTER_and_has_received_401_response -def condition has_sent_INVITE_and_has_received_200_response - --- conditions to characterise values -def condition has_greater_priority_than -def condition at_least_one -def condition has_default_handling -def condition has_no_default_handling - --- simple conditions to describe relation between two entities -def condition visiting -def condition registered -def condition deregistered -def condition registered_for_emergency_service -def condition registered_public_user_identity_with_another_contact_address -def condition registered_public_user_identity_with_current_private_user_identity -def condition configured_as_trusted_domain -def condition configured_as_untrusted_domain - --- --- words --- - --- actions of entities -def word resends -def word expires - --- attributes of Events -def word initial -def word unexpected -def word protected -def word unprotected -def word target_refresh -def word emergency -def context {~emergency registered} - --- attributes of Headers -def word content -def word topmost -def word stored - --- attributs of Values or Parameters -def word additional -def word subsequent -def word incremented -def word invalid -def word valid -def word including -def word matching -def word second -def word different -def context {~different than} -def word updated -def word another -def word other -def word previous -def word minimum -def word acceptable -def word unacceptable -def word encrypted -def word unknown -def word unsubscribed - --- directions -def word addressed -def word originated -def word by -def context {~addressed to} -def context {~originated by} -def word via -def word on -def word direction_calling_to_called - --- terms -def word registration -def word dialog \ No newline at end of file diff --git a/tp/tplan/IMS_CTS_ISC.tplan b/tp/tplan/IMS_CTS_ISC.tplan deleted file mode 100644 index f28748d..0000000 --- a/tp/tplan/IMS_CTS_ISC.tplan +++ /dev/null @@ -1,811 +0,0 @@ -TSS : IMS_CTS --- Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' --- Version : 1.0.0 --- Date : 13.05.2008 --- Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4 'ISC focused behaviour' -Group 4.1 'General Capabilities' - -TP id : TP_IMST2_ISC_GEN_01 -summary : 'SIP MESSAGE requests that are exchanged between the S-CSCF and any AS based on initial filter criteria shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_GEN_02 -summary : 'Responses to SIP MESSAGE requests that are exchanged between the S-CSCF and any AS shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE and - IUT has_sent_MESSAGE to AS1 via ISC and - IUT has_received_MESSAGE from AS1 via ISC and - IUT has_sent_MESSAGE to UE2 via GM and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_GEN_03 -summary : 'SIP MESSAGE requests that are exchanged between the I-CSCF and any AS shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - -End group 4.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.2 'Registration Procedures' - -TP id : TP_IMST2_ISC_REG_01 -summary : 'An IMS shall support 3rd-party registration or registration with the AS in the same trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - } - then { - IUT sends a REGISTER to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - and containing P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - and containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_REG_02 -summary : 'An IMS shall support 3rd-party registration or registration with the AS outside the trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - } - then { - IUT sends a REGISTER to AS1 via ISC - not containing P-Access-Network-Info_header - and not containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - and containing P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_REG_03 -summary : 'An IMS shall support 3rd-party deregistration with the AS in the same trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 registered in IUT and - IUT configured_with_an_entry_point to AS1 and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - containing Expires_header indicating 0 - } - then { - IUT sends a REGISTER to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - } -} - -End group 4.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.3 'Initial requests' - -TP id : TP_IMST2_ISC_INI_01 -summary : 'When S-CSCF receives any 1xx or 2xx response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS inside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5127 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 180_response from UE2 addressed to UE1 - } - then { - IUT sends 180_response to AS1 via ISC - containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_02 -summary : 'When S-CSCF receives any 1xx or 2xx response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS inside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5127 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_01 -summary : 'When S-CSCF receives 180 response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS outside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5439 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 180_response from UE2 addressed to UE1 - containing P-Charging-Vector_header including access-network-charging-info_parameter - } - then { - IUT sends 180_response to AS1 via ISC - containing P-Charging-Vector_header not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_02 -summary : 'When S-CSCF receives SIP 200 response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS outside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5439 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - containing P-Charging-Vector_header including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_06 -summary : 'When S-CSCF receives no SIP response from the AS for an SIP INVITE request and the iFC has default handling set to SESSION_TERMINATED then it does not forward the request to another AS and returns a SIP 408 response to the originating UE' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT has_sent_INVITE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the INVITE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for INVITE and - iFC1 has_greater_priority_than iFC2 and -} -ensure that { - when { - IUT receives no response from AS1 via ISC1 - } - then { - IUT sends 408_response to UE1 - and IUT not sends INVITE to AS2 via ISC2 - } -} - -End group 4.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.4 'standalone requests' - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When the S-CSCF receives SIP MESSAGE request it forwards the request to an AS within the same trust domain as the IUT' -TP type : conformance -RQ ref : RQ_003_5097 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - AS1 configured_for_being_in_the_same_trust_domain as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing a P-Asserted-Service_header - and containing topmost Route_header indicating SIP_URI of AS1 - and containing second Route_header indicating SIP_URI of IUT_S-CSCF - and containing a P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When S-CSCF receives 5xx from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS.' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 5xx_response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_02 -summary : 'When S-CSCF receives 408 response from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 408_response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_03 -summary : 'WWhen S-CSCF receives no SIP response from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives no response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_04 -summary : 'When S-CSCF receives 5xx response from the AS for a SIP MESSAGE request and the iFC has default handling set to SESSION_TERMINATED then it returns the response to the UE and does not forward the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 5xx_response from AS1 via ISC1 - } - then { - IUT sends 5xx_response to UE1 - and IUT not sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_05 -summary : 'When S-CSCF receives 408 response from the AS for a SIP MESSAGE request and the iFC has default handling set to SESSION_TERMINATED then it returns the response to the UE and does not forward the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 408_response from AS1 via ISC1 - } - then { - IUT sends 408_response to UE1 - and IUT not sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When S-CSCF receives SIP 200 response from the AS for a SIP MESSAGE request then it forwards it to the UE.' -clause ref: '5.4.3.2 paragraph 53' -TP type : conformance -RQ ref : RQ_003_5434 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for the MESSAGE and - IUT has_sent_MESSAGE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from AS1 via ISC - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'S-CSCF forwards to an Application Server (AS) the response to a SIP MESSAGE request from a served user or from a PSI that initiated the standalone transaction.' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5105 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 containing type3 orig-ioi_parameter and - IUT has_sent_MESSAGE to UE2 via GM and - IUT has_sent_MESSAGE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - including type3 orig-ioi_parameter from the initial MESSAGE - and including type3 term-ioi_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When a S-CSCF receives SIP MESSAGE request destined for an unregistered user it forwards the request to the AS' -clause ref: '§5.4.3.3 paragraph 55' -TP type : conformance -RQ ref : RQ_003_5114 -role : IMS -- General -config ref: CF_1Gm1ISC -with { UE1 registered in IUT and - UE2 not registered in IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE to AS1 via ISC - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When the I-CSCF receives SIP MESSAGE request containing P-Charging-Vector header including icid parameter it forwards it to the AS' -clause ref: '§5.3.2.1 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5130 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - containing P-Charging-Vector_header including icid_parameter - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_02 -summary : 'When the I-CSCF receives SIP MESSAGE request containing P-Charging-Vector header not including icid parameter then it adds this parameter prior to forwarding it to the AS' -clause ref: '§5.3.2.1 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5130 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - containing P-Charging-Vector_header not including icid_parameter - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including icid_parameter - } -} - -End group 4.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.5 'subsequent requests' - -TP id : TP_IMST2_ISC_SUB_01 -summary : 'When S-CSCF receives SIP ACK request then it forwards it to an AS outside the trusted domain' -clause ref: '5.4.3.2 paragraph 72' -TP type : conformance -RQ ref : RQ_003_5107 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - IUT has_received_200_response from UE2 and - IUT has_sent_200_response to UE1 and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives ACK from UE1 } - then { - IUT sends ACK to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - } -} - -End group 4.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.6 'target refresh requests' - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives from the served user a target refresh request for a dialog then it forwards it to an AS outside the trusted domain and returns a 100 response to the UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5106 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives SIP reINVITE request from a UE within an established dialog then it forwards it to an AS inside the home network of the S-CSCF and returns a 100 response to the UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5442 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - AS1 configured_for_being_within_same_IMS_network as IUT_S-CSCF and -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_02 -summary : 'When the S-CSCF receives SIP reINVITE request from a UE within an established dialog then it forwards it to an AS outside the home network of the S-CSCF without charging information and returns a 100 response to the originating UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5442 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives SIP 200 (OK) response to a SIP reINVITE request then forwards it to an AS outside the home network of the S-CSCF without charging information' -clause ref: '5.4.6.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5444 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_within_same_IMS_network as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE to UE2 via Gm and - IUT has_sent_target_refresh_INVITE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from UE2 -- 200_OK for ReINVITE - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_02 -summary : 'When S-CSCF receives SIP 200 (OK) response to a SIP reINVITE request then it forwards it to an AS located inside the home network of the S-CSCF' -clause ref: '5.4.6.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5444 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE to UE2 via Gm and - IUT has_sent_target_refresh_INVITE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from UE2 -- 200_OK for ReINVITE - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } -} - -End group 4.6 - -End group 4 diff --git a/tp/tplan/IMS_CTS_Ic.tplan b/tp/tplan/IMS_CTS_Ic.tplan deleted file mode 100644 index e6399ff..0000000 --- a/tp/tplan/IMS_CTS_Ic.tplan +++ /dev/null @@ -1,695 +0,0 @@ -TSS : IMS_CTS --- Title : 'IP Multimedia Subsystem (IMS) Network-to-Network Interface (NNI) Interoperability Test Purposes' --- Version : 1.0.0 --- Date : 13.05.2008 --- Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3 'Ic focused behaviour' -Group 3.1 'General Capabilities' - -TP id : TP_IMST2_IC_GEN_01 -summary : 'When an IBCF receives SIP REGISTER request from within its own network, it shall add its own - routable SIP URI to the top of the Path header' -clause ref: '5.10.2.1 1), 5.10.4.1' -TP type : conformance -RQ ref : RQ_003_5500 -role : IMS -- General -config ref: CF_1Ic1Gm -- Tester acting as UE and home network offering one Ic -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network -} -ensure that { - when { - IUT receives REGISTER from UE1 - } - then { - IUT sends REGISTER via Ic1 - containing topmost Path_header indicating SIP_URI of IUT_IBCF - } -} - -End group 3.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.2 'Registration Procedures' - -TP id : TP_IMST2_IC_REG_01 -summary : 'When an IBCF receives a SIP 3xx (Redirection) response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall resend the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -- Tester acting as UE and home network offering 2 different Ics -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives 3xx_response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_02 -summary : 'When an IBCF receives SIP 480 (Temporarily Unavailable) response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall forward the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -- Tester acting as UE and home network offering 2 different Ics -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives 480_response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_03 -summary : 'When an IBCF receives no response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall forward the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives no response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_01 -summary : 'If an IBCF receives a SIP 3xx (Redirection) response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives 3xx_response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_02 -summary : 'If an IBCF receives a SIP 480 (Temporarily Unavailable) response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives 480_response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_03 -summary : 'If an IBCF receives no response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 2)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives no response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_01 -summary : 'When an IBCF receives a SIP REGISTER request from an non-trusted domain outside its own network, - it shall send a SIP 403 (Forbidden) response to the sender of the request.' -clause ref: '5.10.3.1 1)' -TP type : conformance -RQ ref : RQ_003_5513 -role : IMS -- General -config ref: CF_1Ic -with { IMS configured_as_untrusted_domain for IUT -} -ensure that { - when { - IUT receives REGISTER via Ic1 - } - then { - IUT sends 403_response via Ic1 - } -} - -End group 3.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.3 'Initial request Procedures' - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives an initial SIP INVITE request from within its own network it encrypts all Via header URIs except the one of the IBCF prior to forwarding the request.' -clause ref: '5.10.2.2 1) 2) 4) 5), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5503 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - } - then { - IUT sends INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - not containing P-Charging-Vector_header - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a 180 response to a forwarded initial INVITE request and network topology hiding is required it shall not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.2.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5506, RQ_003_5138 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE via Ic1 -} -ensure that { - when { - IUT receives 180_response via Ic1 - } - then { IUT sends the 180_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_02 -summary : 'When an IBCF receives a 200 response to a forwarded initial INVITE request and network topology hiding is required it shall not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.2.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5506, RQ_003_5138 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE via Ic1 -} -ensure that { - when { - IUT receives 200_response via Ic1 - } - then { IUT sends the 200_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives any SIP request, other than a SIP REGISTER request, from a non-trusted domain and the - topmost Route header in the request contains the orig parameter, the IBCF shall send a SIP 403 (Forbidden) - response to the originator of the request.' -clause ref: '5.10.3.2 ¶1' -TP type : conformance -RQ ref : RQ_003_5517 -role : IMS -- General -config ref: CF_1Ic -with { IMS configured_as_untrusted_domain for IUT -} -ensure that { - when { - IUT receives INVITE via Ic1 - containing topmost Route_header including orig_parameter - } - then { - IUT sends 403_response via Ic1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a SIP INVITE request from a trusted domain outside its own network and the topmost Route header in the request does not contain the orig parameter, it shall return a SIP 100 response and not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.3.2 1) 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5518 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IMS configured_as_trusted_domain for IUT -} -ensure that { - when { - IUT receives INVITE via Ic1 - containing Via_header including topmost SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends 100_response via Ic1 - and IUT sends INVITE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When the IBCF receives an INVITE request and the IBCF requires the periodic refreshment of the session it shall add a Session-Expires prior to forwarding it to the UE. ' -clause ref: '5.10.3.2 ¶10' -TP type : conformance -RQ ref : RQ_003_5520 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_requiring_periodic_refreshment -} -ensure that { - when { - IUT receives INVITE via Ic1 - } - then { - IUT sends INVITE to UE1 - containing Session-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a valid 180 response from within its own network it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the response to other networks' -clause ref: '5.10.3.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5521 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE via Ic1 and - IUT has_sent_INVITE to UE1 -} -ensure that { - when { - IUT receives 180_response from UE1 - } - then {IUT sends 180_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_02 -summary : 'When an IBCF receives a valid 200 response from within its own network it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the response to other networks' -clause ref: '5.10.3.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5521 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE via Ic1 and - IUT has_sent_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then {IUT sends 200_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF processes a SIP request or response that contains a contact address which is a Globally Routable User agent URI (GRUU), it shall replace the contact address with an address which is also a GRUU.' -clause ref: '5.10.5 ¶4' -TP type : conformance -RQ ref : RQ_003_5527 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT has_received_INVITE via Ic1 containing Contact_header indicating GRUU and - IUT has_sent_INVITE to UE1 containing Contact_header indicating GRUU and - IUT configured_for_IMS-ALG -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then { - IUT sends 200_response - containing Contact_header indicating GRUU via Ic1 - } -} - -End group 3.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.4 'standalone request Procedures' - -TP id : TP_IMST2_IC_STA_01 -summary : 'When an IBCF receives an initial SIP request other than a SIP REGISTER or SIP INVITE from within its own network, it shall add its own URI as the topmost Via header and encrypt all other Via header and exclude charging related headers prior to forwarding the request to other networks' -clause ref: '5.10.2.2 1) 2) 4) 5), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5504 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - UE1 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE via Ic1 - containing Via_header including topmost SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - and not containing P-Charging-Vector_header - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'When the IBCF receives an INVITE request and the IBCF requires the periodic refreshment of the session it shall add a Session-Expires prior to forwarding it to other networks.. ' -clause ref: '5.10.2.2 ¶10, RFC4028' -TP type : conformance -RQ ref : RQ_003_5505 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - } - then { - IUT sends the INVITE via Ic1 - containing Session-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'When an IBCF receives a SIP request, other than a SIP REGISTER request or a SIP INVITE request, from a trusted domain outside its own network it shall decrypt all encrypted Via headers prior to forwarding the request to the UE' -clause ref: '5.10.3.2 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5519 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IMS configured_as_trusted_domain for IUT -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends MESSAGE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'The IBCF shall handle requests addressed to its currently valid GRUUs when received outside of the dialog in which the GRUU was provided.' -clause ref: '5.10.5 ¶6' -TP type : conformance -RQ ref : RQ_003_5528 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_IMS-ALG -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing To_header indicating GRUU of IUT_IBCF - } - then { - IUT sends MESSAGE to UE1 - } -} - -End group 3.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.5 'subsequent request Procedures' - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives an SIP request other than a SIP REQISTER request or a SIP INVITE request from within its own network and subsequent to an initial request it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the request to other networks..' -clause ref: '5.10.2.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5509 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives BYE from UE1 - } - then { - IUT sends the BYE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives a response from outside its own network to a request forwarded subsequent to an initial request and network topology hiding is required is shall not encrypt any headers prior to forwarding the response to other networks..' -clause ref: '5.10.2.3 ¶7, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5510 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 and - IUT has_received_BYE from UE1 and - IUT has_sent_BYE via Ic1 -} -ensure that { - when { - IUT receives 200_response via Ic1 - } - then { - IUT sends 200_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives a SIP MESSAGE request from outside its own network subsequent to an initial request, then it shall decrypt any headers prior to forwarding the request to the UE.' -clause ref: '5.10.3.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5523 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends MESSAGE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_02 -summary : 'When an IBCF receives a SIP BYE request from outside its own network subsequent to an initial request, then it shall decrypt any headers prior to forwarding the request to the UE..' -clause ref: '5.10.3.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5523 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives BYE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends BYE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'WWhen an IBCF receives a SIP 200 response from within its own network to a SIP request forwarded subsequent to an initial request it shall add its own URI to the Via header and encrypt all other Via headers prior to forwarding the response to other networks.' -clause ref: '5.10.3.3 ¶6, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5524 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 and - IUT has_received_BYE via Ic1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then { - IUT sends 200_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - -End group 3.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.6 'subsequent request Procedures' - -TP id : TP_IMST2_IC_TAR_01 -summary : 'When an IBCF receives a target refresh request from within its own network it shall respond with a SIP 100 response, add its own URI to the Via header and encrypt all other Via headers prior to forwarding the request to other networks.' -clause ref: '5.10.2.3 1) 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5508 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 - } - then { - IUT sends 100_response to UE1 - and IUT sends target_refresh INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_TAR_01 -summary : 'When an IBCF receives a target refresh request from outside its own network subsequent to an initial request it shall decrypt all Via headers before forwarding it to the UE.' -clause ref: '5.10.3.3 1) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5522 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends 100_response via Ic1 - and IUT sends target_refresh INVITE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - -End group 3.6 - -End group 3 diff --git a/tp/tplan/LogicDefs.tplan b/tp/tplan/LogicDefs.tplan deleted file mode 100644 index ef0467d..0000000 --- a/tp/tplan/LogicDefs.tplan +++ /dev/null @@ -1,10 +0,0 @@ - --- Logic expressions -def word than -def word bigger -def context {~bigger than} -def word smaller -def context {~smaller than} -def word equal -def context {~equal to} - diff --git a/tp/tplan/UnitDefs.tplan b/tp/tplan/UnitDefs.tplan deleted file mode 100644 index cf47ba6..0000000 --- a/tp/tplan/UnitDefs.tplan +++ /dev/null @@ -1,16 +0,0 @@ - --- Units - --- memory size -def unit bit -def unit bits - -def unit byte -def unit bytes -def unit mbyte -def unit mbytes -def unit gbyte -def unit gbytes -def unit tbyte -def unit tbytes - diff --git a/tp/tplan/UsefulDefs.tplan b/tp/tplan/UsefulDefs.tplan deleted file mode 100644 index 43cfbda..0000000 --- a/tp/tplan/UsefulDefs.tplan +++ /dev/null @@ -1,14 +0,0 @@ - --- Useful expressions -def word same -def word both - -def word for -def word while - -def word this - -def word set - --- george NEW -def word greater -- GitLab