1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20
21%%
22%%----------------------------------------------------------------------
23%% Purpose: Externalize/internalize Megaco/H.248 messages
24%%----------------------------------------------------------------------
25
26-module(megaco_erl_dist_encoder_mc).
27
28-behaviour(megaco_edist_compress).
29
30-export([
31	 encode/1, encode/2,
32         decode/1, decode/2
33	]).
34
35
36-include("megaco_message_internal.hrl").
37-include_lib("megaco/src/app/megaco_internal.hrl").
38
39
40%%----------------------------------------------------------------------
41%% Megaco compress a Megaco record into a binary
42%% Return {ok, DeepIoList} | {error, Reason}
43%%----------------------------------------------------------------------
44
45encode(M) ->
46    e(M, 1).
47
48encode(M, Vsn) ->
49    ?d("encode -> entry with"
50       "~n   M:   ~p"
51       "~n   Vsn: ~p", [M, Vsn]),
52    Result = e(M, Vsn),
53    ?d("encode -> "
54       "~n   Result: ~p", [Result]),
55    Result.
56
57decode(M) ->
58    d(M, 1).
59
60decode(M, Vsn) ->
61    ?d("decode -> entry with"
62       "~n   M:   ~p"
63       "~n   Vsn: ~p", [M, Vsn]),
64    Result = d(M, Vsn),
65    ?d("decode -> "
66       "~n   Result: ~p", [Result]),
67    Result.
68
69
70el(L,  V)  when is_list(L) -> [e(T, V) || T <- L];
71el(L, _V)                  -> L.
72dl(L,  V)  when is_list(L) -> [d(T, V) || T <- L];
73dl(L, _V)                  -> L.
74
75ell(L,  V) when is_list(L) -> [el(T, V) || T <- L];
76ell(L, _V)                 -> L.
77dll(L,  V) when is_list(L) -> [dl(T, V) || T <- L];
78dll(L, _V)                 -> L.
79
80e(asn1_NOVALUE, _) ->
81    {1};
82e('NULL', _V) ->
83    {2};
84e(sendRecv, _V) ->
85    {3};
86e(recvOnly, _V) ->
87    {4};
88e(restart, _V) ->
89    {5};
90e(mediaToken, _V) ->
91    {6};
92e(eventsToken, _V) ->
93    {7};
94e(signalsToken, _V) ->
95    {8};
96e(digitMapToken, _V) ->
97    {9};
98e(statsToken, _V) ->
99    {10};
100e(packagesToken, _V) ->
101    {11};
102e(h221, _V) ->
103    {12};
104e(h223, _V) ->
105    {13};
106e(h226, _V) ->
107    {14};
108e(v76, _V) ->
109    {15};
110
111e({'MegacoMessage', asn1_NOVALUE, {'Message', 1 = V, Mid, Body}}, _) ->
112    {20, e(Mid, V), e(Body, V)};
113e({'MegacoMessage', asn1_NOVALUE, {'Message', 2 = V, Mid, Body}}, _) ->
114    {21, e(Mid, V), e(Body, V)};
115e({'MegacoMessage', asn1_NOVALUE, {'Message', V, Mid, Body}}, _) ->
116    {22, V, e(Mid, V), e(Body, V)};
117e({'MegacoMessage', AuthHeader, {'Message', 1 = V, Mid, Body}}, _) ->
118    {23, e(AuthHeader, V), V, e(Mid, V), e(Body, V)};
119e({'MegacoMessage', AuthHeader, {'Message', 2 = V, Mid, Body}}, _) ->
120    {24, e(AuthHeader, V), V, e(Mid, V), e(Body, V)};
121e({'MegacoMessage', AuthHeader, {'Message', V, Mid, Body}}, _) ->
122    {25, V, e(AuthHeader, V), V, e(Mid, V), e(Body, V)};
123e({'MegacoMessage', AuthHeader, Mess}, V) ->
124    {26, e(AuthHeader, V), e(Mess, V)};
125e({'Message', V, Mid, Body}, _) ->
126    {27, V, e(Mid, V), e(Body, V)};
127
128e({domainName, {'DomainName', Name, asn1_NOVALUE}}, _V) ->
129    {30, Name};
130e({domainName, {'DomainName', Name, PortNumber}}, _V) ->
131    {31, Name, PortNumber};
132e({domainName, N}, V) ->
133    {32, e(N, V)};
134e({'DomainName', Name, asn1_NOVALUE}, _V) ->
135    {33, Name};
136e({'DomainName', Name, PortNumber}, _V) ->
137    {34, Name, PortNumber};
138e({ip4Address, {'IP4Address', Addr, asn1_NOVALUE}}, _V) ->
139    {35, Addr};
140e({ip4Address, {'IP4Address', Addr, PortNumber}}, _V) ->
141    {36, Addr, PortNumber};
142e({ip4Address, A}, V) ->
143    {37, e(A, V)};
144e({'IP4Address', Addr, asn1_NOVALUE}, _V) ->
145    {38, Addr};
146e({'IP4Address', Addr, PortNumber}, _V) ->
147    {39, Addr, PortNumber};
148e({ip6Address, {'IP6Address', Addr, asn1_NOVALUE}}, _V) ->
149    {40, Addr};
150e({ip6Address, {'IP6Address', Addr, PortNumber}}, _V) ->
151    {41, Addr, PortNumber};
152e({ip6Address, A}, V) ->
153    {42, e(A, V)};
154e({'IP6Address', Addr, asn1_NOVALUE}, _V) ->
155    {43, Addr};
156e({'IP6Address', Addr, PortNumber}, _V) ->
157    {44, Addr, PortNumber};
158
159e({transactions, [Transaction]}, V) ->
160    {50, e(Transaction, V)};
161e({transactions, Transactions}, V) ->
162    {51, el(Transactions, V)};
163e({messageError, {'ErrorDescriptor', EC, asn1_NOVALUE}}, _V) ->
164    {52, EC};
165e({messageError, {'ErrorDescriptor', EC, ET}}, _V) ->
166    {53, EC, ET};
167e({messageError, Error}, V) ->
168    {54, e(Error, V)};
169e({transactionRequest, {'TransactionRequest', TransId, Actions}}, V) ->
170    {55, TransId, el(Actions, V)};
171e({transactionPending, {'TransactionPending', TransId}}, _V) ->
172    {56, TransId};
173e({transactionReply, {'TransactionReply', TransId, asn1_NOVALUE, TransRes}}, V) ->
174    {57, TransId, e(TransRes, V)};
175e({transactionReply, {'TransactionReply', TransId, 'NULL', TransRes}}, V) ->
176    {58, TransId, e(TransRes, V)};
177e({transactionReply, {'TransactionReply', TransId, ImmAckReq, TransRes}}, V) ->
178    {59, TransId, e(ImmAckReq, V), e(TransRes, V)};
179e({transactionResponseAck, T}, V) ->
180    {60, el(T, V)};
181e({'TransactionAck', FirstAck, asn1_NOVALUE}, _V) ->
182    {61, FirstAck};
183e({'TransactionAck', FirstAck, LastAck}, _V) ->
184    {62, FirstAck, LastAck};
185
186e({'ErrorDescriptor', EC, asn1_NOVALUE}, _V) ->
187    {70, EC};
188e({'ErrorDescriptor', EC, ET}, _V) ->
189    {71, EC, ET};
190
191e({'ActionRequest', Cid, CtxReq, CtxAAR, [CmdReq]}, V) ->
192    {80, Cid, e(CtxReq, V), e(CtxAAR, V), e(CmdReq, V)};
193e({'ActionRequest', Cid, CtxReq, CtxAAR, CmdReqs}, V) ->
194    {81, Cid, e(CtxReq, V), e(CtxAAR, V), el(CmdReqs, V)};
195
196e({'ContextRequest', P, E, T}, V) when V < 3 ->
197    {90, e(P, V), e(E, V), el(T, V)};
198e({'ContextRequest', P, E, T, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
199  when V >= 3 ->
200    {91, e(P, V), e(E, V), el(T, V)};
201e({'ContextRequest', P, E, T, IC, asn1_NOVALUE, asn1_NOVALUE}, V)
202  when V >= 3 ->
203    {92, e(P, V), e(E, V), el(T, V), e(IC, V)};
204e({'ContextRequest', P, E, T, IC, CP, asn1_NOVALUE}, V)
205  when V >= 3 ->
206    {93, e(P, V), e(E, V), el(T, V), e(IC, V), el(CP, V)};
207e({'ContextRequest', P, E, T, IC, CP, CL}, V)
208  when V >= 3 ->
209    {94, e(P, V), e(E, V), el(T, V), e(IC, V), el(CP, V), el(CL, V)};
210
211e({'ContextAttrAuditRequest', P, E, T}, V) when V < 3 ->
212    {100, e(P, V), e(E, V), e(T, V)};
213e({'ContextAttrAuditRequest', P, E, T,
214   asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
215  when V >= 3 ->
216    {101, e(P, V), e(E, V), e(T, V)};
217e({'ContextAttrAuditRequest', P, E, T,
218   IC, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
219  when V >= 3 ->
220    {102, e(P, V), e(E, V), e(T, V),
221     e(IC, V)};
222e({'ContextAttrAuditRequest', P, E, T,
223   IC, CPA, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
224  when V >= 3 ->
225    {103, e(P, V), e(E, V), e(T, V),
226     e(IC, V), el(CPA, V)};
227e({'ContextAttrAuditRequest', P, E, T,
228   IC, CPA, SP, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
229  when V >= 3 ->
230    {104, e(P, V), e(E, V), e(T, V),
231     e(IC, V), el(CPA, V), e(SP, V)};
232e({'ContextAttrAuditRequest', P, E, T,
233   IC, CPA, SP, SE, asn1_NOVALUE, asn1_NOVALUE}, V)
234  when V >= 3 ->
235    {105, e(P, V), e(E, V), e(T, V),
236     e(IC, V), el(CPA, V), e(SP, V), e(SE, V)};
237e({'ContextAttrAuditRequest', P, E, T,
238   IC, CPA, SP, SE, SIC, asn1_NOVALUE}, V)
239  when V >= 3 ->
240    {106, e(P, V), e(E, V), e(T, V),
241     e(IC, V), el(CPA, V), e(SP, V), e(SE, V), e(SIC, V)};
242e({'ContextAttrAuditRequest', P, E, T,
243   IC, CPA, SP, SE, SIC, SL}, V)
244  when V >= 3 ->
245    {107, e(P, V), e(E, V), e(T, V),
246     e(IC, V), el(CPA, V), e(SP, V), e(SE, V), e(SIC, V), e(SL, V)};
247
248e({'CommandRequest', Cmd, asn1_NOVALUE, asn1_NOVALUE}, V) ->
249    {110, e(Cmd, V)};
250e({'CommandRequest', Cmd, 'NULL', asn1_NOVALUE}, V) ->
251    {111, e(Cmd, V)};
252e({'CommandRequest', Cmd, asn1_NOVALUE, 'NULL'}, V) ->
253    {112, e(Cmd, V)};
254e({'CommandRequest', Cmd, 'NULL', 'NULL'}, V) ->
255    {113, e(Cmd, V)};
256e({'CommandRequest', Cmd, Opt, WR}, V) ->
257    {114, e(Cmd, V), e(Opt, V), e(WR, V)};
258
259e({'TopologyRequest', From, To, Dir}, 1 = V) ->
260    {120, e(From, V), e(To, V), e(Dir, V)};
261e({'TopologyRequest', From, To, Dir, SID}, 2 = V) ->
262    {121, e(From, V), e(To, V), e(Dir, V), e(SID, V)};
263e({'TopologyRequest', From, To, Dir, SID, asn1_NOVALUE}, V) when (V >= 3) ->
264    {122, e(From, V), e(To, V), e(Dir, V), e(SID, V)};
265e({'TopologyRequest', From, To, Dir, SID, TDE}, V) when (V >= 3) ->
266    {123, e(From, V), e(To, V), e(Dir, V), e(SID, V), e(TDE, V)};
267
268e({modReq, {'AmmRequest', TID, []}}, V) ->
269    {130, el(TID, V)};
270e({modReq, {'AmmRequest', TID, [Desc]}}, V) ->
271    {131, el(TID, V), e(Desc, V)};
272e({modReq, {'AmmRequest', TID, Descs}}, V) ->
273    {132, el(TID, V), el(Descs, V)};
274e({addReq, {'AmmRequest', TID, []}}, V) ->
275    {133, el(TID, V)};
276e({addReq, {'AmmRequest', TID, [Desc]}}, V) ->
277    {134, el(TID, V), e(Desc, V)};
278e({addReq, {'AmmRequest', TID, Descs}}, V) ->
279    {135, el(TID, V), el(Descs, V)};
280e({'AmmRequest', TID, Descs}, V) ->
281    {136, el(TID, V), el(Descs, V)};
282
283e({subtractReq, {'SubtractRequest', TID, asn1_NOVALUE}}, V) ->
284    {140, el(TID, V)};
285e({subtractReq, {'SubtractRequest', TID, AudDesc}}, V) ->
286    {141, el(TID, V), e(AudDesc, V)};
287e({'SubtractRequest', TID, asn1_NOVALUE}, V) ->
288    {142, el(TID, V)};
289e({'SubtractRequest', TID, AudDesc}, V) ->
290    {143, el(TID, V), e(AudDesc, V)};
291
292e({auditValueRequest, AR}, V) ->
293    {150, e(AR, V)};
294
295e({'AuditRequest', TID, AudDesc}, V) when V < 3 ->
296    {160, e(TID, V), e(AudDesc, V)};
297e({'AuditRequest', TID, AudDesc, asn1_NOVALUE}, V) when V >= 3 ->
298    {161, e(TID, V), e(AudDesc, V)};
299e({'AuditRequest', TID, AudDesc, TIDs}, V) when V >= 3 ->
300    {162, e(TID, V), e(AudDesc, V), el(TIDs, V)};
301
302e({actionReplies, [AR]}, V) ->
303    {170, e(AR, V)};
304e({actionReplies, ARs}, V) ->
305    {171, el(ARs, V)};
306
307e({'ActionReply', CID, asn1_NOVALUE, asn1_NOVALUE, [CmdRep]}, V) ->
308    {180, CID, e(CmdRep, V)};
309e({'ActionReply', CID, asn1_NOVALUE, asn1_NOVALUE, CmdRep}, V) ->
310    {181, CID, el(CmdRep, V)};
311e({'ActionReply', CID, asn1_NOVALUE, CtxRep, [CmdRep]}, V) ->
312    {182, CID, e(CtxRep, V), e(CmdRep, V)};
313e({'ActionReply', CID, asn1_NOVALUE, CtxRep, CmdRep}, V) ->
314    {183, CID, e(CtxRep, V), el(CmdRep, V)};
315e({'ActionReply', CID, ED, asn1_NOVALUE, [CmdRep]}, V) ->
316    {184, CID, e(ED, V), e(CmdRep, V)};
317e({'ActionReply', CID, ED, asn1_NOVALUE, CmdRep}, V) ->
318    {185, CID, e(ED, V), el(CmdRep, V)};
319e({'ActionReply', CID, ED, CtxRep, [CmdRep]}, V) ->
320    {186, CID, e(ED, V), e(CtxRep, V), e(CmdRep, V)};
321e({'ActionReply', CID, ED, CtxRep, CmdRep}, V) ->
322    {187, CID, e(ED, V), e(CtxRep, V), el(CmdRep, V)};
323
324e({'AuditDescriptor', asn1_NOVALUE}, 1 = _V) ->
325    {190};
326e({'AuditDescriptor', AT}, 1 = V) ->
327    {191, el(AT, V)};
328e({'AuditDescriptor', asn1_NOVALUE, asn1_NOVALUE}, V) when V >= 2 ->
329    {192};
330e({'AuditDescriptor', AT, APT}, V)
331  when is_list(AT) andalso is_list(APT) andalso (V >= 2) ->
332    {193, el(AT, V), el(APT, V)};
333e({'AuditDescriptor', AT, APT}, V)
334  when is_list(APT) andalso (V >= 2) ->
335    {194, e(AT, V), el(APT, V)};
336e({'AuditDescriptor', AT, APT}, V)
337  when is_list(AT) andalso (V >= 2) ->
338    {195, el(AT, V), e(APT, V)};
339e({'AuditDescriptor', AT, APT}, V) when (V >= 2) ->
340    {196, e(AT, V), e(APT, V)};
341
342e({notifyReq, {'NotifyRequest', TID, OED, asn1_NOVALUE}}, V) ->
343    {200, el(TID, V), e(OED, V)};
344e({notifyReq, {'NotifyRequest', TID, OED, ED}}, V) ->
345    {201, el(TID, V), e(OED, V), e(ED, V)};
346e({'NotifyRequest', TID, OED}, V) ->
347    {202, el(TID, V), e(OED, V)};
348e({'NotifyRequest', TID, OED, ED}, V) ->
349    {203, el(TID, V), e(OED, V), e(ED, V)};
350
351e({'ObservedEventsDescriptor', RID, OEL}, V) ->
352    {210, RID, el(OEL, V)};
353
354e({'ObservedEvent', EN, SID, EPL, TN}, V) ->
355    {220, EN, e(SID, V), el(EPL, V), e(TN, V)};
356
357e({'EventParameter', "type", ["est"], asn1_NOVALUE}, _V) ->
358    {230};
359e({'EventParameter', "type", [Val], asn1_NOVALUE}, _V) ->
360    {231, Val};
361e({'EventParameter', "type", Val, asn1_NOVALUE}, _V) ->
362    {232, Val};
363e({'EventParameter', "Generalcause", ["NR"], asn1_NOVALUE}, _V) ->
364    {233};
365e({'EventParameter', "Generalcause", ["UR"], asn1_NOVALUE}, _V) ->
366    {234};
367e({'EventParameter', "Generalcause", ["FT"], asn1_NOVALUE}, _V) ->
368    {235};
369e({'EventParameter', "Generalcause", ["FP"], asn1_NOVALUE}, _V) ->
370    {236};
371e({'EventParameter', "Generalcause", ["IW"], asn1_NOVALUE}, _V) ->
372    {237};
373e({'EventParameter', "Generalcause", ["UN"], asn1_NOVALUE}, _V) ->
374    {238};
375e({'EventParameter', "Generalcause", [Val], asn1_NOVALUE}, _V) ->
376    {239, Val};
377e({'EventParameter', "Generalcause", Val, asn1_NOVALUE}, _V) ->
378    {240, Val};
379e({'EventParameter', "Failurecause", [Val], asn1_NOVALUE}, _V) ->
380    {241, Val};
381e({'EventParameter', "Failurecause", Val, asn1_NOVALUE}, _V) ->
382    {242, Val};
383e({'EventParameter', EPN, Val, asn1_NOVALUE}, _V) ->
384    {243, EPN, Val};
385e({'EventParameter', EPN, Val, EI}, _V) ->
386    {244, EPN, Val, EI};
387
388e({serviceChangeReq, {'ServiceChangeRequest', TID, SCPs}}, V) ->
389    {260, el(TID, V), e(SCPs, V)};
390e({serviceChangeReq, SCR}, V) ->
391    {261, e(SCR, V)};
392e({'ServiceChangeRequest', TID, SCPs}, V) ->
393    {262, el(TID, V), e(SCPs, V)};
394
395e({serviceChangeReply, {'ServiceChangeReply', TID, SCR}}, V) ->
396    {270, el(TID, V), e(SCR, V)};
397e({serviceChangeReply, SCR}, V) ->
398    {271, e(SCR, V)};
399e({'ServiceChangeReply', TID, SCR}, V) -> %% KOLLA
400    {272, el(TID, V), e(SCR, V)};
401
402e({mediaDescriptor, {'MediaDescriptor', TSD, S}}, V) ->
403    {280, e(TSD, V), e(S, V)};
404e({mediaDescriptor, MD}, V) ->
405    {281, e(MD, V)};
406e({'MediaDescriptor', TSD, S}, V) ->
407    {282, e(TSD, V), e(S, V)};
408
409e({oneStream, S}, V) ->
410    {290, e(S, V)};
411e({multiStream, S}, V) ->
412    {291, el(S, V)};
413e({'StreamDescriptor', SID, SP}, V) ->
414    {292, e(SID, V), e(SP, V)};
415
416e({'StreamParms', LCD, asn1_NOVALUE, asn1_NOVALUE}, V) when V < 3 ->
417    {300, e(LCD, V)};
418e({'StreamParms', LCD, LD, asn1_NOVALUE}, V) when V < 3 ->
419    {301, e(LCD, V), e(LD, V)};
420e({'StreamParms', LCD, LD, RD}, V) when V < 3 ->
421    {302, e(LCD, V), e(LD, V), e(RD, V)};
422
423e({'StreamParms', LCD, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
424  when V >= 3 ->
425    {303, e(LCD, V)};
426e({'StreamParms', LCD, LD, asn1_NOVALUE, asn1_NOVALUE}, V)
427  when V >= 3 ->
428    {304, e(LCD, V), e(LD, V)};
429e({'StreamParms', LCD, LD, RD, asn1_NOVALUE}, V)
430  when V >= 3 ->
431    {305, e(LCD, V), e(LD, V), e(RD, V)};
432e({'StreamParms', LCD, LD, RD, SD}, V)
433  when V >= 3 ->
434    {306, e(LCD, V), e(LD, V), e(RD, V), el(SD, V)};
435
436e({'LocalControlDescriptor', SM, RV, RG, PP}, V) ->
437    {310, e(SM, V), e(RV, V), e(RG, V), el(PP, V)};
438
439e({'PropertyParm', "v", [Val], asn1_NOVALUE}, _V) ->
440    {320, Val};
441e({'PropertyParm', "v", Val, asn1_NOVALUE}, _V) ->
442    {321, Val};
443e({'PropertyParm', "o", [Val], asn1_NOVALUE}, _V) ->
444    {332, Val};
445e({'PropertyParm', "o", Val, asn1_NOVALUE}, _V) ->
446    {333, Val};
447e({'PropertyParm', "s", [Val], asn1_NOVALUE}, _V) ->
448    {334, Val};
449e({'PropertyParm', "s", Val, asn1_NOVALUE}, _V) ->
450    {335, Val};
451e({'PropertyParm', "i", [Val], asn1_NOVALUE}, _V) ->
452    {336, Val};
453e({'PropertyParm', "i", Val, asn1_NOVALUE}, _V) ->
454    {337, Val};
455e({'PropertyParm', "u", [Val], asn1_NOVALUE}, _V) ->
456    {338, Val};
457e({'PropertyParm', "u", Val, asn1_NOVALUE}, _V) ->
458    {339, Val};
459e({'PropertyParm', "e", [Val], asn1_NOVALUE}, _V) ->
460    {340, Val};
461e({'PropertyParm', "e", Val, asn1_NOVALUE}, _V) ->
462    {341, Val};
463e({'PropertyParm', "p", [Val], asn1_NOVALUE}, _V) ->
464    {342, Val};
465e({'PropertyParm', "p", Val, asn1_NOVALUE}, _V) ->
466    {343, Val};
467e({'PropertyParm', "c", [Val], asn1_NOVALUE}, _V) ->
468    {344, Val};
469e({'PropertyParm', "c", Val, asn1_NOVALUE}, _V) ->
470    {345, Val};
471e({'PropertyParm', "b", [Val], asn1_NOVALUE}, _V) ->
472    {346, Val};
473e({'PropertyParm', "b", Val, asn1_NOVALUE}, _V) ->
474    {347, Val};
475e({'PropertyParm', "z", [Val], asn1_NOVALUE}, _V) ->
476    {348, Val};
477e({'PropertyParm', "z", Val, asn1_NOVALUE}, _V) ->
478    {349, Val};
479e({'PropertyParm', "k", [Val], asn1_NOVALUE}, _V) ->
480    {350, Val};
481e({'PropertyParm', "k", Val, asn1_NOVALUE}, _V) ->
482    {351, Val};
483e({'PropertyParm', "a", [Val], asn1_NOVALUE}, _V) ->
484    {352, Val};
485e({'PropertyParm', "a", Val, asn1_NOVALUE}, _V) ->
486    {353, Val};
487e({'PropertyParm', "t", [Val], asn1_NOVALUE}, _V) ->
488    {354, Val};
489e({'PropertyParm', "t", Val, asn1_NOVALUE}, _V) ->
490    {355, Val};
491e({'PropertyParm', "r", [Val], asn1_NOVALUE}, _V) ->
492    {356, Val};
493e({'PropertyParm', "r", Val, asn1_NOVALUE}, _V) ->
494    {357, Val};
495e({'PropertyParm', "m", [Val], asn1_NOVALUE}, _V) ->
496    {358, Val};
497e({'PropertyParm', "m", Val, asn1_NOVALUE}, _V) ->
498    {359, Val};
499e({'PropertyParm', "nt/jit", [Val], asn1_NOVALUE}, _V) ->
500    {360, Val};
501e({'PropertyParm', "nt/jit", Val, asn1_NOVALUE}, _V) ->
502    {361, Val};
503e({'PropertyParm', "tdmc/ec", ["on"], asn1_NOVALUE}, _V) ->
504    {362};
505e({'PropertyParm', "tdmc/ec", ["off"], asn1_NOVALUE}, _V) ->
506    {363};
507e({'PropertyParm', "tdmc/gain", ["automatic"], asn1_NOVALUE}, _V) ->
508    {364};
509e({'PropertyParm', "tdmc/gain", [Val], asn1_NOVALUE}, _V) ->
510    {365, Val};
511e({'PropertyParm', "tdmc/gain", Val, asn1_NOVALUE}, _V) ->
512    {366, Val};
513e({'PropertyParm', "maxNumberOfContexts", [Val], asn1_NOVALUE}, _V) ->
514    {367, Val};
515e({'PropertyParm', "maxNumberOfContexts", Val, asn1_NOVALUE}, _V) ->
516    {368, Val};
517e({'PropertyParm', "maxTerminationsPerContext", [Val], asn1_NOVALUE}, _V) ->
518    {369, Val};
519e({'PropertyParm', "maxTerminationsPerContext", Val, asn1_NOVALUE}, _V) ->
520    {370, Val};
521e({'PropertyParm', "normalMGExecutionTime", [Val], asn1_NOVALUE}, _V) ->
522    {371, Val};
523e({'PropertyParm', "normalMGExecutionTime", Val, asn1_NOVALUE}, _V) ->
524    {372, Val};
525e({'PropertyParm', "normalMGCExecutionTime", [Val], asn1_NOVALUE}, _V) ->
526    {373, Val};
527e({'PropertyParm', "normalMGCExecutionTime", Val, asn1_NOVALUE}, _V) ->
528    {374, Val};
529e({'PropertyParm', "MGProvisionalResponseTimerValue", [Val], asn1_NOVALUE}, _V) ->
530    {375, Val};
531e({'PropertyParm', "MGProvisionalResponseTimerValue", Val, asn1_NOVALUE}, _V) ->
532    {376, Val};
533e({'PropertyParm', "MGCProvisionalResponseTimerValue", [Val], asn1_NOVALUE}, _V) ->
534    {377, Val};
535e({'PropertyParm', "MGCProvisionalResponseTimerValue", Val, asn1_NOVALUE}, _V) ->
536    {378, Val};
537e({'PropertyParm', N, [Val], asn1_NOVALUE}, _V) ->
538    {379, N, Val};
539e({'PropertyParm', N, Val, asn1_NOVALUE}, _V) ->
540    {380, N, Val};
541e({'PropertyParm', N, Val, EI}, _V) ->
542    {381, N, Val, EI};
543
544e({'LocalRemoteDescriptor', [[PG]]}, V) ->
545    {400, e(PG, V)};
546e({'LocalRemoteDescriptor', [PG]}, V) ->
547    {401, el(PG, V)};
548e({'LocalRemoteDescriptor', PG}, V) ->
549    {402, ell(PG, V)};
550
551e({'TerminationStateDescriptor', PP, EBC, SS}, V) ->
552    {410, el(PP, V), e(EBC, V), e(SS, V)};
553
554e({eventsDescriptor, {'EventsDescriptor', RID, [E]}}, V) ->
555    {420, e(RID, V), e(E, V)};
556e({eventsDescriptor, {'EventsDescriptor', RID, EL}}, V) ->
557    {421, e(RID, V), el(EL, V)};
558e({eventsDescriptor, ED}, V) ->
559    {422, e(ED, V)};
560e({'EventsDescriptor', RID, [E]}, V) ->
561    {423, e(RID, V), e(E, V)};
562e({'EventsDescriptor', RID, EL}, V) ->
563    {424, e(RID, V), el(EL, V)};
564
565e({'RequestedEvent', PN, SID, EA, EPL}, V) ->
566    {425, PN, e(SID, V), e(EA, V), el(EPL, V)};
567
568e({'RegulatedEmbeddedDescriptor', SED, SD}, V) ->
569    {430, e(SED, V), el(SD, V)};
570
571e({notifyImmediate, NI}, V) ->
572    {435, e(NI, V)};
573e({notifyRegulated, NR}, V) ->
574    {436, e(NR, V)};
575e({neverNotify, NN}, V) ->
576    {437, e(NN, V)};
577
578e({'RequestedActions', KA, EDM, SE, SD}, V) ->
579    {440, e(KA, V), e(EDM, V), e(SE, V), e(SD, V)};
580
581e({'RequestedActions', KA, EDM, SE, SD, asn1_NOVALUE, asn1_NOVALUE}, V)
582  when V >= 3 ->
583    {441, e(KA, V), e(EDM, V), e(SE, V), e(SD, V)};
584e({'RequestedActions', KA, EDM, SE, SD, NB, asn1_NOVALUE}, V)
585  when V >= 3 ->
586    {442, e(KA, V), e(EDM, V), e(SE, V), e(SD, V), e(NB, V)};
587e({'RequestedActions', KA, EDM, SE, SD, NB, RED}, V)
588  when V >= 3 ->
589    {443, e(KA, V), e(EDM, V), e(SE, V), e(SD, V), e(NB, V), e(RED, V)};
590
591e({'SecondEventsDescriptor', RID, [E]}, V) ->
592    {450, e(RID, V), e(E, V)};
593e({'SecondEventsDescriptor', RID, EL}, V) ->
594    {451, e(RID, V), el(EL, V)};
595
596e({'SecondRequestedEvent', PN, SID, EA, EPL}, V) ->
597    {460, PN, e(SID, V), e(EA, V), e(EPL, V)};
598
599e({'SecondRequestedActions', KA, EDM, SD}, V) ->
600    {470, e(KA, V), e(EDM, V), e(SD, V)};
601
602e({'SecondRequestedActions', KA, EDM, SD, asn1_NOVALUE, asn1_NOVALUE}, V)
603  when V >= 3 ->
604    {471, e(KA, V), e(EDM, V), e(SD, V)};
605e({'SecondRequestedActions', KA, EDM, SD, NB, asn1_NOVALUE}, V)
606  when V >= 3 ->
607    {472, e(KA, V), e(EDM, V), e(SD, V), e(NB, V)};
608e({'SecondRequestedActions', KA, EDM, SD, NB, RED}, V)
609  when V >= 3 ->
610    {473, e(KA, V), e(EDM, V), e(SD, V), e(NB, V), e(RED, V)};
611
612e({'EventSpec', EN, SID, EPL}, V) ->
613    {480, EN, e(SID, V), el(EPL, V)};
614
615e({'SeqSigList', ID, SL}, V) ->
616    {490, ID, el(SL, V)};
617
618e({signalsDescriptor, S}, V) ->
619    {500, el(S, V)};
620e({signal, S}, V) ->
621    {510, e(S, V)};
622
623e({'Signal', SN, SID, ST, D, NC, KA, SPL}, V) ->
624    {520, SN, e(SID, V), e(ST, V), e(D, V), e(NC, V), e(KA, V), el(SPL, V)};
625
626e({'Signal', SN, SID, ST, D, NC, KA, SPL,
627   asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
628  when V >= 3 ->
629    {521, SN, e(SID, V), e(ST, V), e(D, V), e(NC, V), e(KA, V), el(SPL, V)};
630e({'Signal', SN, SID, ST, D, NC, KA, SPL,
631   SD, asn1_NOVALUE, asn1_NOVALUE}, V)
632  when V >= 3 ->
633    {522, SN, e(SID, V), e(ST, V), e(D, V), e(NC, V), e(KA, V), el(SPL, V),
634     e(SD, V)};
635e({'Signal', SN, SID, ST, D, NC, KA, SPL,
636   SD, RID, asn1_NOVALUE}, V)
637  when V >= 3 ->
638    {523, SN, e(SID, V), e(ST, V), e(D, V), e(NC, V), e(KA, V), el(SPL, V),
639     e(SD, V), e(RID, V)};
640e({'Signal', SN, SID, ST, D, NC, KA, SPL,
641   SD, RID, IsD}, V)
642  when V >= 3 ->
643    {524, SN, e(SID, V), e(ST, V), e(D, V), e(NC, V), e(KA, V), el(SPL, V),
644     e(SD, V), e(RID, V), e(IsD, V)};
645
646e({'SigParameter', SPN, Val, asn1_NOVALUE}, _V) ->
647    {530, SPN, Val};
648e({'SigParameter', SPN, Val, EI}, _V) ->
649    {531, SPN, Val, EI};
650
651e({modemDescriptor, MD}, V) ->
652    {550, e(MD, V)};
653e({'ModemDescriptor', MTL, MPL, asn1_NOVALUE}, _V) ->
654    {551, MTL, MPL};
655e({'ModemDescriptor', MTL, MPL, NSD}, _V) ->
656    {552, MTL, MPL, NSD};
657
658e({digitMapDescriptor, {'DigitMapDescriptor', DMN, DMV}}, V) ->
659    {560, DMN, e(DMV, V)};
660e({digitMapDescriptor, DMD}, V) ->
661    {561, e(DMD, V)};
662e({'DigitMapDescriptor', DMN, DMV}, V) ->
663    {562, DMN, e(DMV, V)};
664
665e({'DigitMapValue', Start, Stop, Long, DMB}, 1 = V) ->
666    {570, e(Start, V), e(Stop, V), e(Long, V), DMB};
667e({'DigitMapValue', Start, Stop, Long, DMB, Dur}, V) when V >= 2 ->
668    {571, e(Start, V), e(Stop, V), e(Long, V), DMB, e(Dur, V)};
669
670e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, asn1_NOVALUE, asn1_NOVALUE}, V) ->
671    {580, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V)};
672e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, asn1_NOVALUE}, V) ->
673    {581, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
674     e(TS, V)};
675e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD}, V) ->
676    {582, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
677     e(TS, V), NSD};
678
679e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD, asn1_NOVALUE}, V)
680  when V == 2 ->
681    {583, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
682     e(TS, V), NSD};
683e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD, Info}, V)
684  when V == 2 ->
685    {584, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
686     e(TS, V), NSD, e(Info, V)};
687
688e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD,
689   asn1_NOVALUE, asn1_NOVALUE}, V)
690  when V >= 3 ->
691    {585, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
692     e(TS, V), NSD};
693e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD, Info,
694   asn1_NOVALUE}, V)
695  when V >= 3 ->
696    {586, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
697     e(TS, V), e(TS, V), NSD, e(Info, V)};
698e({'ServiceChangeParm', M, A, Ver, Prof, R, D, Id, TS, NSD, Info, Flag}, V)
699  when V >= 3 ->
700    {587, e(M, V), e(A, V), e(Ver, V), e(Prof, V), R, e(D, V), e(Id, V),
701     e(TS, V), NSD, e(Info, V), e(Flag, V)};
702
703e({serviceChangeResParms, {'ServiceChangeResParm', Id, A, Ver, Prof, TS}}, V) ->
704    {590, Id, e(A, V), Ver, e(Prof, V), TS};
705e({serviceChangeResParms, SCRP}, V) ->
706    {591, e(SCRP, V)};
707e({'ServiceChangeResParm', Id, A, Ver, Prof, TS}, V) ->
708    {592, Id, e(A, V), Ver, e(Prof, V), TS};
709
710e({portNumber, N}, _V) ->
711    {600, N};
712
713e({'TimeNotation', D, T}, _V) ->
714    {610, D, T};
715
716e({'ServiceChangeProfile', N, Ver}, _V) ->
717    {620, N, Ver};
718
719e({digitMapName, N}, _V) ->
720    {630, N};
721
722e({megaco_term_id, false, Id}, _V) ->
723    {640, Id};
724e({megaco_term_id, true, [[$*]]}, _V) ->
725    {641};
726e({megaco_term_id, true, [[$$]]}, _V) ->
727    {642};
728e({megaco_term_id, true, Id}, _V) ->
729    {643, Id};
730e({'TerminationID', W, ID}, _V) ->
731    {644, W, ID};
732
733e({modReply, {'AmmsReply', TID, asn1_NOVALUE}}, V) ->
734    {650, el(TID, V)};
735e({modReply, {'AmmsReply', TID, [TA]}}, V) ->
736    {651, el(TID, V), e(TA, V)};
737e({modReply, {'AmmsReply', TID, TA}}, V) when is_list(TA) ->
738    {652, el(TID, V), el(TA, V)};
739e({modReply, R}, V) ->
740    {653, e(R, V)};
741
742e({moveReply, AR}, V) ->
743    {655, e(AR, V)};
744
745e({addReply, {'AmmsReply', TID, asn1_NOVALUE}}, V) ->
746    {660, el(TID, V)};
747e({addReply, {'AmmsReply', TID, [TA]}}, V) ->
748    {661, el(TID, V), e(TA, V)};
749e({addReply, {'AmmsReply', TID, TA}}, V) when is_list(TA) ->
750    {662, el(TID, V), el(TA, V)};
751e({addReply, R}, V) ->
752    {663, e(R, V)};
753
754e({subtractReply, {'AmmsReply', TID, asn1_NOVALUE}}, V) ->
755    {670, el(TID, V)};
756e({subtractReply, {'AmmsReply', TID, [TA]}}, V) ->
757    {671, el(TID, V), e(TA, V)};
758e({subtractReply, {'AmmsReply', TID, TA}}, V) when is_list(TA) ->
759    {672, el(TID, V), el(TA, V)};
760e({subtractReply, R}, V) ->
761    {673, e(R, V)};
762
763e({'AmmsReply', TID, asn1_NOVALUE}, V) ->
764    {680, el(TID, V)};
765e({'AmmsReply', TID, [TA]}, V) ->
766    {681, el(TID, V), e(TA, V)};
767e({'AmmsReply', TID, TA}, V) when is_list(TA) ->
768    {682, el(TID, V), el(TA, V)};
769
770e({notifyReply, {'NotifyReply', TID, asn1_NOVALUE}}, V) ->
771    {690, el(TID, V)};
772e({notifyReply, {'NotifyReply', TID, ED}}, V) ->
773    {691, el(TID, V), e(ED, V)};
774e({notifyReply, R}, V) ->
775    {692, e(R, V)};
776e({'NotifyReply', TID, asn1_NOVALUE}, V) ->
777    {693, el(TID, V)};
778e({'NotifyReply', TID, ED}, V) ->
779    {694, el(TID, V), e(ED, V)};
780
781e({auditValueReply, AVR}, V) ->
782    {700, e(AVR, V)};
783
784e({contextAuditResult, TIDs}, V) ->
785    {705, el(TIDs, V)};
786
787e({auditResult, {'AuditResult', TID, [TAR]}}, V) ->
788    {710, e(TID, V), e(TAR, V)};
789e({auditResult, {'AuditResult', TID, TAR}}, V) ->
790    {711, e(TID, V), el(TAR, V)};
791e({auditResult, AR}, V) ->
792    {712, e(AR, V)};
793e({'AuditResult', TID, [TAR]}, V) ->
794    {713, e(TID, V), e(TAR, V)};
795e({'AuditResult', TID, TAR}, V) ->
796    {714, e(TID, V), el(TAR, V)};
797
798e({auditResultTermList, {'TermListAuditResult', TIDs, [TAR]}}, V) ->
799    {715, el(TIDs, V), e(TAR, V)};
800e({auditResultTermList, {'TermListAuditResult', TIDs, TAR}}, V) ->
801    {716, el(TIDs, V), el(TAR, V)};
802
803e({packagesDescriptor, PsD}, V) ->
804    {720, el(PsD, V)};
805
806e({'PackagesItem', "g", 1}, _V) ->
807    {730};
808e({'PackagesItem', "tonegen", 1}, _V) ->
809    {731};
810e({'PackagesItem', "tonedet", 1}, _V) ->
811    {732};
812e({'PackagesItem', "tg", 1}, _V) ->
813    {733};
814e({'PackagesItem', "dd", 1}, _V) ->
815    {734};
816e({'PackagesItem', "cg", 1}, _V) ->
817    {735};
818e({'PackagesItem', "cd", 1}, _V) ->
819    {736};
820e({'PackagesItem', "al", 1}, _V) ->
821    {737};
822e({'PackagesItem', "ct", 1}, _V) ->
823    {738};
824e({'PackagesItem', "nt", 1}, _V) ->
825    {739};
826e({'PackagesItem', "rtp", 1}, _V) ->
827    {740};
828e({'PackagesItem', "tdmc", 1}, _V) ->
829    {741};
830e({'PackagesItem', Name, Ver}, _V) ->
831    {742, Name, Ver};
832
833e({emptyDescriptors, AD}, V) ->
834    {760, e(AD, V)};
835
836e({statisticsDescriptor, [SD]}, V) ->
837    {770, e(SD, V)};
838e({statisticsDescriptor, SsD}, V) ->
839    {771, el(SsD, V)};
840
841e({'StatisticsParameter', Name, asn1_NOVALUE}, _V) ->
842    {780, Name};
843e({'StatisticsParameter', Name, Value}, _V) ->
844    {781, Name, Value};
845
846e({'MuxDescriptor', MT, TL, asn1_NOVALUE}, V) ->
847    {800, e(MT, V), el(TL, V)};
848e({'MuxDescriptor', MT, TL, NSD}, V) ->
849    {801, e(MT, V), el(TL, V), NSD};
850
851e({indAudPackagesDescriptor, {'IndAudPackagesDescriptor', N, Ver}}, V)
852  when (V >= 2) ->
853    {900, N, Ver};
854e({indAudPackagesDescriptor, IAPD}, V)
855  when (V >= 2) ->
856    {900, e(IAPD, V)};
857e({'IndAudPackagesDescriptor', N, Ver}, V)
858  when (V >= 2) ->
859    {901, N, Ver};
860
861e({indAudStatisticsDescriptor, {'IndAudStatisticsDescriptor', N}}, V)
862  when (V >= 2) ->
863    {910, N};
864e({indAudStatisticsDescriptor, IASD}, V)
865  when (V >= 2) ->
866    {911, e(IASD, V)};
867e({'IndAudStatisticsDescriptor', N}, V)
868  when (V >= 2) ->
869    {912, N};
870
871e({indAudDigitMapDescriptor, {'IndAudDigitMapDescriptor', DMN}}, V)
872  when (V >= 2) ->
873    {920, DMN};
874e({indAudDigitMapDescriptor, IADMD}, V)
875  when (V >= 2) ->
876    {921, e(IADMD, V)};
877e({'IndAudDigitMapDescriptor', DMN}, V)
878  when (V >= 2) ->
879    {922, DMN};
880
881e({indAudSignalsDescriptor, {seqSigList, IASD}}, V)
882  when (V >= 2) ->
883    {930, e(IASD, V)};
884e({indAudSignalsDescriptor, {signal, IAS}}, V)
885  when (V >= 2) ->
886    {931, e(IAS, V)};
887
888e({'IndAudSeqSigList', Id, SL}, V)
889  when (V >= 2) ->
890    {940, Id, e(SL, V)};
891
892e({'IndAudSignal', N, SID}, 2 = V)  ->
893    {950, N, e(SID, V)};
894e({'IndAudSignal', N, SID, asn1_NOVALUE}, V)
895  when (V >= 3) ->
896    {951, N, e(SID, V)};
897e({'IndAudSignal', N, SID, RID}, V)
898  when (V >= 3) ->
899    {952, N, e(SID, V), e(RID, V)};
900
901e({indAudEventBufferDescriptor, {'IndAudEventBufferDescriptor', EN, SID}}, V)
902  when (V >= 2) ->
903    {960, EN, e(SID, V)};
904e({indAudEventBufferDescriptor, IAEBD}, V)
905  when (V >= 2) ->
906    {961, e(IAEBD, V)};
907e({'IndAudEventBufferDescriptor', EN, SID}, V)
908  when (V >= 2) ->
909    {962, EN, e(SID, V)};
910
911e({indAudEventsDescriptor, {'IndAudEventsDescriptor', RID, N, SID}}, V)
912  when (V >= 2) ->
913    {970, e(RID, V), N, e(SID, V)};
914e({indAudEventsDescriptor, IAED}, V)
915  when (V >= 2) ->
916    {971, e(IAED, V)};
917e({'IndAudEventsDescriptor', RID, N, SID}, V)
918  when (V >= 2) ->
919    {972, e(RID, V), N, e(SID, V)};
920
921e({indAudMediaDescriptor, {'IndAudMediaDescriptor', TSD, S}}, V) when V >= 2 ->
922    {980, e(TSD, V), e(S, V)};
923e({indAudMediaDescriptor, IAMD}, V) when V >= 2 ->
924    {981, e(IAMD, V)};
925e({'IndAudMediaDescriptor', TSD, S}, V) when V >= 2 ->
926    {982, e(TSD, V), e(S, V)};
927
928e({'IndAudTerminationStateDescriptor', PP, EBC, SS}, 2 = V) ->
929    {990, el(PP, V), e(EBC, V), e(SS, V)};
930e({'IndAudTerminationStateDescriptor', PP, EBC, SS, asn1_NOVALUE}, V)
931  when V >= 3 ->
932    {991, el(PP, V), e(EBC, V), e(SS, V)};
933e({'IndAudTerminationStateDescriptor', PP, EBC, SS, SSS}, V)
934  when V >= 3 ->
935    {992, el(PP, V), e(EBC, V), e(SS, V), e(SSS, V)};
936
937e({'IndAudStreamDescriptor', SID, SP}, V) ->
938    {1000, e(SID, V), e(SP, V)};
939
940e({'IndAudStreamParms', LCD, asn1_NOVALUE, asn1_NOVALUE}, 2 = V) ->
941    {1010, e(LCD, V)};
942e({'IndAudStreamParms', LCD, LD, RD}, 2 = V) ->
943    {1011, e(LCD, V), e(LD, V), e(RD, V)};
944e({'IndAudStreamParms', LCD, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE}, V)
945  when V >= 3 ->
946    {1012, e(LCD, V)};
947e({'IndAudStreamParms', LCD, LD, asn1_NOVALUE, asn1_NOVALUE}, V)
948  when V >= 3 ->
949    {1013, e(LCD, V), e(LD, V)};
950e({'IndAudStreamParms', LCD, LD, RD, asn1_NOVALUE}, V)
951  when V >= 3 ->
952    {1014, e(LCD, V), e(LD, V), e(RD, V)};
953e({'IndAudStreamParms', LCD, LD, RD, SD}, V)
954  when V >= 3 ->
955    {1015, e(LCD, V), e(LD, V), e(RD, V), e(SD, V)};
956
957e({'IndAudLocalControlDescriptor', SM, RV, RG, asn1_NOVALUE}, 2 = V) ->
958    {1020, e(SM, V), e(RV, V), e(RG, V)};
959e({'IndAudLocalControlDescriptor', SM, RV, RG, PP}, 2 = V) when is_list(PP) ->
960    {1021, e(SM, V), e(RV, V), e(RG, V), el(PP, V)};
961e({'IndAudLocalControlDescriptor', SM, RV, RG, asn1_NOVALUE, asn1_NOVALUE}, V)
962  when V >= 3 ->
963    {1022, e(SM, V), e(RV, V), e(RG, V)};
964e({'IndAudLocalControlDescriptor', SM, RV, RG, PP, asn1_NOVALUE}, V)
965  when is_list(PP) andalso (V >= 3) ->
966    {1023, e(SM, V), e(RV, V), e(RG, V), el(PP, V)};
967e({'IndAudLocalControlDescriptor', SM, RV, RG, PP, SMS}, V)
968  when is_list(PP) andalso (V >= 3) ->
969    {1024, e(SM, V), e(RV, V), e(RG, V), el(PP, V), e(SMS, V)};
970
971e({'IndAudPropertyParm', N}, 2 = _V) ->
972    {1030, N};
973e({'IndAudPropertyParm', N, asn1_NOVALUE}, V) when V >= 3 ->
974    {1031, N};
975e({'IndAudPropertyParm', N, PP}, V) when V >= 3 ->
976    {1032, N, e(PP, V)};
977
978e(oneway, _V) ->
979    {1100};
980e(bothway, _V) ->
981    {1101};
982e(isolate, _V) ->
983    {1102};
984e(onewayexternal, _V) ->
985    {1103};
986e(onewayboth, _V) ->
987    {1104};
988
989e(T, _V) ->
990    %% io:format("e(~w) -> ~nT: ~w~n", [_V, T]),
991    T.
992
993
994d({1}, _) ->
995    asn1_NOVALUE;
996d({2}, _V) ->
997    'NULL';
998d({3}, _V) ->
999    sendRecv;
1000d({4}, _V) ->
1001    recvOnly;
1002d({5}, _V) ->
1003    restart;
1004d({6}, _) ->
1005    mediaToken;
1006d({7}, _) ->
1007    eventsToken;
1008d({8}, _) ->
1009    signalsToken;
1010d({9}, _) ->
1011    digitMapToken;
1012d({10}, _) ->
1013    statsToken;
1014d({11}, _) ->
1015    packagesToken;
1016d({12}, _V) ->
1017    h221;
1018d({13}, _V) ->
1019    h223;
1020d({14}, _V) ->
1021    h226;
1022d({15}, _V) ->
1023    v76;
1024
1025d({20, Mid, Body}, _) ->
1026    {'MegacoMessage', asn1_NOVALUE, {'Message', 1, d(Mid, 1), d(Body, 1)}};
1027d({21, Mid, Body}, _) ->
1028    {'MegacoMessage', asn1_NOVALUE, {'Message', 2, d(Mid, 2), d(Body, 2)}};
1029d({22, V, Mid, Body}, _) ->
1030    {'MegacoMessage', asn1_NOVALUE, {'Message', V, d(Mid, V), d(Body, V)}};
1031d({23, AuthHeader, Mid, Body}, _) ->
1032    {'MegacoMessage', d(AuthHeader, 1), {'Message', 1, d(Mid, 1), d(Body, 1)}};
1033d({24, AuthHeader, Mid, Body}, _) ->
1034    {'MegacoMessage', d(AuthHeader, 2), {'Message', 2, d(Mid, 2), d(Body, 2)}};
1035d({25, V, AuthHeader, Mid, Body}, _) ->
1036    {'MegacoMessage', d(AuthHeader, V), {'Message', V, d(Mid, V), d(Body, V)}};
1037d({26, AuthHeader, Mess}, V) ->
1038    {'MegacoMessage', d(AuthHeader, V), d(Mess, V)};
1039d({27, V, Mid, Body}, _) ->
1040    {'Message', V, d(Mid, V), d(Body, V)};
1041
1042d({30, Name}, _V) ->
1043    {domainName, {'DomainName', Name, asn1_NOVALUE}};
1044d({31, Name, PortNumber}, _V) ->
1045    {domainName, {'DomainName', Name, PortNumber}};
1046d({32, N}, V) ->
1047    {domainName, d(N, V)};
1048d({33, Name}, _V) ->
1049    {'DomainName', Name, asn1_NOVALUE};
1050d({34, Name, PortNumber}, _V) ->
1051    {'DomainName', Name, PortNumber};
1052d({35, Addr}, _V) ->
1053    {ip4Address, {'IP4Address', Addr, asn1_NOVALUE}};
1054d({36, Addr, PortNumber}, _V) ->
1055    {ip4Address, {'IP4Address', Addr, PortNumber}};
1056d({37, A}, V) ->
1057    {ip4Address, d(A, V)};
1058d({38, Addr}, _V) ->
1059    {'IP4Address', Addr, asn1_NOVALUE};
1060d({39, Addr, PortNumber}, _V) ->
1061    {'IP4Address', Addr, PortNumber};
1062d({40, Addr}, _V) ->
1063    {ip6Address, {'IP6Address', Addr, asn1_NOVALUE}};
1064d({41, Addr, PortNumber}, _V) ->
1065    {ip6Address, {'IP6Address', Addr, PortNumber}};
1066d({42, A}, V) ->
1067    {ip6Address, d(A, V)};
1068d({43, Addr}, _V) ->
1069    {'IP6Address', Addr, asn1_NOVALUE};
1070d({44, Addr, PortNumber}, _V) ->
1071    {'IP6Address', Addr, PortNumber};
1072
1073d({50, Transaction}, V) ->
1074    {transactions, [d(Transaction, V)]};
1075d({51, Transactions}, V) ->
1076    {transactions, dl(Transactions, V)};
1077d({52, EC}, _V) ->
1078    {messageError, {'ErrorDescriptor', EC, asn1_NOVALUE}};
1079d({53, EC, ET}, _V) ->
1080    {messageError, {'ErrorDescriptor', EC, ET}};
1081d({54, Error}, V) ->
1082    {messageError, d(Error, V)};
1083d({55, TransId, Actions}, V) ->
1084    {transactionRequest, {'TransactionRequest', TransId, dl(Actions, V)}};
1085d({56, TransId}, _V) ->
1086    {transactionPending, {'TransactionPending', TransId}};
1087d({57, TransId, TransRes}, V) ->
1088    {transactionReply, {'TransactionReply', TransId, asn1_NOVALUE, d(TransRes, V)}};
1089d({58, TransId, TransRes}, V) ->
1090    {transactionReply, {'TransactionReply', TransId, 'NULL', d(TransRes, V)}};
1091d({59, TransId, ImmAckReq, TransRes}, V) ->
1092    {transactionReply, {'TransactionReply', TransId, d(ImmAckReq, V), d(TransRes, V)}};
1093d({60, T}, V) ->
1094    {transactionResponseAck, dl(T, V)};
1095d({61, FirstAck}, _V) ->
1096    {'TransactionAck', FirstAck, asn1_NOVALUE};
1097d({62, FirstAck, LastAck}, _V) ->
1098    {'TransactionAck', FirstAck, LastAck};
1099
1100d({70, EC}, _V) ->
1101    {'ErrorDescriptor', EC, asn1_NOVALUE};
1102d({71, EC, ET}, _V) ->
1103    {'ErrorDescriptor', EC, ET};
1104
1105d({80, Cid, CtxReq, CtxAAR, CmdReq}, V) ->
1106    {'ActionRequest', Cid, d(CtxReq, V), d(CtxAAR, V), [d(CmdReq, V)]};
1107d({81, Cid, CtxReq, CtxAAR, CmdReqs}, V) ->
1108    {'ActionRequest', Cid, d(CtxReq, V), d(CtxAAR, V), dl(CmdReqs, V)};
1109
1110d({90, P, E, T}, V) ->
1111    {'ContextRequest', d(P, V), d(E, V), dl(T, V)};
1112d({91, P, E, T}, V) ->
1113    {'ContextRequest', d(P, V), d(E, V), dl(T, V),
1114     asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1115d({92, P, E, T, IC}, V) ->
1116    {'ContextRequest', d(P, V), d(E, V), dl(T, V),
1117     d(IC, V), asn1_NOVALUE, asn1_NOVALUE};
1118d({93, P, E, T, IC, CP}, V) ->
1119    {'ContextRequest', d(P, V), d(E, V), dl(T, V),
1120     d(IC, V), dl(CP, V), asn1_NOVALUE};
1121d({94, P, E, T, IC, CP, CL}, V) ->
1122    {'ContextRequest', d(P, V), d(E, V), dl(T, V),
1123     d(IC, V), dl(CP, V), dl(CL, V)};
1124
1125d({100, P, E, T}, V) ->
1126    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V)};
1127d({101, P, E, T}, V) ->
1128    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1129   asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1130d({102, P, E, T, IC}, V) ->
1131    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1132     d(IC, V), asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1133d({103, P, E, T, IC, CPA}, V) ->
1134    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1135     d(IC, V), dl(CPA, V), asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1136d({104, P, E, T, IC, CPA, SP}, V) ->
1137    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1138     d(IC, V), dl(CPA, V), d(SP, V), asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1139d({105, P, E, T, IC, CPA, SP, SE}, V) ->
1140    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1141     d(IC, V), dl(CPA, V), d(SP, V), d(SE, V), asn1_NOVALUE, asn1_NOVALUE};
1142d({106, P, E, T, IC, CPA, SP, SE, SIC}, V) ->
1143    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1144     d(IC, V), dl(CPA, V), d(SP, V), d(SE, V), d(SIC, V), asn1_NOVALUE};
1145d({107, P, E, T, IC, CPA, SP, SE, SIC, SL}, V) ->
1146    {'ContextAttrAuditRequest', d(P, V), d(E, V), d(T, V),
1147     d(IC, V), dl(CPA, V), d(SP, V), d(SE, V), d(SIC, V), d(SL, V)};
1148
1149d({110, Cmd}, V) ->
1150    {'CommandRequest', d(Cmd, V), asn1_NOVALUE, asn1_NOVALUE};
1151d({111, Cmd}, V) ->
1152    {'CommandRequest', d(Cmd, V), 'NULL', asn1_NOVALUE};
1153d({112, Cmd}, V) ->
1154    {'CommandRequest', d(Cmd, V), asn1_NOVALUE, 'NULL'};
1155d({113, Cmd}, V) ->
1156    {'CommandRequest', d(Cmd, V), 'NULL', 'NULL'};
1157d({114, Cmd, Opt, WR}, V) ->
1158    {'CommandRequest', d(Cmd, V), d(Opt, V), d(WR, V)};
1159
1160d({120, From, To, Dir}, 1 = V) ->
1161    {'TopologyRequest', d(From, V), d(To, V), d(Dir, V)};
1162d({121, From, To, Dir, SID}, 2 = V) ->
1163    {'TopologyRequest', d(From, V), d(To, V), d(Dir, V), d(SID, V)};
1164d({122, From, To, Dir, SID}, V) when (V >= 3) ->
1165    {'TopologyRequest', d(From, V), d(To, V), d(Dir, V), d(SID, V), asn1_NOVALUE};
1166d({123, From, To, Dir, SID, TDE}, V) when (V >= 3) ->
1167    {'TopologyRequest', d(From, V), d(To, V), d(Dir, V), d(SID, V), d(TDE, V)};
1168
1169d({130, TID}, V) ->
1170    {modReq, {'AmmRequest', dl(TID, V), []}};
1171d({131, TID, Desc}, V) ->
1172    {modReq, {'AmmRequest', dl(TID, V), [d(Desc, V)]}};
1173d({132, TID, Descs}, V) ->
1174    {modReq, {'AmmRequest', dl(TID, V), dl(Descs, V)}};
1175d({133, TID}, V) ->
1176    {addReq, {'AmmRequest', dl(TID, V), []}};
1177d({134, TID, Desc}, V) ->
1178    {addReq, {'AmmRequest', dl(TID, V), [d(Desc, V)]}};
1179d({135, TID, Descs}, V) ->
1180    {addReq, {'AmmRequest', dl(TID, V), dl(Descs, V)}};
1181d({136, TID, Descs}, V) ->
1182    {'AmmRequest', dl(TID, V), dl(Descs, V)};
1183
1184d({140, TID}, V) ->
1185    {subtractReq, {'SubtractRequest', dl(TID, V), asn1_NOVALUE}};
1186d({141, TID, AudDesc}, V) ->
1187    {subtractReq, {'SubtractRequest', dl(TID, V), d(AudDesc, V)}};
1188d({142, TID}, V) ->
1189    {'SubtractRequest', dl(TID, V), asn1_NOVALUE};
1190d({143, TID, AudDesc}, V) ->
1191    {'SubtractRequest', dl(TID, V), d(AudDesc, V)};
1192
1193d({150, AR}, V) ->
1194    {auditValueRequest, d(AR, V)};
1195
1196d({160, TID, AudDesc}, V) when V < 3 ->
1197    {'AuditRequest', d(TID, V), d(AudDesc, V)};
1198d({161, TID, AudDesc}, V) when V >= 3 ->
1199    {'AuditRequest', d(TID, V), d(AudDesc, V), asn1_NOVALUE};
1200d({162, TID, AudDesc, TIDs}, V) when V >= 3 ->
1201    {'AuditRequest', d(TID, V), d(AudDesc, V), dl(TIDs, V)};
1202
1203d({170, AR}, V) ->
1204    {actionReplies, [d(AR, V)]};
1205d({171, ARs}, V) ->
1206    {actionReplies, dl(ARs, V)};
1207
1208d({180, CID, CmdRep}, V) ->
1209    {'ActionReply', CID, asn1_NOVALUE, asn1_NOVALUE, [d(CmdRep, V)]};
1210d({181, CID, CmdRep}, V) ->
1211    {'ActionReply', CID, asn1_NOVALUE, asn1_NOVALUE, dl(CmdRep, V)};
1212d({182, CID, CtxRep, CmdRep}, V) ->
1213    {'ActionReply', CID, asn1_NOVALUE, d(CtxRep, V), [d(CmdRep, V)]};
1214d({183, CID, CtxRep, CmdRep}, V) ->
1215    {'ActionReply', CID, asn1_NOVALUE, d(CtxRep, V), dl(CmdRep, V)};
1216d({184, CID, ED, CmdRep}, V) ->
1217    {'ActionReply', CID, d(ED, V), asn1_NOVALUE, [d(CmdRep, V)]};
1218d({185, CID, ED, CmdRep}, V) ->
1219    {'ActionReply', CID, d(ED, V), asn1_NOVALUE, dl(CmdRep, V)};
1220d({186, CID, ED, CtxRep, CmdRep}, V) ->
1221    {'ActionReply', CID, d(ED, V), d(CtxRep, V), [d(CmdRep, V)]};
1222d({187, CID, ED, CtxRep, CmdRep}, V) ->
1223    {'ActionReply', CID, d(ED, V), d(CtxRep, V), dl(CmdRep, V)};
1224
1225d({190}, 1 = _V) ->
1226    {'AuditDescriptor', asn1_NOVALUE};
1227d({191, AT}, 1 = V) ->
1228    {'AuditDescriptor', dl(AT, V)};
1229d({192}, V) when (V >= 2) ->
1230    {'AuditDescriptor', asn1_NOVALUE, asn1_NOVALUE};
1231d({193, AT, APT}, V) when is_list(AT) andalso is_list(APT) andalso (V >= 2) ->
1232    {'AuditDescriptor', dl(AT, V), dl(APT, V)};
1233d({194, AT, APT}, V) when is_list(APT) andalso (V >= 2) ->
1234    {'AuditDescriptor', d(AT, V), dl(APT, V)};
1235d({195, AT, APT}, V) when is_list(AT) andalso (V >= 2) ->
1236    {'AuditDescriptor', dl(AT, V), d(APT, V)};
1237d({196, AT, APT}, V) when (V >= 2) ->
1238    {'AuditDescriptor', d(AT, V), d(APT, V)};
1239
1240d({200, TID, OED}, V) ->
1241    {notifyReq, {'NotifyRequest', dl(TID, V), d(OED, V), asn1_NOVALUE}};
1242d({201, TID, OED, ED}, V) ->
1243    {notifyReq, {'NotifyRequest', dl(TID, V), d(OED, V), d(ED, V)}};
1244d({202, TID, OED}, V) ->
1245    {'NotifyRequest', dl(TID, V), d(OED, V), asn1_NOVALUE};
1246d({203, TID, OED, ED}, V) ->
1247    {'NotifyRequest', dl(TID, V), d(OED, V), d(ED, V)};
1248
1249d({210, RID, OEL}, V) ->
1250    {'ObservedEventsDescriptor', RID, dl(OEL, V)};
1251
1252d({220, EN, SID, EPL, TN}, V) ->
1253    {'ObservedEvent', EN, d(SID, V), dl(EPL, V), d(TN, V)};
1254
1255d({230}, _V) ->
1256    {'EventParameter', "type", ["est"], asn1_NOVALUE};
1257d({231, Val}, _V) ->
1258    {'EventParameter', "type", [Val], asn1_NOVALUE};
1259d({232, Val}, _V) ->
1260    {'EventParameter', "type", Val, asn1_NOVALUE};
1261d({233}, _V) ->
1262    {'EventParameter', "Generalcause", ["NR"], asn1_NOVALUE};
1263d({234}, _V) ->
1264    {'EventParameter', "Generalcause", ["UR"], asn1_NOVALUE};
1265d({235}, _V) ->
1266    {'EventParameter', "Generalcause", ["FT"], asn1_NOVALUE};
1267d({236}, _V) ->
1268    {'EventParameter', "Generalcause", ["FP"], asn1_NOVALUE};
1269d({237}, _V) ->
1270    {'EventParameter', "Generalcause", ["IW"], asn1_NOVALUE};
1271d({238}, _V) ->
1272    {'EventParameter', "Generalcause", ["UN"], asn1_NOVALUE};
1273d({239, Val}, _V) ->
1274    {'EventParameter', "Generalcause", [Val], asn1_NOVALUE};
1275d({240, Val}, _V) ->
1276    {'EventParameter', "Generalcause", Val, asn1_NOVALUE};
1277d({241, Val}, _V) ->
1278    {'EventParameter', "Failurecause", [Val], asn1_NOVALUE};
1279d({242, Val}, _V) ->
1280    {'EventParameter', "Failurecause", Val, asn1_NOVALUE};
1281d({243, EPN, Val}, _V) ->
1282    {'EventParameter', EPN, Val, asn1_NOVALUE};
1283d({244, EPN, Val, EI}, _V) ->
1284    {'EventParameter', EPN, Val, EI};
1285
1286d({260, TID, SCPs}, V) ->
1287    {serviceChangeReq, {'ServiceChangeRequest', dl(TID, V), d(SCPs, V)}};
1288d({261, SCR}, V) ->
1289    {serviceChangeReq, d(SCR, V)};
1290d({262, TID, SCPs}, V) ->
1291    {'ServiceChangeRequest', dl(TID, V), d(SCPs, V)};
1292
1293d({270, TID, SCR}, V) ->
1294    {serviceChangeReply, {'ServiceChangeReply', dl(TID, V), d(SCR, V)}};
1295d({271, SCR}, V) ->
1296    {serviceChangeReply, d(SCR, V)};
1297d({272, TID, SCR}, V) -> %% KOLLA
1298    {'ServiceChangeReply', dl(TID, V), d(SCR, V)};
1299
1300d({280, TSD, S}, V) ->
1301    {mediaDescriptor, {'MediaDescriptor', d(TSD, V), d(S, V)}};
1302d({281, MD}, V) ->
1303    {mediaDescriptor, d(MD, V)};
1304d({282, TSD, S}, V) ->
1305    {'MediaDescriptor', d(TSD, V), d(S, V)};
1306
1307d({290, S}, V) ->
1308    {oneStream, d(S, V)};
1309d({291, S}, V) ->
1310    {multiStream, dl(S, V)};
1311d({292, SID, SP}, V) ->
1312    {'StreamDescriptor', d(SID, V), d(SP, V)};
1313
1314d({300, LCD}, V) ->
1315    {'StreamParms', d(LCD, V), asn1_NOVALUE, asn1_NOVALUE};
1316d({301, LCD, LD}, V) ->
1317    {'StreamParms', d(LCD, V), d(LD, V), asn1_NOVALUE};
1318d({302, LCD, LD, RD}, V) ->
1319    {'StreamParms', d(LCD, V), d(LD, V), d(RD, V)};
1320
1321d({303, LCD}, V)
1322  when V >= 3 ->
1323    {'StreamParms', d(LCD, V), asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1324d({304, LCD, LD}, V)
1325  when V >= 3 ->
1326    {'StreamParms', d(LCD, V), d(LD, V), asn1_NOVALUE, asn1_NOVALUE};
1327d({305, LCD, LD, RD}, V)
1328  when V >= 3 ->
1329    {'StreamParms', d(LCD, V), d(LD, V), d(RD, V), asn1_NOVALUE};
1330d({306, LCD, LD, RD, SD}, V)
1331  when V >= 3 ->
1332    {'StreamParms', d(LCD, V), d(LD, V), d(RD, V), dl(SD, V)};
1333
1334d({310, SM, RV, RG, PP}, V) ->
1335    {'LocalControlDescriptor', d(SM, V), d(RV, V), d(RG, V), dl(PP, V)};
1336
1337d({320, Val}, _V) ->
1338    {'PropertyParm', "v", [Val], asn1_NOVALUE};
1339d({321, Val}, _V) ->
1340    {'PropertyParm', "v", Val, asn1_NOVALUE};
1341d({332, Val}, _V) ->
1342    {'PropertyParm', "o", [Val], asn1_NOVALUE};
1343d({333, Val}, _V) ->
1344    {'PropertyParm', "o", Val, asn1_NOVALUE};
1345d({334, Val}, _V) ->
1346    {'PropertyParm', "s", [Val], asn1_NOVALUE};
1347d({335, Val}, _V) ->
1348    {'PropertyParm', "s", Val, asn1_NOVALUE};
1349d({336, Val}, _V) ->
1350    {'PropertyParm', "i", [Val], asn1_NOVALUE};
1351d({337, Val}, _V) ->
1352    {'PropertyParm', "i", Val, asn1_NOVALUE};
1353d({338, Val}, _V) ->
1354    {'PropertyParm', "u", [Val], asn1_NOVALUE};
1355d({339, Val}, _V) ->
1356    {'PropertyParm', "u", Val, asn1_NOVALUE};
1357d({340, Val}, _V) ->
1358    {'PropertyParm', "e", [Val], asn1_NOVALUE};
1359d({341, Val}, _V) ->
1360    {'PropertyParm', "e", Val, asn1_NOVALUE};
1361d({342, Val}, _V) ->
1362    {'PropertyParm', "p", [Val], asn1_NOVALUE};
1363d({343, Val}, _V) ->
1364    {'PropertyParm', "p", Val, asn1_NOVALUE};
1365d({344, Val}, _V) ->
1366    {'PropertyParm', "c", [Val], asn1_NOVALUE};
1367d({345, Val}, _V) ->
1368    {'PropertyParm', "c", Val, asn1_NOVALUE};
1369d({346, Val}, _V) ->
1370    {'PropertyParm', "b", [Val], asn1_NOVALUE};
1371d({347, Val}, _V) ->
1372    {'PropertyParm', "b", Val, asn1_NOVALUE};
1373d({348, Val}, _V) ->
1374    {'PropertyParm', "z", [Val], asn1_NOVALUE};
1375d({349, Val}, _V) ->
1376    {'PropertyParm', "z", Val, asn1_NOVALUE};
1377d({350, Val}, _V) ->
1378    {'PropertyParm', "k", [Val], asn1_NOVALUE};
1379d({351, Val}, _V) ->
1380    {'PropertyParm', "k", Val, asn1_NOVALUE};
1381d({352, Val}, _V) ->
1382    {'PropertyParm', "a", [Val], asn1_NOVALUE};
1383d({353, Val}, _V) ->
1384    {'PropertyParm', "a", Val, asn1_NOVALUE};
1385d({354, Val}, _V) ->
1386    {'PropertyParm', "t", [Val], asn1_NOVALUE};
1387d({355, Val}, _V) ->
1388    {'PropertyParm', "t", Val, asn1_NOVALUE};
1389d({356, Val}, _V) ->
1390    {'PropertyParm', "r", [Val], asn1_NOVALUE};
1391d({357, Val}, _V) ->
1392    {'PropertyParm', "r", Val, asn1_NOVALUE};
1393d({358, Val}, _V) ->
1394    {'PropertyParm', "m", [Val], asn1_NOVALUE};
1395d({359, Val}, _V) ->
1396    {'PropertyParm', "m", Val, asn1_NOVALUE};
1397d({360, Val}, _V) ->
1398    {'PropertyParm', "nt/jit", [Val], asn1_NOVALUE};
1399d({361, Val}, _V) ->
1400    {'PropertyParm', "nt/jit", Val, asn1_NOVALUE};
1401d({362}, _V) ->
1402    {'PropertyParm', "tdmc/ec", ["on"], asn1_NOVALUE};
1403d({363}, _V) ->
1404    {'PropertyParm', "tdmc/ec", ["off"], asn1_NOVALUE};
1405d({364}, _V) ->
1406    {'PropertyParm', "tdmc/gain", ["automatic"], asn1_NOVALUE};
1407d({365, Val}, _V) ->
1408    {'PropertyParm', "tdmc/gain", [Val], asn1_NOVALUE};
1409d({366, Val}, _V) ->
1410    {'PropertyParm', "tdmc/gain", Val, asn1_NOVALUE};
1411d({367, Val}, _V) ->
1412    {'PropertyParm', "maxNumberOfContexts", [Val], asn1_NOVALUE};
1413d({368, Val}, _V) ->
1414    {'PropertyParm', "maxNumberOfContexts", Val, asn1_NOVALUE};
1415d({369, Val}, _V) ->
1416    {'PropertyParm', "maxTerminationsPerContext", [Val], asn1_NOVALUE};
1417d({370, Val}, _V) ->
1418    {'PropertyParm', "maxTerminationsPerContext", Val, asn1_NOVALUE};
1419d({371, Val}, _V) ->
1420    {'PropertyParm', "normalMGExecutionTime", [Val], asn1_NOVALUE};
1421d({372, Val}, _V) ->
1422    {'PropertyParm', "normalMGExecutionTime", Val, asn1_NOVALUE};
1423d({373, Val}, _V) ->
1424    {'PropertyParm', "normalMGCExecutionTime", [Val], asn1_NOVALUE};
1425d({374, Val}, _V) ->
1426    {'PropertyParm', "normalMGCExecutionTime", Val, asn1_NOVALUE};
1427d({375, Val}, _V) ->
1428    {'PropertyParm', "MGProvisionalResponseTimerValue", [Val], asn1_NOVALUE};
1429d({376, Val}, _V) ->
1430    {'PropertyParm', "MGProvisionalResponseTimerValue", Val, asn1_NOVALUE};
1431d({377, Val}, _V) ->
1432    {'PropertyParm', "MGCProvisionalResponseTimerValue", [Val], asn1_NOVALUE};
1433d({378, Val}, _V) ->
1434    {'PropertyParm', "MGCProvisionalResponseTimerValue", Val, asn1_NOVALUE};
1435d({379, N, Val}, _V) ->
1436    {'PropertyParm', N, [Val], asn1_NOVALUE};
1437d({380, N, Val}, _V) ->
1438    {'PropertyParm', N, Val, asn1_NOVALUE};
1439d({381, N, Val, EI}, _V) ->
1440    {'PropertyParm', N, Val, EI};
1441
1442d({400, PG}, V) ->
1443    {'LocalRemoteDescriptor', [[d(PG, V)]]};
1444d({401, PG}, V) ->
1445    {'LocalRemoteDescriptor', [dl(PG, V)]};
1446d({402, PG}, V) ->
1447    {'LocalRemoteDescriptor', dll(PG, V)};
1448
1449d({410, PP, EBC, SS}, V) ->
1450    {'TerminationStateDescriptor', dl(PP, V), d(EBC, V), d(SS, V)};
1451
1452d({420, RID, E}, V) ->
1453    {eventsDescriptor, {'EventsDescriptor', d(RID, V), [d(E, V)]}};
1454d({421, RID, EL}, V) ->
1455    {eventsDescriptor, {'EventsDescriptor', d(RID, V), dl(EL, V)}};
1456d({422, ED}, V) ->
1457    {eventsDescriptor, d(ED, V)};
1458d({423, RID, E}, V) ->
1459    {'EventsDescriptor', d(RID, V), [d(E, V)]};
1460d({424, RID, EL}, V) ->
1461    {'EventsDescriptor', d(RID, V), dl(EL, V)};
1462
1463d({425, PN, SID, EA, EPL}, V) ->
1464    {'RequestedEvent', PN, d(SID, V), d(EA, V), dl(EPL, V)};
1465
1466d({430, SED, SD}, V) ->
1467    {'RegulatedEmbeddedDescriptor', d(SED, V), dl(SD, V)};
1468
1469d({435, NI}, V) ->
1470    {notifyImmediate, d(NI, V)};
1471d({436, NR}, V) ->
1472    {notifyRegulated, d(NR, V)};
1473d({437, NN}, V) ->
1474    {neverNotify, d(NN, V)};
1475
1476d({440, KA, EDM, SE, SD}, V) ->
1477    {'RequestedActions', d(KA, V), d(EDM, V), d(SE, V), d(SD, V)};
1478d({441, KA, EDM, SE, SD}, V)
1479  when V >= 3 ->
1480    {'RequestedActions', d(KA, V), d(EDM, V), d(SE, V), d(SD, V),
1481     asn1_NOVALUE, asn1_NOVALUE};
1482d({442, KA, EDM, SE, SD, NB}, V)
1483  when V >= 3 ->
1484    {'RequestedActions', d(KA, V), d(EDM, V), d(SE, V), d(SD, V),
1485     d(NB, V), asn1_NOVALUE};
1486d({443, KA, EDM, SE, SD, NB, RED}, V)
1487  when V >= 3 ->
1488    {'RequestedActions', d(KA, V), d(EDM, V), d(SE, V), d(SD, V),
1489     d(NB, V), d(RED, V)};
1490
1491d({450, RID, E}, V) ->
1492    {'SecondEventsDescriptor', d(RID, V), [d(E, V)]};
1493d({451, RID, EL}, V) ->
1494    {'SecondEventsDescriptor', d(RID, V), dl(EL, V)};
1495
1496d({460, PN, SID, EA, EPL}, V) ->
1497    {'SecondRequestedEvent', PN, d(SID, V), d(EA, V), d(EPL, V)};
1498
1499d({470, KA, EDM, SD}, V) ->
1500    {'SecondRequestedActions', d(KA, V), d(EDM, V), d(SD, V)};
1501d({471, KA, EDM, SD}, V)
1502  when V >= 3 ->
1503    {'SecondRequestedActions', d(KA, V), d(EDM, V), d(SD, V),
1504     asn1_NOVALUE, asn1_NOVALUE};
1505d({472, KA, EDM, SD, NB}, V)
1506  when V >= 3 ->
1507    {'SecondRequestedActions', d(KA, V), d(EDM, V), d(SD, V),
1508     d(NB, V), asn1_NOVALUE};
1509d({473, KA, EDM, SD, NB, RED}, V)
1510  when V >= 3 ->
1511    {'SecondRequestedActions', d(KA, V), d(EDM, V), d(SD, V),
1512     d(NB, V), d(RED, V)};
1513
1514d({480, EN, SID, EPL}, V) ->
1515    {'EventSpec', EN, d(SID, V), dl(EPL, V)};
1516
1517d({490, ID, SL}, V) ->
1518    {'SeqSigList', ID, dl(SL, V)};
1519
1520d({500, S}, V) ->
1521    {signalsDescriptor, dl(S, V)};
1522
1523d({510, S}, V) ->
1524    {signal, d(S, V)};
1525
1526d({520, SN, SID, ST, D, NC, KA, SPL}, V) ->
1527    {'Signal',
1528     SN, d(SID, V), d(ST, V), d(D, V), d(NC, V), d(KA, V), dl(SPL, V)};
1529d({521, SN, SID, ST, D, NC, KA, SPL}, V)
1530  when V >= 3 ->
1531    {'Signal',
1532     SN, d(SID, V), d(ST, V), d(D, V), d(NC, V), d(KA, V), dl(SPL, V),
1533     asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1534d({522, SN, SID, ST, D, NC, KA, SPL, SD}, V)
1535  when V >= 3 ->
1536    {'Signal',
1537     SN, d(SID, V), d(ST, V), d(D, V), d(NC, V), d(KA, V), dl(SPL, V),
1538     d(SD, V), asn1_NOVALUE, asn1_NOVALUE};
1539d({523, SN, SID, ST, D, NC, KA, SPL, SD, RID}, V)
1540  when V >= 3 ->
1541    {'Signal',
1542     SN, d(SID, V), d(ST, V), d(D, V), d(NC, V), d(KA, V), dl(SPL, V),
1543     d(SD, V), d(RID, V), asn1_NOVALUE};
1544d({524, SN, SID, ST, D, NC, KA, SPL, SD, RID, IsD}, V)
1545  when V >= 3 ->
1546    {'Signal',
1547     SN, d(SID, V), d(ST, V), d(D, V), d(NC, V), d(KA, V), dl(SPL, V),
1548     d(SD, V), d(RID, V), d(IsD, V)};
1549
1550d({530, SPN, Val}, _V) ->
1551    {'SigParameter', SPN, Val, asn1_NOVALUE};
1552d({531, SPN, Val, EI}, _V) ->
1553    {'SigParameter', SPN, Val, EI};
1554
1555d({550, MD}, V) ->
1556    {modemDescriptor, d(MD, V)};
1557d({551, MTL, MPL}, _V) ->
1558    {'ModemDescriptor', MTL, MPL, asn1_NOVALUE};
1559d({552, MTL, MPL, NSD}, _V) ->
1560    {'ModemDescriptor', MTL, MPL, NSD};
1561
1562d({560, DMN, DMV}, V) ->
1563    {digitMapDescriptor, {'DigitMapDescriptor', DMN, d(DMV, V)}};
1564d({561, DMD}, V) ->
1565    {digitMapDescriptor, d(DMD, V)};
1566d({562, DMN, DMV}, V) ->
1567    {'DigitMapDescriptor', DMN, d(DMV, V)};
1568
1569d({570, Start, Stop, Long, DMB}, 1 = V) ->
1570    {'DigitMapValue', d(Start, V), d(Stop, V), d(Long, V), DMB};
1571d({571, Start, Stop, Long, DMB, Dur}, V) when V >= 2 ->
1572    {'DigitMapValue', d(Start, V), d(Stop, V), d(Long, V), DMB, d(Dur, V)};
1573
1574d({580, M, A, Ver, Prof, R, D, Id}, V) ->
1575    {'ServiceChangeParm',
1576     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1577     asn1_NOVALUE, asn1_NOVALUE};
1578d({581, M, A, Ver, Prof, R, D, Id, TS}, V) ->
1579    {'ServiceChangeParm',
1580     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1581     d(TS, V), asn1_NOVALUE};
1582d({582, M, A, Ver, Prof, R, D, Id, TS, NSD}, V) ->
1583    {'ServiceChangeParm',
1584     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1585     d(TS, V), NSD};
1586
1587d({583, M, A, Ver, Prof, R, D, Id, TS, NSD}, V)
1588  when V == 2 ->
1589    {'ServiceChangeParm',
1590     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1591     d(TS, V), NSD, asn1_NOVALUE};
1592d({584, M, A, Ver, Prof, R, D, Id, TS, NSD, Info}, V)
1593  when V == 2 ->
1594    {'ServiceChangeParm',
1595     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1596     d(TS, V), NSD, d(Info, V)};
1597
1598d({585, M, A, Ver, Prof, R, D, Id, TS, NSD}, V)
1599  when V >= 3 ->
1600    {'ServiceChangeParm',
1601     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1602     d(TS, V), NSD, asn1_NOVALUE, asn1_NOVALUE};
1603d({586, M, A, Ver, Prof, R, D, Id, TS, NSD, Info}, V)
1604  when V >= 3 ->
1605    {'ServiceChangeParm',
1606     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1607     d(TS, V), NSD, d(Info, V), asn1_NOVALUE};
1608d({587, M, A, Ver, Prof, R, D, Id, TS, NSD, Info, Flag}, V)
1609  when V >= 3 ->
1610    {'ServiceChangeParm',
1611     d(M, V), d(A, V), d(Ver, V), d(Prof, V), R, d(D, V), d(Id, V),
1612     d(TS, V), NSD, d(Info, V), d(Flag, V)};
1613
1614d({590, Id, A, Ver, Prof, TS}, V) ->
1615    {serviceChangeResParms, {'ServiceChangeResParm', Id, d(A, V), Ver, d(Prof, V), TS}};
1616d({591, SCRP}, V) ->
1617    {serviceChangeResParms, d(SCRP, V)};
1618d({592, Id, A, Ver, Prof, TS}, V) ->
1619    {'ServiceChangeResParm', Id, d(A, V), Ver, d(Prof, V), TS};
1620
1621d({600, N}, _V) ->
1622    {portNumber, N};
1623
1624d({610, D, T}, _V) ->
1625    {'TimeNotation', D, T};
1626
1627d({620, N, Ver}, _V) ->
1628    {'ServiceChangeProfile', N, Ver};
1629
1630d({630, N}, _) ->
1631    {digitMapName, N};
1632
1633d({640, Id}, _V) ->
1634    {megaco_term_id, false, Id};
1635d({641}, _V) ->
1636    {megaco_term_id, true, [[$*]]};
1637d({642}, _V) ->
1638    {megaco_term_id, true, [[$$]]};
1639d({643, Id}, _V) ->
1640    {megaco_term_id, true, Id};
1641d({644, W, ID}, _V) ->
1642    {'TerminationID', W, ID};
1643
1644d({650, TID}, V) ->
1645    {modReply, {'AmmsReply', dl(TID, V), asn1_NOVALUE}};
1646d({651, TID, TA}, V) ->
1647    {modReply, {'AmmsReply', dl(TID, V), [d(TA, V)]}};
1648d({652, TID, TA}, V) ->
1649    {modReply, {'AmmsReply', dl(TID, V), dl(TA, V)}};
1650d({653, R}, V) ->
1651    {modReply, d(R, V)};
1652
1653d({655, AR}, V) ->
1654    {moveReply, d(AR, V)};
1655
1656d({660, TID}, V) ->
1657    {addReply, {'AmmsReply', dl(TID, V), asn1_NOVALUE}};
1658d({661, TID, TA}, V) ->
1659    {addReply, {'AmmsReply', dl(TID, V), [d(TA, V)]}};
1660d({662, TID, TA}, V) ->
1661    {addReply, {'AmmsReply', dl(TID, V), dl(TA, V)}};
1662d({663, R}, V) ->
1663    {addReply, d(R, V)};
1664
1665d({670, TID}, V) ->
1666    {subtractReply, {'AmmsReply', dl(TID, V), asn1_NOVALUE}};
1667d({671, TID, TA}, V) ->
1668    {subtractReply, {'AmmsReply', dl(TID, V), [d(TA, V)]}};
1669d({672, TID, TA}, V) ->
1670    {subtractReply, {'AmmsReply', dl(TID, V), dl(TA, V)}};
1671d({673, R}, V) ->
1672    {subtractReply, d(R, V)};
1673
1674d({680, TID}, V) ->
1675    {'AmmsReply', dl(TID, V), asn1_NOVALUE};
1676d({681, TID, TA}, V) ->
1677    {'AmmsReply', dl(TID, V), [d(TA, V)]};
1678d({682, TID, TA}, V) ->
1679    {'AmmsReply', dl(TID, V), dl(TA, V)};
1680
1681d({690, TID}, V) ->
1682    {notifyReply, {'NotifyReply', dl(TID, V), asn1_NOVALUE}};
1683d({691, TID, ED}, V) ->
1684    {notifyReply, {'NotifyReply', dl(TID, V), d(ED, V)}};
1685d({692, R}, V) ->
1686    {notifyReply, d(R, V)};
1687d({693, TID}, V) ->
1688    {'NotifyReply', dl(TID, V), asn1_NOVALUE};
1689d({694, TID, ED}, V) ->
1690    {'NotifyReply', dl(TID, V), d(ED, V)};
1691
1692d({700, AVR}, V) ->
1693    {auditValueReply, d(AVR, V)};
1694
1695d({705, TIDs}, V) ->
1696    {contextAuditResult, dl(TIDs, V)};
1697
1698d({710, TID, TAR}, V) ->
1699    {auditResult, {'AuditResult', d(TID, V), [d(TAR, V)]}};
1700d({711, TID, TAR}, V) ->
1701    {auditResult, {'AuditResult', d(TID, V), dl(TAR, V)}};
1702d({712, AR}, V) ->
1703    {auditResult, d(AR, V)};
1704d({713, TID, TAR}, V) ->
1705    {'AuditResult', d(TID, V), [d(TAR, V)]};
1706d({714, TID, TAR}, V) ->
1707    {'AuditResult', d(TID, V), dl(TAR, V)};
1708
1709d({715, TIDs, [TAR]}, V) ->
1710    {auditResultTermList, {'TermListAuditResult', dl(TIDs, V), [d(TAR, V)]}};
1711d({716, TIDs, TAR}, V) ->
1712    {auditResultTermList, {'TermListAuditResult', dl(TIDs, V), dl(TAR, V)}};
1713
1714d({720, PsD}, V) ->
1715    {packagesDescriptor, dl(PsD, V)};
1716
1717d({730}, _V) ->
1718    {'PackagesItem', "g", 1};
1719d({731}, _V) ->
1720    {'PackagesItem', "tonegen", 1};
1721d({732}, _V) ->
1722    {'PackagesItem', "tonedet", 1};
1723d({733}, _V) ->
1724    {'PackagesItem', "tg", 1};
1725d({734}, _V) ->
1726    {'PackagesItem', "dd", 1};
1727d({735}, _V) ->
1728    {'PackagesItem', "cg", 1};
1729d({736}, _V) ->
1730    {'PackagesItem', "cd", 1};
1731d({737}, _V) ->
1732    {'PackagesItem', "al", 1};
1733d({738}, _V) ->
1734    {'PackagesItem', "ct", 1};
1735d({739}, _V) ->
1736    {'PackagesItem', "nt", 1};
1737d({740}, _V) ->
1738    {'PackagesItem', "rtp", 1};
1739d({741}, _V) ->
1740    {'PackagesItem', "tdmc", 1};
1741d({742, Name, Ver}, _V) ->
1742    {'PackagesItem', Name, Ver};
1743
1744d({760, AD}, V) ->
1745    {emptyDescriptors, d(AD, V)};
1746
1747d({770, SD}, V) ->
1748    {statisticsDescriptor, [d(SD, V)]};
1749d({771, SsD}, V) ->
1750    {statisticsDescriptor, dl(SsD, V)};
1751
1752d({780, Name}, _V) ->
1753    {'StatisticsParameter', Name, asn1_NOVALUE};
1754d({781, Name, Value}, _V) ->
1755    {'StatisticsParameter', Name, Value};
1756
1757d({800, MT, TL}, V) ->
1758    {'MuxDescriptor', d(MT, V), dl(TL, V), asn1_NOVALUE};
1759d({801, MT, TL, NSD}, V) ->
1760    {'MuxDescriptor', d(MT, V), dl(TL, V), NSD};
1761
1762d({900, N, Ver}, V) when (V >= 2) ->
1763    {indAudPackagesDescriptor, {'IndAudPackagesDescriptor', N, Ver}};
1764d({900, IAPD}, V) when (V >= 2) ->
1765    {indAudPackagesDescriptor, d(IAPD, V)};
1766d({901, N, Ver}, V) when (V >= 2) ->
1767    {'IndAudPackagesDescriptor', N, Ver};
1768
1769d({910, N}, V) when (V >= 2) ->
1770    {indAudStatisticsDescriptor, {'IndAudStatisticsDescriptor', N}};
1771d({911, IASD}, V) when (V >= 2) ->
1772    {indAudStatisticsDescriptor, d(IASD, V)};
1773d({912, N}, V) when (V >= 2) ->
1774    {'IndAudStatisticsDescriptor', N};
1775
1776d({920, DMN}, V) when (V >= 2) ->
1777    {indAudDigitMapDescriptor, {'IndAudDigitMapDescriptor', DMN}};
1778d({921, IADMD}, V) when (V >= 2) ->
1779    {indAudDigitMapDescriptor, d(IADMD, V)};
1780d({922, DMN}, V) when (V >= 2) ->
1781    {'IndAudDigitMapDescriptor', DMN};
1782
1783d({930, IASD}, V) when (V >= 2) ->
1784    {indAudSignalsDescriptor, {seqSigList, d(IASD, V)}};
1785d({931, IAS}, V) when (V >= 2) ->
1786    {indAudSignalsDescriptor, {signal, d(IAS, V)}};
1787
1788d({940, Id, SL}, V) when (V >= 2) ->
1789    {'IndAudSeqSigList', Id, d(SL, V)};
1790
1791d({950, N, SID}, 2 = V) ->
1792    {'IndAudSignal', N, d(SID, V)};
1793d({951, N, SID}, V) when (V >= 3) ->
1794    {'IndAudSignal', N, d(SID, V), asn1_NOVALUE};
1795d({952, N, SID, RID}, V) when (V >= 3) ->
1796    {'IndAudSignal', N, d(SID, V), d(RID, V)};
1797
1798d({960, EN, SID}, V) when (V >= 2) ->
1799    {indAudEventBufferDescriptor,
1800     {'IndAudEventBufferDescriptor', EN, d(SID, V)}};
1801d({961, IAEBD}, V) when (V >= 2) ->
1802    {indAudEventBufferDescriptor, d(IAEBD, V)};
1803d({962, EN, SID}, V) when (V >= 2) ->
1804    {'IndAudEventBufferDescriptor', EN, d(SID, V)};
1805
1806d({970, RID, N, SID}, V) when (V >= 2) ->
1807    {indAudEventsDescriptor,
1808     {'IndAudEventsDescriptor', d(RID, V), N, d(SID, V)}};
1809d({971, IAED}, V) when (V >= 2) ->
1810    {indAudEventsDescriptor, d(IAED, V)};
1811d({972, RID, N, SID}, V) when (V >= 2) ->
1812    {'IndAudEventsDescriptor', d(RID, V), N, d(SID, V)};
1813
1814d({980, TSD, S}, V) when (V >= 2) ->
1815    {indAudMediaDescriptor, {'IndAudMediaDescriptor', d(TSD, V), d(S, V)}};
1816d({981, IAMD}, V) when (V >= 2) ->
1817    {indAudMediaDescriptor, d(IAMD, V)};
1818d({982, TSD, S}, V) when (V >= 2) ->
1819    {'IndAudMediaDescriptor', d(TSD, V), d(S, V)};
1820
1821d({990, PP, EBC, SS}, 2 = V) ->
1822    {'IndAudTerminationStateDescriptor', dl(PP, V), d(EBC, V), d(SS, V)};
1823d({991, PP, EBC, SS}, V) when V >= 3 ->
1824    {'IndAudTerminationStateDescriptor', dl(PP, V), d(EBC, V), d(SS, V),
1825     asn1_NOVALUE};
1826d({992, PP, EBC, SS, SSS}, V) when V >= 3 ->
1827    {'IndAudTerminationStateDescriptor', dl(PP, V), d(EBC, V), d(SS, V),
1828     d(SSS, V)};
1829
1830d({1000, SID, SP}, V) ->
1831    {'IndAudStreamDescriptor', d(SID, V), d(SP, V)};
1832
1833d({1010, LCD}, 2 = V) ->
1834    {'IndAudStreamParms', d(LCD, V), asn1_NOVALUE, asn1_NOVALUE};
1835d({1011, LCD, LD, RD}, 2 = V) ->
1836    {'IndAudStreamParms', d(LCD, V), d(LD, V), d(RD, V)};
1837d({1012, LCD}, V) when V >= 3 ->
1838    {'IndAudStreamParms', d(LCD, V), asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE};
1839d({1013, LCD, LD}, V) when V >= 3 ->
1840    {'IndAudStreamParms', d(LCD, V), d(LD, V), asn1_NOVALUE, asn1_NOVALUE};
1841d({1014, LCD, LD, RD}, V) when V >= 3 ->
1842    {'IndAudStreamParms', d(LCD, V), d(LD, V), d(RD, V), asn1_NOVALUE};
1843d({1015, LCD, LD, RD, SD}, V) when V >= 3 ->
1844    {'IndAudStreamParms', d(LCD, V), d(LD, V), d(RD, V), d(SD, V)};
1845
1846d({1020, SM, RV, RG}, 2 = V) ->
1847    {'IndAudLocalControlDescriptor',
1848     d(SM, V), d(RV, V), d(RG, V), asn1_NOVALUE};
1849d({1021, SM, RV, RG, PP}, 2 = V)
1850  when is_list(PP) ->
1851    {'IndAudLocalControlDescriptor', d(SM, V), d(RV, V), d(RG, V), dl(PP, V)};
1852d({1022, SM, RV, RG}, V) when (V >= 3) ->
1853    {'IndAudLocalControlDescriptor',
1854     d(SM, V), d(RV, V), d(RG, V), asn1_NOVALUE, asn1_NOVALUE};
1855d({1023, SM, RV, RG, PP}, V)
1856  when is_list(PP) andalso (V >= 3) ->
1857    {'IndAudLocalControlDescriptor', d(SM, V), d(RV, V), d(RG, V), dl(PP, V),
1858     asn1_NOVALUE};
1859d({1024, SM, RV, RG, PP, SMS}, V)
1860  when is_list(PP) andalso (V >= 3) ->
1861    {'IndAudLocalControlDescriptor', d(SM, V), d(RV, V), d(RG, V), dl(PP, V),
1862     d(SMS, V)};
1863
1864d({1030, N}, 2 = _V) ->
1865    {'IndAudPropertyParm', N};
1866d({1031, N}, V) when V >= 3 ->
1867    {'IndAudPropertyParm', N, asn1_NOVALUE};
1868d({1032, N, PP}, V) when V >= 3 ->
1869    {'IndAudPropertyParm', N, d(PP, V)};
1870
1871d({1100}, _V) ->
1872    oneway;
1873d({1101}, _V) ->
1874    bothway;
1875d({1102}, _V) ->
1876    isolate;
1877d({1103}, _V) ->
1878    onewayexternal;
1879d({1104}, _V) ->
1880    onewayboth;
1881
1882d(T, _V) ->
1883    %% io:format("d(~w) -> ~nT: ~w~n", [_V, T]),
1884    T.
1885
1886
1887%% i(F, A) ->
1888%%     %% i(get(dbg), F, A).
1889%%     i(true, F, A).
1890
1891%% i(true, F, A) ->
1892%%     io:format("DBG:" ++ F ++ "~n", A);
1893%% i(_, _, _) ->
1894%%     ok.
1895
1896